728x90

개요

NCP에 API요청을 보내기 위해서는 시그니처, 타임스탬프, 시크릿키, 엑세스키 등이 필요하다. 여기서 시그니처와 타임스탬프가 얻기가 조금 까다로웠다. 그래서 다른 분들은 이런 시행착오를 겪지 마시라고 이렇게 적어본다.

 

시그니처 생성

네이버 클라우드 플랫폼에서 제공하는 API 공식 문서에서 제공하는 Bash 스크립트이다. 이것을 사용해서 시그니처를 생성하자

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)
}

{accessKey}, {secretKey}는 각자 계정에서 발급 받은 키를 넣는다.

그리고 URI에는 공식 문서에서 각자 원하는 요청을 찾는다. 나는 SourceBuild에 "빌드 시작" API를 사용하고 싶어서 찾은 결과 밑에와 같다.

API URL에 보면 {SOURCEBUILD_API_URL}이 보일 것이다. 이것은 각 API의 개요에 들어가 보면 나와 있다.

https://sourcebuild.apigw.ntruss.com/api/v1  <- 이게 {SOURCEBUILD_API_URL} 가 된다.

 

이제 위에 Bash로 돌아가서 그러면 URI에 무엇을 넣어야 할것인가?

바로 

/api/v1/project/{projectId}/build

이거를 넣어야 한다. (여기서 많이 헤맸다)

시그니처만 잘 생성 됐다면 바로 완성 코드를 보자.

 

완성 코드

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)

	my_list=("${TIMESTAMP}","${SIGNATURE}")
	
	echo "${my_list[@]}"
}

ret_value=$(makeSignature)

IFS=',' read -ra vStr <<< "$ret_value"

curl -i -X POST \
-H "x-ncp-apigw-timestamp:${vStr[0]}" \
-H "x-ncp-iam-access-key:{accessKey}" \
-H "x-ncp-apigw-signature-v2:${vStr[1]}" \
'https://sourcebuild.apigw.ntruss.com/api/v1/project/{projectId}/build'

 

이렇게 하면 API call이 된다. 

 

※ 그리고 시그니처를 생성할 때 TIMESTAMP와 API 요청할 때 넣는 TIMESTAMP가 같아야 한다.

 

 

참고

- https://api.ncloud-docs.com/docs/common-ncpapi

- https://api.ncloud-docs.com/docs/devtools-sourcebuild-build

+ Recent posts