개요

웹사이트나 게임 등에서 서비스가 동작할 때 각종 비밀번호, 데이터베이스 연결정보, 인증서 키, 암호화 복호화 키 등을 사용하는 경우가 많습니다. 하지만, 이런 중요한 키 등을 소스코드에 포함시켜 하드코딩해두는 방식은 보안적인 측면에서 절대로 해서는 안되는 방식입니다만, 그렇다고 어디 따로 보관해서 사용하는 것도 마땅치 않은 것도 사실입니다.

Ncloud의 Secret Manager 서비스는 이런 비밀번호나 인증키 같은 중요한 정보를 안전하게 저장하고 필요할 때 가져다 쓸 수 있도록 해주는 서비스로 현재 OBT (Open Beta Test)로 제공 중이며, 10월 1일 정식 제공 전까지는 무료로 이용할 수 있습니다.

그래서 여기서는 [Secret Manager]에 데이터 베이스 연결정보를 저장하고 PHP에서 API로 해당 정보를 호출하는 기본 기능만을 우선 정리해보고, 상세 기능은 차후에 정식버전이 출시되면 다시 정리해보겠습니다.

서비스 위치

[Secret Manager] 서비스의 위치는 [Security] - [Secret Manager]에 있습니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

Secret 생성

우선 [Secret 생성] 버튼을 클릭합니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

Secret 기본 정보 입력

Secret의 이름을 입력합니다. [보호 키]의 경우 현재는 기본으로 제공하는 [Default Key]만 선택 가능합니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

교체 설정

[Secret Manager] 서비스에서는 저장된 값을 주기적으로 교체 적용시킬 수도 있는데, 여기서는 자동 교체없이 다음 단계로 넘어가겠습니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

Secret 값 입력

[Secret Manager] 서비스를 활용하기 가장 좋은 정보가 바로 [Database 연결정보]입니다. 그래서 여기서는 데이터베이스 연결정보를 샘플로 만들어서 입력해보았습니다.
아래와 같이 [Key], [Value]를 각각 입력합니다. 이번에는 [자동 교체] 기능을 사용하지는 않지만, 시스템 구조상 최소 1개는 반드시 선택해야 하므로 아무거나 선택하고 다음 단계로 넘어가겠습니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

최종 확인

입력한 Secret 값들을 마지막으로 확인하고 이상이 없으면 [Secret 생성] 버튼을 클릭해서 생성 완료를 합니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

Secret ID 확인

Secret이 생성되면 아래와 같은 화면을 볼 수 있으며, 그 중에서 [Secret ID]는 Secret 값을 얻기 위해 API를 호출할 때 사용하게 됩니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드

Secret 값 호출

API 호출

아래 코드는 API로 [Secret Manager]에 접근해서 설정된 Secret 값을 가져오는 방법에 대한 전체 코드인데, PHP로 구성되어 있습니다.
여기서 중요한 [API Access Key]와 [API Secret Key]를 생성하는 방법과 접근 제한 설정 등은 아래 문서에서 확인 가능합니다.

전체 코드

  <?php		
	$unixtimestamp =  round(microtime(true) * 1000);
	$ncloud_api_accesskey = {Ncloud API AccessKey};
	$ncloud_api_secretkey = {Ncloud API SecretKey};
	$ncloud_secret_id = {Ncloud Secret Manager Secret ID};
	$apicall_method = "GET";
	$api_server = "https://secretmanager.apigw.ntruss.com";
	$api_url = "/api/v1/secrets/".$ncloud_secret_id."/values";

	$msg_signature = "";
	$space = " ";
	$new_line = "\n";
	$message = 
            $apicall_method
            .$space
            .$api_url
            .$new_line
            .$unixtimestamp
            .$new_line
            .$ncloud_api_accesskey;	
	$msg_signature = base64_encode(hash_hmac('sha256', $message, $ncloud_api_secretkey, true));

	$http_header = array();
	$http_header[0] = "x-ncp-apigw-timestamp:".$unixtimestamp."";
	$http_header[1] = "x-ncp-iam-access-key:".$ncloud_api_accesskey."";
	$http_header[2] = "x-ncp-apigw-signature-v2:".$msg_signature."";

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $api_server.$api_url);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);	
	curl_setopt($ch, CURLOPT_HTTPHEADER, $http_header);
	$json_response = curl_exec($ch);
	curl_close($ch);

	$rows_response = json_decode($json_response, JSON_OBJECT_AS_ARRAY);

	var_dump($rows_response);
?>
  

Secret 값 확인

API로 호출한 값을 출력해보면 아래와 같이 처음에 콘솔에서 입력했던 값이 정상적으로 반환되는 것을 알 수 있습니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드
  
array(2) {
  ["code"]=>
  string(7) "SUCCESS"
  ["data"]=>
  array(2) {
    ["decryptedSecretChain"]=>
    array(1) {
      ["active"]=>
      string(128) "{"HostName":"db-**.vpc-cdb.ntruss.com","UserName":"dbuser","Password":"a^**k**a","Database":"testdb","Port":"3306"}"
    }
    ["rotationTargets"]=>
    array(1) {
      [0]=>
      string(8) "Password"
    }
  }
}
  

Secret 값 편집

설정했던 [Secret 값]을 수정, 편집하려면 [Secret 값] 탭에 들어가서 [Secret 값 보기] 버튼을 클릭한 후에 해당 값을 마우스 좌클릭 또는 우클릭해서 수정하면 됩니다.

Ncloud (네이버 클라우드) Secret Manager 기본 가이드 Ncloud (네이버 클라우드) Secret Manager 기본 가이드

참고 URL

  1. Ncloud Secret Manager 서비스 소개
    https://www.ncloud.com/product/security/secretManager

  2. Ncloud Secret Manager 사용 가이드
    https://guide.ncloud-docs.com/docs/secretmanager-overview

  3. Ncloud Secret Manager API 사용 가이드
    https://api.ncloud-docs.com/docs/secretmanager-api-overview

문서 업데이트 내역

날짜 내용
2024-07-03 문서 최초 생성