Logo Logo
GitHub Designed by Logto

API 키란 무엇인가?

API 키는 호출하는 애플리케이션이나 서비스를 식별하고 권한을 부여하는 데 사용됩니다. 일반적으로 장기간 사용되며 회전되기 전까지는 정적이며, 고정된 권한 세트를 가지고 있습니다. 주로 서버 간 통신이나 공공 데이터에 접근할 때 사용되며, 이러한 토큰은 일반적으로 특정 사용자를 나타내지 않습니다.

API 키는 어떻게 작동하는가?

API 키는 API 제공자가 생성하고 권한이 있는 사용자와 공유하는 긴 문자열입니다. 이 키는 API에 접근할 때 요청 헤더에 포함되어야 합니다. API 키는 기본 보안 요구 사항에 대해 간단하고 효과적입니다. 예를 들어, Google Maps API와 AWS와 같은 인기 있는 서비스는 API 키를 제공하여 접근을 제어하고 사용량을 모니터링합니다.

curl -GET https://api.example.com/endpoint -H "Authorization: api-key YOUR_API_KEY"

API 키는 OAuth 2.0 JSON 웹 토큰 (JSON Web Token, JWT) 와 같은 다른 형태의 API 인증 (authentication)만큼 효과적이지는 않지만, API 제작자가 사용량을 모니터링하는 데 중요한 역할을 합니다. 이는 API를 보호하는 가장 간단하고 널리 사용되는 방법이기 때문입니다.

장점과 단점은 무엇인가?

장점

  • 구현이 간단함: API 키는 구현하고 사용하기 쉽습니다. 요청 헤더에 키를 첨부하는 방식으로, 개발자와 클라이언트가 이해하고 사용할 수 있는 간단한 방법입니다.
  • 모니터링이 용이함: API 키는 모니터링하기 쉽습니다. 각 키의 사용량을 추적하고 필요에 따라 키를 취소할 수 있습니다.
  • 효과적인 속도 제한: API 키는 속도 제한에 효과적입니다. 남용을 방지하기 위해 키당 요청 수에 제한을 설정할 수 있습니다.
  • 비민감 데이터에 적합함: API 키는 보안 요구 사항이 낮은 비민감 데이터나 공개 API에 적합합니다.

단점

  • 제한된 보안: API 키는 특히 클라이언트 측 애플리케이션에 대해 민감한 데이터에 대해 충분히 안전하지 않습니다. 종종 기계 간 통신에 사용됩니다.
  • 사용자 인증 (Authentication)에는 적합하지 않음: API 키는 개별 사용자가 아닌 애플리케이션이나 시스템에 연결되어 있어 특정 사용자를 식별하거나 그들의 행동을 추적하는 데 어려움이 있습니다.
  • 토큰 만료 없음: API 키는 일반적으로 정적이며 만료되지 않습니다. 키가 손상되면 수동으로 재생성하지 않는 한 무기한으로 악용될 수 있습니다.

API 키의 사용 사례는 무엇인가?

  • 서비스 간 통신: API 키는 애플리케이션이 CLI를 통해 API와 직접 통신해야 하는 시나리오에 적합합니다. 예: OpenAI API 호출.
  • 공개 API: API를 공개할 때 API 키는 간단한 접근 제어 방법을 제공합니다.
  • 간소화된 설정: 특히 개발 단계에서 빠르고 간단한 인증 (authentication) 요구 사항에 적합합니다. Machine-to-machine 인증과 달리, API 키는 사전에 클라이언트 등록이 필요하지 않으며, 접근 토큰으로 교환할 필요도 없습니다. 요청에 API 키를 매개변수로 전달하면 간단히 작동합니다.

실제 시나리오에서 제품을 구축할 때 가장 일반적인 목적은 제품 통합입니다. 다음은 전형적인 사용 사례입니다:

예: Stripe와의 통합

Stripe는 다양한 플랫폼 및 애플리케이션과의 안전한 통합을 위해 API 키를 사용합니다. 개발자 대시보드를 통해 이러한 키를 생성, 조회, 삭제 및 관리할 수 있습니다. API 키를 사용하여 Stripe의 결제 및 청구 기능을 제품에 통합할 수 있습니다.

Stripe-integration-API keys.png

개인 액세스 토큰 (PAT)과 Machine-to-Machine (M2M)의 차이점은 무엇인가?

API 키에 대해 이야기할 때, 개인 액세스 토큰과 기계 대 기계 (Machine-to-machine) 도 함께 언급될 수 있습니다. 이들은 모두 CLI 명령을 통해 프로그래밍 방식으로 API 리소스에 접근하거나 백엔드 서비스 간의 통신을 설정할 수 있기 때문입니다.

개인 액세스 토큰 (PATs)

개인 액세스 토큰은 특정 사용자의 신원과 권한을 나타내는 문자열로, 성공적인 인증 (authentication) 또는 로그인 시 동적으로 생성되며, 일반적으로 제한된 수명을 가지지만 갱신할 수 있습니다. 이는 사용자별 데이터 및 기능에 대한 세분화된 접근 제어를 제공하며, CLI 도구, 스크립트 또는 개인 API 접근에 일반적으로 사용됩니다. 주요 차이점은 더 구체적이며 사용자별 작업에 사용된다는 것입니다.

Machine-to-Machine (M2M)

M2M 통신은 넓은 의미에서 인간의 개입 없이 장치가 자동으로 데이터를 교환하는 것을 의미합니다.

OpenID Connect (OIDC) (또는 OAuth 2.0 )의 맥락에서, M2M 애플리케이션은 OAuth 2.0 RFC 6749 프로토콜 에 정의된 클라이언트 자격 증명 흐름 (Client credentials flow) 를 사용하며, 유사한 표준 프로토콜을 지원합니다. 일반적으로 클라이언트 애플리케이션(기계 또는 서비스)이 자체적으로 또는 사용자를 대신하여 리소스에 접근하는 것을 포함합니다. 이는 신뢰할 수 있는 클라이언트만이 백엔드 서비스에 접근할 수 있는 상황에 이상적입니다.

참고