개요
Ncloud(네이버 클라우드)를 이용하다보면 여러 가지 정보를 조회하거나 서버를 생성하는 등의 작업을 위해 API를 활용하게 되는 경우가 많습니다. 그런데 이때 사용하는 API Key를 접근 제한 없이 사용하게 되면 외부에 유출되거나 했을 때 심각한 보안 문제를 일으키게 되므로 사전에 API Key에 대한 권한을 설정하거나 접근 제한을 설정해서 사용하는 것이 권장됩니다.
여기서는 API Key를 최소 권한으로 생성하고, 접근 경로를 제한 하는 등의 방법들을 정리해보겠습니다.
서브 계정 생성
API Key 보안과 관련해서 가장 중요한 원칙은 메인 계정이 아닌 최소 권한을 가진 서브 계정(Sub Account)에서 API Key를 생성하는 것입니다.
- 테스트를 위해 아래와 같이 서브 계정을 준비하고, 계정을 클릭해서 서브 계정 세부 정보 화면으로 이동합니다.
계정 권한 설정
서브 계정의 권한은 최소로 설정해야 합니다.
예를 들어 Object Storage만 접근하는지, VPC Server 관련된 기능만 사용할 것인지, VPC Server 관련된 기능 중에서도 조회 기능만 사용할 것인지, Server 생성 등을 포함한 모든 기능을 사용할 것인지 등의 사용에 필요한 권한을 모두 정리해서 최소한의 권한으로 설정하는 것이 안전합니다.
우선, 서브 계정 세부 정보 화면에서 아래쪽에 있는 [정책] 탭에 있는 [개별 권한 추가] 버튼을 클릭합니다.
정책 추가 화면에서는 네이버 클라우드에서 기본으로 제공하는 [관리형 정책]과 사용자가 직접 정의하는 [사용자 정의 정책]이 있습니다.
우선 [관리형 정책]에서 필요한 정책을 선택하고 [추가] 버튼을 클릭합니다.
- 정책이 워낙 많기 때문에 가능하면 위쪽의 검색 기능을 이용해서 정책을 찾는 것을 추천합니다.
여기서는 테스트를 위해 Function으로 검색해서 [NCP_VPC_CLOUD_FUNCTIONS_MANAGER (VPC 기반 Cloud Functions 서비스 내 모든 기능을 이용할 수 있는 권한)]을 선택했습니다.
API Gateway 접근 권한 설정
우선, [서브 계정 세부 정보] 화면에서 [수정] 메뉴 버튼을 클릭합니다.
- [서브 계정 정보] 수정 화면에서 [접근 권한]에 있는 [API Gateway 접근]을 체크합니다. 그리고, 되도록이면 [지정된 Source에서만 접근 가능] 옵션을 선택하고, 지정된 IP 등을 추가하는 것을 권장합니다.
- 위 화면에서 [추가] 버튼을 클릭하면 아래와 같이 [접근 가능 Source 지정] 팝업이 나타나는데, IP를 입력하거나 VPC Server를 선택하면 됩니다.
⁃ 아래 화면처럼 VPC Server 리스트에서 직접 선택해야 접근 가능합니다.
⁃ 그러므로 다른 계정의 VPC Server는 접근 가능 리소스에 추가할 수 없습니다.
API Access Key 추가
위에서 [API Gateway 접근] 권한을 추가하면 계정 정보 화면에 아래와 같이 [Access Key] 탭이 나타나고 [추가] 버튼을 클릭하면 [Access Key]와 [Secret Key]를 생성할 수 있습니다.
접근 제한 테스트
그러면 위에서 설정했던 접근 제한 설정이 제대로 작동하는지 테스트 해보겠습니다.
IP 제한
위에서 설정한 [접근 가능 Source 지정] 항목에 IP를 설정하지 않거나, 지정되지 않은 IP에서 접근할 경우 아래의 예시와 같은 오류 메시지가 반환됩니다.
- 호출 API: getProductList
<Message>
<error>
<errorCode>230</errorCode>
<message>Forbidden</message>
<details>IP not allowed for authentication.</details>
</error>
</Message>
계정 권한 제한
계정에 올바른 권한이 설정되지 않았을 경우 아래와 같은 오류 메시지가 반환됩니다.
- 호출 API: createServerInstances
<responseError>
<returnCode>802</returnCode>
<returnMessage>You do not have authority about action : [VPCServer:Change/createServerInstance].</returnMessage>
</responseError>
- 호출 API: getDemandCostList
<responseError>
<returnCode>2210</returnCode>
<returnMessage>You do not have authority about action : [NCP_FINANCE_MANAGER].</returnMessage>
</responseError>
주요 API 최소 권한
API | 설명 | Classic/VPC | 최소 권한 |
---|---|---|---|
getProductList | Ncloud 상품 리스트 조회 | 공통 | 없음 |
getDemandCostList | 청구 비용 리스트 조회 | 공통 | NCP_FINANCE_MANAGER |
getServerInstanceList | 서버 인스턴스(VM) 리스트 조회 | VPC | NCP_VPC_SERVER_VIEWER |
Classic | NCP_SERVER_OBSERVER | ||
createServerInstances | 서버 인스턴스(VM) 생성 | VPC | NCP_VPC_SERVER_MANAGER |
Classic | NCP_SERVER_MANAGER | ||
Get Action List | CloudFunction 액션 리스트 조회 | VPC | NCP_VPC_CLOUD_FUNCTIONS_VIEWER |
Classic | NCP_CLOUD_FUNCTIONS_MANAGER | ||
Post Action | CloudFunction 액션 실행 | VPC | NCP_VPC_CLOUD_FUNCTIONS_MANAGER |
Classic | NCP_CLOUD_FUNCTIONS_MANAGER | ||
ListBuckets | ObjectStorage 버킷 리스트 조회 | 공통 | NCP_OBJECT_STORAGE_VIEWER |
createAutoScalingGroup | Auto Scaling Group 생성 | VPC | NCP_VPC_AUTOSCALING_MANAGER |
SMS API | Simple & Easy Notification Service 내 SMS 발신번호 등록 기능을 제외한 모든 기능 |
공통 | NCP_SENS_MANAGER |
geoLocation | 지정한 IP의 위치 정보 조회 | 공통 | NCP_GEOLOCATION_MANAGER |
참고 URL
- Ncloud Sub Account 사용 가이드
- Ncloud API 사용 가이드
문서 업데이트 내역
날짜 | 내용 |
---|---|
2023-08-14 | 문서 최초 생성 |
2023-12-19 | VPC Server 접근 리소스 지정 설명 추가, 스샷 업데이트 |