API 키

애플리케이션 프로그래밍 인터페이스(application programming interface, API) 키는 API에 접근하는 사용자, 개발자 또는 호출 프로그램을 인증하고 허가하는 데 사용되는 비밀 고유 식별자이다.

구글 클라우드 플랫폼이나 아마존 웹 서비스와 같은 클라우드 컴퓨팅 제공업체는 API 키를 인간 사용자가 아닌 프로젝트를 인증하는 데에만 사용할 것을 권장한다.

사용

HTTP API

HTTP 기반 API를 위한 API 키는 여러 방식으로 전송될 수 있다.

액세스 토큰은 흔히 HTTP 인증 헤더에 포함되는 JSON 웹 토큰(JWT) 형식이다.

POST /something HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

쿼리 문자열에 포함되는 경우:

POST /something?api_key=abcdef12345 HTTP/1.1

요청 헤더로 전송되는 경우:

GET /something HTTP/1.1
X-API-Key: abcdef12345

HTTP 쿠키로 전송되는 경우:

GET /something HTTP/1.1
Cookie: X-API-KEY=abcdef12345

보안

API 키는 일반적으로 안전하다고 간주되지 않는다. 보통 클라이언트가 접근할 수 있어 누군가 API 키를 탈취하기 쉽기 때문이다. 키는 만료 기한이 없는 경우가 많아, 한 번 탈취되면 취소하거나 재생성하지 않는 한 무기한으로 사용될 수 있다. 키는 클라이언트와 서버만이 알고 있는 비밀이어야 하므로 보안되지 않은 채널을 통해 전송되어서는 안 되며, HTTPS와 같은 다른 보안 메커니즘과 함께 사용될 때만 안전하다고 간주될 수 있다.

API 키 사용 시 다음과 같은 여러 위험 시나리오가 존재한다.

이러한 위험은 일반적으로 키가 평문으로 존재하여 공격자가 접근할 수 있다는 점에 기인한다.

사고

2017년, 델라웨어에 본사를 둔 보안 회사 Fallible은 16,000개의 안드로이드 앱을 조사하여 드롭박스, Twitter, 슬랙과 같은 서비스의 API 키가 하드 코딩된 앱 300개 이상을 식별하였다.

각주

  1. ↑ “API Key - What is an API Key?” (미국 영어). 《Last Call - RapidAPI Blog》. 2019년 9월 20일에 확인함.
  2. 1 2 3 4 5 Lu, HongQian 2014. 《Keeping Your API Keys in a Safe》. IEEE 7th International Conference on Cloud Computing. doi:10.1109/CLOUD.2014.143.
  3. ↑ “What is an API Key? - API Keys and Tokens Explained - AWS” (미국 영어). 《Amazon Web Services, Inc.》. 2024년 9월 1일에 확인함.
  4. ↑ “Why and when to use API keys | Cloud Endpoints with OpenAPI” (영어). 《Google Cloud》. 2024년 9월 1일에 확인함.
  5. 1 2 “API Keys”. 2019년 10월 17일에 원본 문서에서 보존된 문서.
  6. ↑ “Why and when to use API keys | Cloud Endpoints with OpenAPI” (영어). 《Google Cloud》. 2019년 9월 20일에 확인함.
  7. ↑ “Hundreds of popular Android apps contain hard-coded secret keys” (영어). 《ZDNet》. 2022년 6월 20일에 확인함.

서적 출처

외부 링크