NAVER CLOUD PLATFORM API 사용 가이드

개요

네이버 클라우드 플랫폼[공공기관용]에서 제공하는 인프라/솔루션 상품을 이용할 수 있도록 지원하는 응용 프로그램 인터페이스(Application Programming Interface, API) 제공하고 있습니다.

본 페이지에서는 NAVER CLOUD PLATFORM API 대한 간략한 설명 및 API 호출하는 방법을 제공합니다.
API는 XML와 JSON 형식으로 응답합니다. 액션에 따라 파라미터 값을 입력하고 등록, 수정, 삭제, 조회할 수 있으며, 서비스 및 운영 도구 자동화에 활용할 수 있습니다. HTTP 방식의 GET/POST 메서드 호출을 통해서 사용됩니다.

만일 호출이 잘못되었을 경우는 에러 코드와 메시지를 리턴합니다.

NAVER CLOUD PLATFORM API 호출은 다음과 같은 단계로 진행되어야 합니다.
1. 인증키 생성하기
2. API 호출하기
3. 응답 처리하기
4. 오류 처리하기

인증키 생성하기

NAVER CLOUD PLATFORM 계정이 생성되면 기본적으로 NAVER CLOUD PLATFORM API 인증키가 한개 발급됩니다. 발급된 인증키는 네이버 클라우드 플랫폼[공공기관용] 홈페이지마이페이지 > 계정관리 > 인증키관리에서 확인할 수 있습니다. 인증키는 계정 생성 시 자동으로 발급되는 것 외에 사용자가 하나 더 생성할 수 있어서 두 개까지 발급받을 수 있습니다.

참고
인증키를 ‘사용 중지’로 설정하거나 삭제하면 유효하지 않은 키로 인식됩니다.


API 인증키는 Access KeySecret Key 한 쌍으로 구성되어 있습니다. 한 쌍의 API 인증키는 API를 인증할 때 파라미터로 직접 전달됩니다.

  1. 포털에서 로그인을 합니다.
  2. 마이페이지 > 계정관리 > 인증키관리 메뉴로 접속하시면 “신규 API 인증키 생성” 버튼을 클릭합니다.
    • 기존에 생성하신 인증키가 있으실 경우에는 해당 인증키를 사용하실 수 있습니다.
  3. API 인증키 관리에서 발급받은 자신의 Access Key IDSecret Key를 확인합니다.

API 호출하기

AUTHPARAMS

Header Description
x-ncp-apigw-timestamp * 1970년 1월 1일 00:00:00 협정 세계시(UTC)부터의 경과 시간을 밀리초(Millisecond)로 나타낸 것이다.
* APIGW 서버와 시간차가 5분 이상 나는 경우 유효하지 않은 요청으로 간주
x-ncp-iam-access-key * 네이버 클라우드 플랫폼[공공기관용] 홈페이지 또는 sub account에서 발급받은 Access Key ID
x-ncp-apigw-signature-v2 * 위 예제의 Body를 Access Key ID와 맵핑되는 Secret Key로 암호화한 서명
* HMAC 암호화 알고리즘은 HmacSHA256 사용
  • AUTHPARAMS 요청 예시

    curl -i -X GET \
    -H "x-ncp-apigw-timestamp:1505290625682" \
    -H "x-ncp-iam-access-key:D78BB444D6D3C84CA38D" \
    -H "x-ncp-apigw-signature-v2:WTPItrmMIfLUk/UyUIyoQbA/z5hq9o3G8eQMolUzTEa=" \
    'https://example.apigw.gov-ntruss.com/photos/puppy.jpg?query1=&query2'
    
  • Signature 생성하기

    • 개행문자는 \n을 사용합니다.
    • 요청에 맞게 StringToSign를 생성하고 SecretKey로 HmacSHA256 알고리즘으로 암호화한 후 Base64로 인코딩합니다.
    • 이 값을 x-ncp-apigw-signature-v2로 사용합니다.
요청 StringToSign
GET /photos/puppy.jpg?query1=&query2
x-ncp-apigw-timestamp={timestamp}
x-ncp-iam-access-key={accesskey}
x-ncp-apigw-signature-v2={signature}
GET /photos/puppy.jpg?query1=&query2
{timeStamp}
{accessKey}
  • 요청 예시
public String makeSignature() {
	String space = " ";					// one space
	String newLine = "\n";					// new line
	String method = "GET";					// method
	String url = "/photos/puppy.jpg?query1=&query2";	// url (include query string)
	String timestamp = "{timestamp}";			// current timestamp (epoch)
	String accessKey = "{accessKey}"			// access key id (from portal or sub account)
	String secretKey = "{secretKey}";

	String message = new StringBuilder()
		.append(method)
		.append(space)
		.append(url)
		.append(newLine)
		.append(timestamp)
		.append(newLine)
		.append(accessKey)
		.toString();

	SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
	Mac mac = Mac.getInstance("HmacSHA256");
	mac.init(signingKey);

	byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
	String encodeBase64String = Base64.encodeBase64String(rawHmac);

  return encodeBase64String;
}
/*
https://code.google.com/archive/p/crypto-js/
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/crypto-js/CryptoJS%20v3.1.2.zip
*/

/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
<script type="text/javascript" src="./CryptoJS/rollups/hmac-sha256.js"></script>
<script type="text/javascript" src="./CryptoJS/components/enc-base64.js"></script>

function makeSignature() {
	var space = " ";				// one space
	var newLine = "\n";				// new line
	var method = "GET";				// method
	var url = "/photos/puppy.jpg?query1=&query2";	// url (include query string)
	var timestamp = "{timestamp}";			// current timestamp (epoch)
	var accessKey = "{accessKey}"			// access key id (from portal or sub account)
	var secretKey = "{secretKey}";			// secret key (from portal or sub account)

	var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secretKey);
	hmac.update(method);
	hmac.update(space);
	hmac.update(url);
	hmac.update(newLine);
	hmac.update(timestamp);
	hmac.update(newLine);
	hmac.update(accessKey);

	var hash = hmac.finalize();

	return hash.toString(CryptoJS.enc.Base64);
}
import sys
import os
import hashlib
import hmac
import base64
import requests
import time

def	make_signature():
	timestamp = int(time.time() * 1000)
	timestamp = str(timestamp)

	access_key = "{accessKey}"				# access key id (from portal or sub account)
	secret_key = "{secretKey}"				# secret key (from portal or sub account)
	secret_key = bytes(secret_key, 'UTF-8')

	method = "GET"
	uri = "/photos/puppy.jpg?query1=&query2"

	message = method + " " + uri + "\n" + timestamp + "\n"
	+ access_key
	message = bytes(message, 'UTF-8')
	signingKey = base64.b64encode(hmac.new(secret_key, message, digestmod=hashlib.sha256).digest())
	return signingKey
function makeSignature() {
	nl=$'\\n'

	TIMESTAMP=$(echo $(($(date +%s%N)/1000000)))
	ACCESSKEY="{accessKey}"				# access key id (from portal or sub account)
	SECRETKEY="{secretKey}"				# secret key (from portal or sub account)

	METHOD="GET"
	URI="/photos/puppy.jpg?query1=&query2"

	SIG="$METHOD"' '"$URI"${nl}
	SIG+="$TIMESTAMP"${nl}
	SIG+="$ACCESSKEY"

	SIGNATURE=$(echo -n -e "$SIG"|iconv -t utf8 |openssl dgst -sha256 -hmac $SECRETKEY -binary|openssl enc -base64)
}

응답 처리하기

  • 상품 API 호출에 대한 응답은 상품 가이드를 참고하세요.

오류 처리하기

  • 상품 API 호출에 대한 에러코드는 상품 가이드를 참고하세요.

공통 에러 코드

  • 요청 파라미터가 Contenct-type:application/json일 때(default)

    {
    "error":{
      "errorCode":"210",
      "message":"Permission Denied"
    }
    }
    
  • 요청 파라미터가 Contenct-type:application/xml일 때

    <?xml version='1.0' encoding='UTF-8' ?>
    <Message>
    <error>
        <errorCode>210</errorCode>
        <message>Permission Denied</message>
    </error>
    </Message>
    
Http 상태 코드 에러 코드 에러 메시지 설명
400 100 Bad Request Exception protocol(https), endocing(UTF-8) 등 Request 에러
401 200 Authentication Failed 인증 실패
401 210 Permission Denied 권한 없음
404 300 Not Found Exception 권한 없음
429 400 Quota Exceeded Quota 초과
429 410 Throttle Limited Rate 초과
429 420 Rate Limited Rate 초과
413 430 Request Entity Too Large 요청 엔티티 크기 초과
503 500 Endpoint Error 엔드포인트 연결 에러
504 510 Endpoint Timeout 엔드포인트 연결 시간 초과
500 900 Unexpected Error 예외 처리가 안된 에러

지원 API 및 SDK

본 NAVER CLOUD PLATFORM API는 Server, Load Balancer, Auto Scaling, Monitoring, Security, GeoLocation, Hash Filter 등의 다양한 기능을 API로 제어할 수 있습니다. API는 RESTful API 방식으로 제공되며, XML, JSON 형식으로 응답합니다. 액션에 따라 파라미터 값을 입력하고 등록, 수정, 삭제, 조회할 수 있으며, 서비스 및 운영 도구 자동화에 활용할 수 있습니다.

상품 API SDK
Server Server API ncloud_server.zip
Load Balancer Load Balancer API ncloud_loadbalancer.zip
Auto Scaling Auto Scaling API ncloud_autoscaling.zip
CDN+ CDN+ API ncloud_cdn.zip
    Cloud Outbound Mailer Cloud Outbound Mailer API ncloud_outboundmailer.zip

아쉬운 점이 있다면 이야기해 주세요.
0/5000
내용을 입력해 주세요
의견 보내기