이 페이지에서는 Google 서명 OpenID Connect(OIDC) ID 토큰을 가져오는 몇 가지 방법을 설명합니다.
ID 토큰 콘텐츠 및 수명에 대한 자세한 내용은 ID 토큰을 참조하세요.
ID 토큰에는 aud
클레임의 값으로 지정되어 사용할 수 있는 특정 서비스 또는 애플리케이션이 포함되어 있습니다. 이 페이지에서는 대상 서비스라는 용어를 사용하여 ID 토큰을 사용하여 인증할 수 있는 서비스 또는 애플리케이션을 지칭합니다.
ID 토큰을 받으면 대상 서비스에 대한 요청의 Authorization
헤더에 포함할 수 있습니다.
ID 토큰을 가져오는 방법
다양한 방법으로 ID 토큰을 가져올 수 있습니다. 이 페이지에서는 다음 방법을 설명합니다.
Trusted Cloud에서 호스팅되지 않는 애플리케이션에서 ID 토큰을 수락해야 하는 경우 이러한 방법을 사용할 수 있지만 애플리케이션에 필요한 ID 토큰 클레임을 확인해야 합니다.
메타데이터 서버에서 ID 토큰 가져오기
코드가 서비스 계정을 연결할 수 있는 리소스에서 실행되는 경우에는 연결된 서비스의 메타데이터 서버가 일반적으로 ID 토큰을 제공할 수 있습니다. 메타데이터 서버는 연결된 서비스 계정에 대한 ID 토큰을 생성합니다. 메타데이터 서버의 사용자 인증 정보를 기반으로 ID 토큰을 가져올 수 없습니다.
코드가 다음 Trusted Cloud 서비스에서 실행될 때 메타데이터 서버에서 ID 토큰을 가져올 수 있습니다.
메타데이터 서버에서 ID 토큰을 검색하려면 이 예시에 표시된 것처럼 서비스 계정에 대해 ID 엔드포인트를 쿼리합니다.
curl
AUDIENCE
를 http://www.example.com
과 같은 대상 서비스의 URI로 바꿉니다.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
AUDIENCE
를 http://www.example.com
과 같은 대상 서비스의 URI로 바꿉니다.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
자바
이 코드 샘플을 실행하려면 먼저 다음 단계를 완료해야 합니다.
- Java용 인증 클라이언트 라이브러리를 설치합니다.
GOOGLE_CLOUD_UNIVERSE_DOMAIN
환경 변수를s3nsapis.fr
로 설정합니다.
Go
코드 샘플을 실행하기 전에 GOOGLE_CLOUD_UNIVERSE_DOMAIN
환경 변수를 s3nsapis.fr
으로 설정합니다.
Node.js
이 코드 샘플을 실행하려면 먼저 다음 단계를 완료해야 합니다.
- Node.js용 Google 인증 라이브러리를 설치합니다.
GOOGLE_CLOUD_UNIVERSE_DOMAIN
환경 변수를s3nsapis.fr
으로 설정합니다.
Python
이 코드 샘플을 실행하려면 먼저 다음 단계를 완료해야 합니다.
- Google 인증 Python 라이브러리를 설치합니다.
GOOGLE_CLOUD_UNIVERSE_DOMAIN
환경 변수를s3nsapis.fr
로 설정합니다.
Ruby
이 코드 샘플을 실행하려면 먼저 다음 단계를 완료해야 합니다.
- Ruby용 Google 인증 라이브러리를 설치합니다.
GOOGLE_CLOUD_UNIVERSE_DOMAIN
환경 변수를s3nsapis.fr
로 설정합니다.
연결 서비스를 사용하여 ID 토큰 생성
일부 Trusted Cloud 서비스는 다른 서비스를 호출하는 데 도움이 됩니다. 이러한 연결 서비스는 호출이 수행되는 시점을 확인하거나 서비스 호출이 포함된 워크플로를 관리하는 데 도움이 될 수 있습니다. 다음 서비스는 ID 토큰이 필요한 서비스에 대한 호출을 시작할 때 aud
클레임에 적절한 값이 있는 ID 토큰을 자동으로 포함할 수 있습니다.
- Pub/Sub
- Pub/Sub는 서비스 간의 비동기 통신을 사용 설정합니다. 메시지에 ID 토큰을 포함하도록 Pub/Sub를 구성할 수 있습니다. 자세한 내용은 푸시 구독 인증을 참조하세요.
서비스 계정을 가장하여 ID 토큰 생성
서비스 계정 가장을 통해 주 구성원이 신뢰할 수 있는 서비스 계정에 대해 단기 사용자 인증 정보를 생성할 수 있습니다. 그런 다음 주 구성원이 이러한 사용자 인증 정보를 사용하여 서비스 계정으로 인증할 수 있습니다.
주 구성원이 서비스 계정을 가장하려면 서비스 계정에 가장을 사용 설정하는 IAM 역할이 있어야 합니다. 주 구성원이 자체적으로 다른 서비스 계정인 경우 필요한 권한을 해당 서비스 계정에 직접 제공하여 자체를 가장하도록 사용 설정하는 것이 더 쉬워 보일 수 있습니다. 자체 가장이라고 부르는 이러한 구성에는 서비스 계정이 영구적으로 새로고침될 수 있는 액세스 토큰을 만들 수 있어서 보안 취약점이 있습니다.
서비스 계정 가장에는 항상 2개의 주 구성원이 포함됩니다. 하나는 호출자를 나타내는 주 구성원이고 다른 하나는 권한 보유 서비스 계정이라고 부르는 가장되는 대상 서비스 계정입니다.
서비스 계정을 가장하여 ID 토큰을 생성하려면 다음과 같은 일반적인 프로세스를 사용합니다.
단계별 안내는 ID 토큰 만들기를 참조하세요.
권한 보유 서비스 계정으로 지정할 서비스 계정을 식별 또는 생성합니다.
- 제품 문서를 참조하여 대상 서비스를 호출하는 데 필요한 역할을 확인합니다. 이러한 역할을 대상 서비스의 서비스 계정에 부여합니다.
가장을 수행하는 주 구성원을 식별하고 이 주 구성원에 대해 사용자 인증 정보를 사용하도록 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다.
개발 환경에서 주 구성원은 일반적으로 gcloud CLI를 사용하여 ADC에 제공한 사용자 계정입니다. 그러나 서비스 계정이 연결된 리소스에서 실행하는 경우에는 연결된 서비스 계정이 주 구성원입니다.
주 구성원에게 서비스 계정 OpenID Connect ID 토큰 생성자 역할(
roles/iam.serviceAccountOpenIdTokenCreator
)을 부여합니다.IAM Credentials API를 사용하여 승인된 서비스 계정에 대해 ID 토큰을 생성합니다.
다음을 바꿉니다.
- AUDIENCE: 대상 서비스의 URI(예:
http://www.example.com
) - SERVICE_ACCOUNT_EMAIL: 권한 보유 서비스 계정의 이메일 주소
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: 대상 서비스의 URI(예:
다음 단계
- ID 토큰 이해하기
- 셸 명령어를 사용하여 Compute Engine 메타데이터 서버 쿼리
- 인증 방법에 대해 자세히 알아보기