Google Cloud 목적과 교환 당사자에 따라 다른 여러 유형의 토큰을 발급합니다.
다음 표에는 다양한 토큰 유형이 포함된 주요 토큰 카테고리가 개략적으로 나와 있습니다.
토큰 카테고리 | 통신 경로 | 목적 |
---|---|---|
액세스 토큰 | 승인 서버 ⭢ 클라이언트 ⭢ Google API | 클라이언트가 Google Cloud API를 호출할 수 있도록 합니다. |
토큰 부여 토큰 | 승인 서버 ⭤ 클라이언트 | 클라이언트가 나중에 새 토큰이나 다른 토큰을 획득할 수 있습니다. |
ID 토큰 | 승인 서버 ⭢ 클라이언트 | 클라이언트가 상호작용하는 사용자를 식별할 수 있습니다. |
액세스 및 ID 토큰은 Bearer 토큰입니다. Bearer 토큰은 토큰을 소유한 사람에게 액세스 권한을 부여하는 일반적인 토큰 클래스입니다.
인증에 Bearer 토큰을 사용하려면 HTTPS와 같은 암호화된 프로토콜로 제공되는 보안이 필요합니다. Bearer 토큰을 가로채면 악의적인 행위자가 이를 사용하여 액세스 권한을 얻을 수 있습니다.
Bearer 토큰이 사용 사례에 충분한 보안을 제공하지 않으면 컨텍스트 인식 액세스를 사용하거나, 액세스 토큰의 수명을 제한하거나, Chrome Enterprise Premium과 같은 상호 전송 계층 보안(mTLS) 솔루션을 사용하여 토큰 도난 위험을 줄일 수 있습니다.
액세스 토큰
액세스 토큰을 사용하면 클라이언트가 API에 인증된 호출을 할 수 있습니다. Google Cloud Google Cloud 는 다음과 같은 공통 속성이 있는 여러 유형의 액세스 토큰을 지원합니다.
사용자 또는 워크로드일 수 있는 주 구성원을 인증합니다.
특정 클라이언트에 발급됩니다.
이러한 토큰은 수명이 짧으며 최대 몇 시간이 지나면 만료됩니다.
특정 OAuth 범위, 엔드포인트 또는 리소스로 제한됩니다. 즉, 액세스 토큰은 일반적으로 사용자의 모든 리소스에 대한 액세스 권한을 부여하지 않고 특정 하위 집합에 대한 액세스 권한만 부여합니다.
액세스 토큰은 다음과 같은 방식으로 다를 수 있습니다.
발급기관: 토큰을 발급하는 당사자입니다.
주 구성원: 토큰이 인증할 수 있는 주 구성원 유형입니다.
제한사항: 토큰에 적용할 수 있는 제한사항입니다.
다음 표에는 다양한 유형의 액세스 토큰이 나와 있습니다.
토큰 유형 | 발급자 | 주 구성원 | 제한사항 |
---|---|---|---|
사용자 액세스 토큰 | Google 승인 서버 |
|
OAuth 범위 |
서비스 계정 액세스 토큰 |
|
서비스 계정 | OAuth 범위 |
도메인 전체 위임 토큰 | Google 승인 서버 | 사용자 (관리 사용자) | OAuth 범위 |
서비스 계정 JSON 웹 토큰 (JWT) | 클라이언트 | 서비스 계정 | OAuth 범위 또는 API |
제휴 액세스 토큰 | Google Cloud IAM 승인 서버 |
|
OAuth 범위 |
사용자 인증 정보 액세스 경계 토큰 | Google Cloud IAM 승인 서버 |
|
특정 Cloud Storage 객체 |
클라이언트 발급 사용자 인증 정보 액세스 경계 토큰 | 클라이언트 | 서비스 계정 | 특정 Cloud Storage 객체 |
액세스 토큰의 유형에 따라 보안 속성도 다릅니다.
형식: 일부 액세스 토큰은 불투명합니다. 즉, 독점적 형식이며 검사할 수 없습니다. 다른 토큰은 클라이언트에서 디코딩할 수 있는 JSON 웹 토큰으로 인코딩됩니다.
인트로스펙션 가능 여부: 일부 불투명 토큰은Google Cloud API를 사용하여 인트로스펙션할 수 있지만 다른 토큰은 인트로스펙션할 수 없습니다.
수명: 토큰은 수명과 수정 가능 정도가 다릅니다.
취소 가능 여부: 일부 토큰은 취소할 수 있습니다. 다른 토큰은 만료일까지 유효합니다.
다음 표에는 액세스 토큰 유형 간의 차이점이 요약되어 있습니다.
토큰 유형 | 형식 | 인트로스펙션 가능 | 전체 기간 | 취소 가능 |
---|---|---|---|---|
사용자 액세스 토큰 | Opaque | 예 | 1시간 | 예 |
서비스 계정 액세스 토큰 | Opaque | 예 | 5분~12시간 | 아니요 |
도메인 전체 위임 토큰 | Opaque | 예 | 1시간 | 아니요 |
서비스 계정 JSON 웹 토큰 (JWT) | JWT | 해당 사항 없음 | 5분~1시간 | 아니요 |
제휴 액세스 토큰 | Opaque | 아니요 | 제휴 액세스 토큰을 참고하세요. | 아니요 |
사용자 인증 정보 액세스 경계 토큰 | Opaque | 아니요 | 사용자 인증 정보 액세스 경계 토큰을 참고하세요. | 아니요 |
클라이언트 발급 사용자 인증 정보 액세스 경계 토큰 | Opaque | 아니요 | 해당 사항 없음 | 아니요 |
사용자 액세스 토큰
사용자 액세스 토큰은 사용자를 인증하고 클라이언트가 사용자를 대신하여 작업을 수행하도록 승인합니다.
인증된 주 구성원은 관리 사용자 계정 또는 소비자 계정입니다. 클라이언트는 웹 애플리케이션 또는 네이티브 애플리케이션일 수 있습니다.
사용자 액세스 토큰은 불투명합니다. 진단 목적으로 다음 명령어를 사용하여 액세스 토큰을 인트로스펙션할 수 있습니다. 이때 ACCESS_TOKEN
를 유효한 액세스 토큰으로 바꿉니다.
curl "https://oauth2.googleapis.com/tokeninfo?access_token=ACCESS_TOKEN"
이 명령어는 다음 예와 유사한 출력을 생성합니다.
{
"azp": "0000000000.apps.googleusercontent.com",
"aud": "0000000000.apps.googleusercontent.com",
"sub": "00000000000000000000",
"scope": "openid https://www.googleapis.com/auth/userinfo.email",
"exp": "1744687132",
"expires_in": "3568",
"email": "user@example.com",
"email_verified": "true"
}
출력에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 |
이 토큰이 적용되는 OAuth 클라이언트입니다. OAuth 클라이언트 ID로 식별됩니다. OAuth 클라이언트는 동일한 프로젝트에 속한 다른 OAuth 클라이언트의 액세스 토큰을 획득할 수 있습니다. 잠재고객은 승인된 당사자와 다를 수 있습니다. |
azp |
승인된 당사자 | 토큰을 요청한 OAuth 클라이언트입니다. OAuth 클라이언트 ID로 식별됩니다. |
email |
기본 이메일 주소 |
사용자의 기본 이메일 주소입니다.
이 필드는 토큰에
|
exp |
만료 | 토큰의 만료 시간입니다(유닉스 시간 형식). |
scope |
OAuth 범위 | 클라이언트가 사용자를 대신하여 액세스할 수 있는 API 집합으로, OAuth 범위로 식별됩니다. |
sub |
제목 |
인증된 주 구성원으로, 고유 ID로 식별됩니다. 이 ID는 Directory API에 노출된 ID와 동일합니다. |
사용자 액세스 토큰은 1시간 후에 자동으로 만료되지만 필요한 경우 더 일찍 취소할 수 있습니다.
기본적으로 사용자 액세스 토큰은 Bearer 토큰이며 특정 통신 채널, 네트워크 또는 추가 사용자 인증 정보에 바인딩되지 않습니다. 유효한 mTLS 클라이언트 인증서와 함께만 사용자 액세스 토큰을 사용할 수 있도록 인증서 기반 액세스를 배포하여 선택적으로 토큰 바인딩을 구현할 수 있습니다.
서비스 계정 액세스 토큰
서비스 계정 액세스 토큰은 서비스 계정을 인증합니다. 토큰은 불투명하며 https://oauth2.googleapis.com/tokeninfo
API를 사용하여 토큰을 인트로스펙션할 수 있습니다.
서비스 계정 액세스 토큰의 경우 API는 다음 예와 유사한 출력을 반환합니다.
{
"azp": "000000000000000000000",
"aud": "000000000000000000000",
"scope": "https://www.googleapis.com/auth/userinfo.email",
"exp": "1744687132",
"expires_in": "3568",
"email": "service-account@example.iam.gserviceaccount.com",
"email_verified": "true",
"access_type": "online"
}
서비스 계정 토큰에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 | 토큰이 적용되는 서비스 계정으로, 승인된 당사자와 동일합니다. |
azp |
승인된 당사자 | 토큰을 요청한 서비스 계정으로, 고유 ID로 식별됩니다. |
email |
기본 이메일 주소 |
서비스 계정의 이메일 주소입니다.
이 필드는 토큰에
|
exp |
만료 | 토큰의 만료 시간입니다(Unix epoch 시간 형식). |
서비스 계정 액세스 토큰은 취소할 수 없으며 만료될 때까지 유효합니다.
기본적으로 서비스 계정 액세스 토큰은 1시간 후에 만료됩니다. serviceAccounts.generateAccessToken
메서드를 사용하면 수명이 다른 토큰을 요청할 수 있습니다. 토큰 수명이 길어지면 위험이 증가할 수 있으므로 클라이언트가 수명이 1시간보다 긴 서비스 계정 액세스 토큰을 요청할 수 있도록 iam.allowServiceAccountCredentialLifetimeExtension
제약조건을 구성해야 합니다.
도메인 전체 위임 토큰
도메인 전체 위임 토큰은 사용자를 인증하고 서비스 계정이 사용자를 대신하여 작업을 수행하도록 승인합니다. 토큰은 불투명하며 https://oauth2.googleapis.com/tokeninfo
API를 사용하여 토큰을 인트로스펙션할 수 있습니다.
도메인 전체 위임 토큰의 경우 API는 다음 예시와 유사한 출력을 반환합니다.
{
"azp": "000000000000000000000",
"aud": "000000000000000000000",
"scope": "https://www.googleapis.com/auth/admin.directory.user.readonly https://www.googleapis.com/auth/userinfo.email",
"exp": "1744688957",
"expires_in": "3540",
"email": "user@example.com",
"email_verified": "true",
"access_type": "offline"
}
도메인 전체 위임 토큰에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 | 토큰이 적용되는 서비스 계정으로, 승인된 당사자와 동일합니다. |
azp |
승인된 당사자 | 토큰을 요청한 서비스 계정으로, 고유 ID로 식별됩니다. |
email |
기본 이메일 주소 |
가장된 사용자의 기본 이메일 주소입니다. 이 필드는 토큰에
|
exp |
만료 | 토큰의 만료 시간입니다(유닉스 시간 형식). |
scope |
OAuth 범위 | 클라이언트가 가장된 사용자를 대신하여 액세스할 수 있는 API 집합입니다. OAuth 범위로 식별됩니다. |
도메인 전체 위임 토큰은 1시간 후에 자동으로 만료되며 취소할 수 없습니다.
서비스 계정 JSON 웹 토큰
서비스 계정 JSON 웹 토큰 (JWT)은 서비스 계정을 인증합니다. 서비스 계정 액세스 토큰은 승인 서버에서 발급하는 반면 서비스 계정 JWT는 클라이언트 자체에서 발급할 수 있습니다.
이를 '자체 서명' JWT라고도 합니다. 자체 클라이언트 라이브러리를 만드는 등 승인 서버에서 액세스 토큰을 가져오지 않고 일부 Google API를 인증해야 하는 경우에 유용할 수 있습니다.
서비스 계정 JWT를 발급하려면 클라이언트가 다음 단계를 실행해야 합니다.
서비스 계정의 이메일 주소, OAuth 범위 또는 API 엔드포인트, 만료 시간이 포함된 JSON 웹 서명 페이로드를 준비합니다.
각 서비스 계정의 서비스 계정 키를 사용하여 페이로드에 서명합니다. 클라이언트는 사용자 관리 서비스 계정 키를 사용하여 오프라인으로 페이로드에 서명하거나
signJwt
메서드와 Google 관리 서비스 계정 키를 사용하여 온라인으로 페이로드에 서명할 수 있습니다. 자세한 내용은 자체 서명 JSON 웹 토큰 만들기를 참고하세요.
디코딩된 서비스 계정 JWT는 다음과 유사하며 SIGNATURE
는 토큰의 서명으로 대체됩니다.
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"sub": "service-account@example.iam.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/cloud-platform",
"exp": 1744851267,
"iat": 1744850967
}.SIGNATURE
scope
키에 OAuth 범위를 지정하는 대신 서비스 계정 JWT는 aud
키에 API 엔드포인트를 지정할 수 있습니다.
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"sub": "service-account@example.iam.gserviceaccount.com",
"aud": "https://cloudresourcemanager.googleapis.com/",
"exp": 1744854799,
"iat": 1744851199
}.SIGNATURE
서비스 계정 JWT에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 |
클라이언트가 액세스할 수 있는 API 엔드포인트입니다. scope 이 지정되지 않은 경우에만 유효합니다.
|
exp |
만료 | 토큰의 만료 시간입니다(Unix epoch 시간 형식). |
iat |
문제 시간 | 토큰이 발급된 시간입니다(유닉스 시간 형식). |
iss |
발급자 | 토큰 발급자입니다. 서비스 계정 자체입니다. |
scope |
OAuth 범위 |
클라이언트가 액세스할 수 있는 API 집합으로,
OAuth 범위로 식별됩니다. aud 이 지정되지 않은 경우에만 유효합니다.
|
sub |
제목 | 인증된 주 구성원(서비스 계정 자체) |
서비스 계정 JWT는 최대 1시간 동안 유효하며 취소할 수 없습니다.
제휴 액세스 토큰
제휴 액세스 토큰은 ID 직원 ID 풀 주 구성원 또는 워크로드 아이덴티티 풀 주 구성원을 인증합니다.
직원 ID 제휴를 사용하면 클라이언트가 직원 풀 주 구성원을 인증하는 제휴 액세스 토큰에 대해 외부 토큰을 교환할 수 있습니다. 직원 ID 풀 주 구성원은 다음과 유사한 주 구성원 식별자로 식별됩니다.
principal://iam.googleapis.com/locations/global/workforcePools/POOL/subject/raha@altostrat.com.
워크로드 아이덴티티 제휴를 사용하면 클라이언트가 워크로드 풀 주 구성원을 인증하는 제휴 액세스 토큰에 대해 외부 토큰을 교환할 수 있습니다. 워크로드 아이덴티티 풀 주 구성원은 다음과 유사한 주 구성원 식별자로 식별됩니다.
principal://iam.googleapis.com/projects/PROJECT/locations/global/workloadIdentityPools/POOL/subject/SUBJECT_ATTRIBUTE_VALUE
제휴 액세스 토큰은 불투명하며 인트로스펙션할 수 없습니다. 토큰은 취소할 수 없으며 만료일까지 유효합니다. 각 토큰 유형의 만료는 다음과 같이 설정됩니다.
직원 ID 제휴는 토큰 만료를 다음 두 값 중 더 작은 값으로 설정합니다.
직원 ID 제휴 세션이 만료될 때까지 남은 시간
1시간
직원 ID 제휴 세션의 만료는 로그인 시간과 직원 ID 제휴 풀에 구성된 세션 시간을 기준으로 결정됩니다.
워크로드 아이덴티티 제휴는 외부 토큰의 만료와 일치하도록 토큰 만료를 설정합니다.
사용자 인증 정보 액세스 경계 토큰
사용자 인증 정보 액세스 경계 토큰은 사용자 또는 서비스 계정을 인증하고 액세스 경계를 포함합니다. 액세스 경계는 정의된 Cloud Storage 리소스 하위 집합에만 액세스할 수 있도록 토큰을 제한합니다.
사용자 인증 정보 액세스 경계 토큰은 입력 토큰에서 파생되지만 액세스 권한을 부여하는 리소스가 더 제한적이므로 권한이 축소된 토큰이라고도 합니다.
사용자 인증 정보 액세스 경계 토큰의 만료는 사용자 액세스 토큰 또는 서비스 계정 액세스 토큰일 수 있는 입력 토큰의 만료에서 파생됩니다. 사용자 인증 정보 액세스 경계 토큰은 불투명하며 인트로스펙션하거나 취소할 수 없습니다.
클라이언트 발급 사용자 인증 정보 액세스 경계 토큰
클라이언트 발급 사용자 인증 정보 액세스 경계 토큰은 사용자 인증 정보 액세스 경계 토큰과 유사하지만 클라이언트가 다양한 액세스 경계가 있는 사용자 인증 정보 액세스 경계 토큰을 높은 빈도로 획득해야 하는 시나리오에 최적화되어 있습니다.
클라이언트는 Cloud 클라이언트 라이브러리와 액세스 경계 중개자 토큰을 사용하여 로컬에서 클라이언트 발급 사용자 인증 정보 액세스 경계 토큰을 만들 수 있습니다. 액세스 경계 중개자 토큰은 주기적으로 새로고침해야 합니다.
클라이언트에서 발급한 사용자 인증 정보 액세스 경계 토큰은 불투명하며 인트로스펙션하거나 취소할 수 없습니다.
토큰 부여 토큰
토큰 부여 토큰을 사용하면 클라이언트가 나중에 새 토큰이나 다른 토큰을 획득할 수 있습니다. Google Cloud 는 여러 가지 다양한 유형의 토큰 부여 토큰을 지원하며, 이러한 토큰은 모두 다음과 같은 공통점이 있습니다.
이전 인증을 나타냅니다.
Google ID (사용자 또는 워크로드) 또는 외부 ID일 수 있는 주 구성원을 인증합니다.
액세스 토큰으로 사용할 수 있습니다.
Google API 호출에는 사용할 수 없으며, 이는 액세스 토큰과 구별되는 점입니다.
토큰 부여 토큰은 다음과 같은 점에서 차이가 있을 수 있습니다.
발급기관: 토큰을 발급하는 당사자입니다.
주 구성원: 토큰이 인증할 수 있는 주 구성원 ID의 유형입니다.
제한사항: 토큰에 적용할 수 있는 제한사항입니다.
다음 표에는 다양한 유형의 토큰 부여 토큰이 나와 있습니다.
토큰 유형 | 발급자 | 사용된 액세스 토큰 유형 | 주 구성원 | 제한사항 |
---|---|---|---|---|
갱신 토큰 | Google 승인 서버 | 사용자 액세스 토큰 |
|
OAuth 범위 |
승인 코드 | Google 승인 서버 | 사용자 액세스 토큰 |
|
OAuth 범위 |
제휴 갱신 토큰 | Google Cloud IAM 승인 서버 | 제휴 액세스 토큰 | 직원 ID 풀 주 구성원 | OAuth 범위 |
제휴 승인 코드 | Google Cloud IAM 승인 서버 | 제휴 액세스 토큰 | 직원 ID 풀 주 구성원 | OAuth 범위 |
서비스 계정 JSON 웹 토큰 어설션 | 클라이언트 |
|
|
OAuth 범위 |
외부 JSON 웹 토큰 | 외부 ID 공급업체 | 제휴 액세스 토큰 | 외부 주 구성원 | 없음 |
외부 SAML 어설션 또는 응답 | 외부 ID 공급업체 | 제휴 액세스 토큰 | 외부 주 구성원 | 없음 |
Amazon Web Services (AWS) GetCallerIdentity 토큰
|
외부 ID 공급업체 | 제휴 액세스 토큰 | 외부 주 구성원 | 없음 |
다양한 유형의 토큰 부여 토큰은 보안 속성도 다릅니다.
형식: 일부 토큰은 불투명합니다. 다른 토큰은 클라이언트가 디코딩할 수 있습니다.
수명: 토큰은 수명이 다르고 수정할 수 있는 정도도 다릅니다.
다회성: 일부 토큰 부여 토큰은 한 번만 사용할 수 있습니다. 다른 토큰은 여러 번 사용할 수 있습니다.
취소 가능 여부: 일부 토큰은 취소할 수 있습니다. 다른 토큰은 만료일까지 유효합니다.
다음 표에는 토큰 부여 토큰의 이러한 속성 간 차이점이 요약되어 있습니다.
토큰 유형 | 형식 | 전체 기간 | 취소 가능 | 다회성 |
---|---|---|---|---|
갱신 토큰 | Opaque | 다름, 갱신 토큰 참고 | 예 | 예 |
승인 코드 | Opaque | 10분 | 아니요 | 아니요 |
제휴 갱신 토큰 | Opaque | 다름, 제휴 갱신 토큰 참고 | 아니요 | 예 |
제휴 승인 코드 | Opaque | 10분 | 아니요 | 아니요 |
서비스 계정 JSON 웹 토큰 어설션 | JWT | 5분~1시간 | 아니요 | 예 |
외부 토큰 또는 외부 JSON 웹 토큰 | JWT | ID 공급업체에 따라 다름 | ID 공급업체에 따라 다름 | 예 |
외부 SAML 어설션 또는 응답 | SAML | ID 공급업체에 따라 다름 | ID 공급업체에 따라 다름 | 예 |
Amazon Web Services (AWS) GetCallerIdentity 토큰 |
텍스트 blob | ID 공급업체에 따라 다름 | ID 공급업체에 따라 다름 | 예 |
갱신 토큰
갱신 토큰은 사용자가 이전에 클라이언트가 사용자를 대신하여 행동하도록 승인한 경우 클라이언트가 사용자의 ID 토큰과 액세스 토큰을 획득할 수 있도록 하는 불투명 토큰입니다.
갱신 토큰은 특정 클라이언트에 연결되어 있으며 유효한 클라이언트 사용자 인증 정보(예: 클라이언트 ID 및 클라이언트 보안 비밀번호)와 함께만 사용할 수 있습니다.
클라이언트의 승인에 하나 이상의 Google Cloud OAuth 범위가 포함된 경우 갱신 토큰의 전체 기간은 Google Cloud 세션 길이 제어의 적용을 받습니다. 그렇지 않으면 사용자가 승인을 취소하거나 다른 토큰 취소 이벤트가 발생할 때까지 갱신 토큰이 유효한 상태로 유지됩니다.
승인 코드
승인 코드는 불투명한 단기 토큰입니다. 코드는 클라이언트와 Google 승인 서버 간의 중개자로서 사용자 인증 중에만 사용해야 합니다.
새로고침 토큰과 마찬가지로 승인 코드는 클라이언트에 연결되어 있으며 유효한 클라이언트 사용자 인증 정보와 함께만 사용할 수 있습니다. 갱신 토큰과 달리 승인 코드는 한 번만 사용할 수 있습니다.
제휴 갱신 토큰
제휴 갱신 토큰은 사용자가 이전에 클라이언트가 자신을 대신하여 행동하도록 승인한 경우 클라이언트가 직원 ID 풀 주 구성원의 액세스 토큰을 획득할 수 있도록 하는 불투명 토큰입니다.
갱신 토큰과 마찬가지로 제휴 갱신 토큰은 특정 클라이언트에 연결되며 유효한 클라이언트 사용자 인증 정보(예: 클라이언트 ID 및 클라이언트 보안 비밀번호)와 함께만 사용할 수 있습니다.
갱신 토큰과 달리 제휴 갱신 토큰은 취소할 수 없습니다. 제휴 갱신 토큰의 수명은 토큰을 획득하는 데 사용된 직원 ID 세션에 연결되며 세션이 만료될 때까지 유효합니다.
제휴 승인 코드
승인 코드와 마찬가지로 제휴 승인 코드는 불투명한 단기 토큰입니다. 이 코드는 클라이언트와 Google Cloud IAM 승인 서버 간의 사용자 인증 중에만 중간 매개체로 사용됩니다.
승인 코드는 클라이언트에 연결되어 있으며 유효한 클라이언트 사용자 인증 정보와 함께만 사용할 수 있고 한 번만 사용할 수 있습니다.
서비스 계정 JSON 웹 토큰 어설션
서비스 계정 JSON 웹 토큰 (JWT) 어설션은 서비스 계정의 ID를 어설션합니다. 워크로드는 서비스 계정 JWT 어설션을 사용하여 서비스 계정 액세스 토큰 또는 도메인 전체 위임 토큰을 가져올 수 있습니다. 서비스 계정 JWT 어설션은 서비스 계정 키로 서명됩니다.
디코딩된 서비스 계정 JWT 어설션은 다음과 유사하며 SIGNATURE
는 토큰의 서명으로 대체됩니다.
{
"alg": "RS256",
"kid": "290b7bf588eee0c35d02bf1164f4336229373300",
"typ": "JWT"
}.{
"iss": "service-account@example.iam.gserviceaccount.com",
"scope": "https://www.googleapis.com/auth/devstorage.read_only",
"aud": "https://oauth2.googleapis.com/token",
"exp": 1744851267,
"iat": 1744850967
}.SIGNATURE
서비스 계정 JWT 어설션은 구조적으로 서비스 계정 JWT와 유사합니다. 두 유형의 토큰 모두 클라이언트 자체에서 발급할 수 있으며 서비스 계정 키로 서명됩니다. 하지만 두 유형의 토큰은 다음 표에 설명된 대로 서로 다른 페이로드를 사용합니다.
필드 | 서비스 계정 JWT | 서비스 계정 JWT 어설션 |
---|---|---|
aud |
Google Cloud API. scope 이 지정된 경우 생략됩니다. |
https://oauth2.googleapis.com/token 여야 합니다. |
exp |
만료 | 만료 |
iat |
문제 시간 | 문제 시간 |
iss |
서비스 계정의 이메일 주소 | 서비스 계정의 이메일 주소 |
scope |
OAuth 범위( |
OAuth 범위 |
sub |
서비스 계정의 이메일 주소 | 도메인 전체 위임에 사용되는 사용자 계정의 이메일 주소입니다. 그렇지 않은 경우 생략됩니다. |
서비스 계정 JWT 어설션은 최대 1시간 동안 유효하며 취소할 수 없습니다.
외부 JSON 웹 토큰
외부 JSON 웹 토큰 (JWT)은 Microsoft Entra ID, Okta, Kubernetes, GitHub와 같은 외부 ID 공급업체에서 발급합니다. 구조와 내용이 다를 수 있습니다.
직원 ID 제휴 또는 워크로드 아이덴티티 제휴를 구성하면 Google Cloud 와 외부 ID 공급업체 간에 트러스트 관계를 설정할 수 있습니다. 그러면 워크로드에서 외부 JWT를 토큰 부여 토큰으로 사용하여 제휴 액세스 토큰을 획득할 수 있습니다.
직원 ID 제휴를 사용하면 결과로 생성되는 제휴 액세스 토큰이 직원 ID 풀 주 구성원을 인증합니다.
워크로드 아이덴티티 제휴를 사용하면 결과로 생성되는 제휴 액세스 토큰이 워크로드 아이덴티티 풀 주 구성원을 인증합니다.
두 경우 모두 주 구성원 식별자는 외부 JWT의 하나 이상의 클레임에서 파생됩니다.
직원 ID 제휴 또는 워크로드 아이덴티티 제휴와 호환되려면 외부 JWT가 특정 요구사항을 충족해야 합니다.
외부 SAML 어설션 또는 응답
외부 보안 보장 마크업 언어(SAML) 어설션은 Microsoft Entra ID, Okta, Active Directory Federation Services와 같은 외부 ID 공급업체에서 발급한 SAML 2.0 어설션입니다. 이러한 외부 SAML 어설션은 선택적으로 SAML 2.0 응답에 포함되거나 암호화될 수 있습니다.
외부 JSON 웹 토큰과 마찬가지로 워크로드에서 외부 SAML 어설션 또는 응답을 토큰 부여 토큰으로 사용하여 제휴 액세스 토큰을 획득할 수 있도록 직원 ID 제휴 또는 워크로드 아이덴티티 제휴를 구성할 수 있습니다.
직원 ID 제휴 또는 워크로드 아이덴티티 제휴와 호환되려면 외부 SAML 어설션이 특정 요구사항을 충족해야 합니다.
Amazon Web Services (AWS) GetCallerIdentity
토큰
외부 AWS GetCallerIdentity
토큰은 AWS GetCallerIdentity
API에 대한 서명된 요청이 포함된 텍스트 블롭입니다.
외부 JSON 웹 토큰 및 SAML 어설션과 마찬가지로 워크로드가 이러한 텍스트 BLOB을 토큰 부여 토큰으로 사용하여 제휴 액세스 토큰을 획득할 수 있도록 직원 ID 제휴 또는 워크로드 아이덴티티 제휴를 구성할 수 있습니다.
ID 토큰
ID 토큰을 사용하면 클라이언트가 상호작용하는 사용자를 식별할 수 있습니다. Google Cloud 는 여러 가지 유형의 ID 토큰을 지원하며, 모든 토큰에는 다음과 같은 공통점이 있습니다.
클라이언트가 디코딩, 검증, 해석할 수 있도록 JSON 웹 토큰 (JWT) 형식으로 지정됩니다.
사용자 또는 워크로드일 수 있는 주 구성원을 인증합니다.
특정 클라이언트에 발급됩니다.
이러한 토큰은 수명이 짧으며 최대 1시간 후에 만료됩니다.
취소할 수 없습니다.
Google API 호출에 사용할 수 없으므로 액세스 토큰과 구분됩니다.
이러한 토큰은 액세스 토큰을 획득하는 데 사용할 수 없으며, 이 점이 토큰 부여 토큰과 다릅니다.
마이크로서비스 간 호출을 인증하거나 IAP (Identity-Aware Proxy)에 프로그래매틱 방식으로 인증하는 데 사용할 수 있습니다.
ID 토큰은 다음과 같은 방식으로 다를 수 있습니다.
대상: 토큰을 디코딩하고 소비하도록 의도된 당사자입니다.
발급기관: 토큰을 발급하는 당사자입니다.
수명: 토큰은 수명이 다르고 수정할 수 있는 정도도 다릅니다.
주 구성원: 토큰이 인증할 수 있는 주 구성원 ID의 유형입니다.
다음 표에는 다양한 유형의 ID 토큰이 나와 있습니다.
토큰 유형 | 발급자 | 대상 | 주 구성원 | 전체 기간 |
---|---|---|---|---|
사용자 ID 토큰 | Google 승인 서버 | OAuth/OIDC 클라이언트 |
|
1시간 |
서비스 계정 ID 토큰 | Google Cloud IAM 승인 서버 | 모든 잠재고객을 자유롭게 선택할 수 있음 | 서비스 계정 | 1시간 |
IAP (Identity-Aware Proxy) 어설션 | IAP |
|
|
10분 |
SAML 어설션 | Google 승인 서버 | SAML 앱 | 사용자 (관리 사용자) | 10분 |
사용자 ID 토큰
사용자 ID 토큰은 사용자를 인증하는 JSON 웹 토큰 (JWT)입니다. 클라이언트는 OIDC 인증 흐름을 시작하여 사용자 ID 토큰을 획득할 수 있습니다.
사용자 ID 토큰은 Google JSON 웹 키 세트 (JWKS)를 사용하여 서명됩니다. Google JWKS는 전역 리소스이며 다음과 같은 다양한 유형의 사용자에게 동일한 서명 키가 사용됩니다.
관리 사용자 계정
일반 사용자 계정
서비스 계정
디코딩된 사용자 ID 토큰은 다음과 유사하며 SIGNATURE
는 토큰의 서명으로 대체됩니다.
{
"alg": "RS256",
"kid": "c37da75c9fbe18c2ce9125b9aa1f300dcb31e8d9",
"typ": "JWT"
}.{
"iss": "https://accounts.google.com",
"azp": "1234567890-123456789abcdef.apps.googleusercontent.com",
"aud": "1234567890-123456789abcdef.apps.googleusercontent.com",
"sub": "12345678901234567890",
"at_hash": "y0LZEe-ervzRNSxn4R-t9w",
"name": "Example user",
"picture": "https://lh3.googleusercontent.com/a/...",
"given_name": "Example",
"family_name": "User",
"hd": "example.com",
"iat": 1745361695,
"exp": 1745365295
}.SIGNATURE
ID 토큰에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 |
이 토큰이 적용되는 OAuth 클라이언트입니다. OAuth 클라이언트 ID로 식별됩니다. OAuth 클라이언트는 동일한 프로젝트에 속한 다른 OAuth 클라이언트의 액세스 토큰을 획득할 수 있습니다. 이 경우 잠재고객이 승인된 당사자와 다를 수 있습니다. |
azp |
승인된 당사자 | OIDC 인증 흐름을 실행한 OAuth 클라이언트입니다. OAuth 클라이언트 ID로 식별됩니다. |
exp |
만료 | 토큰의 만료 시간입니다(Unix epoch 시간 형식). |
hd |
호스트 도메인 |
사용자의 Cloud ID 또는 Google Workspace 계정의 기본 도메인입니다.
이 클레임은 사용자가 관리 사용자 계정이고 클라이언트가 인증 요청에서
|
iss |
발급자 |
토큰의 발급기관입니다. 항상 https://accounts.google.com 로 설정합니다.
|
sub |
제목 |
인증된 주 구성원으로, 고유 ID로 식별됩니다. 이 ID는 Directory API에 노출된 ID와 동일합니다. |
ID 토큰에 포함된 정확한 클레임 집합은 인증 요청의 scope
매개변수에 따라 다릅니다.
사용자가 관리 사용자 계정인지 확인하거나 사용자가 속한 Cloud ID 또는 Google Workspace 계정을 확인하려면 클라이언트가 hd
클레임을 검사해야 합니다.
사용자 ID 토큰은 1시간 동안 유효하며 취소할 수 없습니다.
서비스 계정 ID 토큰
서비스 계정 ID 토큰은 서비스 계정을 인증하는 JSON 웹 토큰 (JWT)입니다.
서비스 계정 JWT 및 서비스 계정 JWT 어설션과 달리 서비스 계정 ID 토큰은 서비스 계정 키로 서명되지 않습니다. 대신 서비스 계정 ID 토큰은 Google JSON 웹 키 세트 (JWKS)로 서명됩니다.
디코딩된 서비스 계정 ID 토큰은 다음과 유사하며 SIGNATURE
는 토큰의 서명으로 대체됩니다.
{
"alg": "RS256",
"kid": "c37da75c9fbe18c2ce9125b9aa1f300dcb31e8d9",
"typ": "JWT"
}.{
"aud": "example-audience",
"azp": "112010400000000710080",
"email": "service-account@example.iam.gserviceaccount.com",
"email_verified": true,
"exp": 1745365618,
"iat": 1745362018,
"iss": "https://accounts.google.com",
"sub": "112010400000000710080"
}.SIGNATURE
서비스 계정 ID 토큰에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 | 이 토큰이 적용되는 당사자의 식별자입니다. 값은 토큰 요청자가 자유롭게 선택할 수 있습니다. |
azp |
승인된 당사자 | 토큰을 요청한 서비스 계정으로, 고유 ID로 식별됩니다. |
exp |
만료 | 토큰의 만료 시간입니다(Unix epoch 시간 형식). |
iss |
발급자 |
토큰의 발급기관으로, 항상 https://accounts.google.com 로 설정됩니다.
|
sub |
제목 | 토큰을 요청한 서비스 계정으로, 고유 ID로 식별됩니다. |
ID 토큰에 포함된 정확한 클레임 집합은 ID 토큰이 요청되는 방식에 따라 다릅니다. 예를 들어 Compute Engine 메타데이터 서버에서 요청한 ID 토큰에는 VM의 ID를 어설션하는 추가 클레임이 선택적으로 포함될 수 있습니다. IAM Credentials API를 사용하여 요청된 ID 토큰에는 서비스 계정 프로젝트의 조직 ID가 선택적으로 포함될 수 있습니다.
사용자 ID 토큰과 달리 서비스 계정 ID 토큰은 hd
클레임을 지원하지 않습니다.
서비스 계정 ID 토큰은 1시간 동안 유효하며 취소할 수 없습니다.
IAP(Identity-Aware Proxy) 어설션
Identity-Aware Proxy (IAP) 어설션은 IAP가 x-goog-iap-jwt-assertion
HTTP 요청 헤더에서 IAP로 보호되는 웹 애플리케이션에 전달하는 JSON 웹 토큰 (JWT)입니다. IAP 어설션은 사용자를 인증하고 요청이 IAP에 의해 승인되었음을 증명하는 역할도 합니다.
사용자 ID 토큰 및 서비스 계정 ID 토큰과 달리 IAP 어설션은 Google JSON 웹 키 집합 (JWKS)을 사용하여 서명되지 않습니다. 대신 IAP 어설션은 별도의 JWKS인 IAP JWKS를 사용하여 서명됩니다. 이 JWKS는 전역 리소스이며 다음과 같은 여러 유형의 사용자에게 동일한 서명 키가 사용됩니다.
관리 사용자 계정
일반 계정
서비스 계정
직원 ID 풀 보안 주체
디코딩된 IAP 어설션은 다음과 유사하며 SIGNATURE
이 토큰의 서명으로 대체됩니다.
{
"alg": "ES256",
"typ": "JWT",
"kid": "4BCyVw"
}.{
"aud": "/projects/0000000000/global/backendServices/000000000000",
"azp": "/projects/0000000000/global/backendServices/000000000000",
"email": "user@example.com",
"exp": 1745362883,
"google": {
"access_levels": [
"accessPolicies/0000000000/accessLevels/Australia"
]
},
"hd": "example.com",
"iat": 1745362283,
"identity_source": "GOOGLE",
"iss": "https://cloud.google.com/iap",
"sub": "accounts.google.com:112010400000000710080"
}.SIGNATURE
Google ID 대신 직원 ID 제휴를 사용하도록 IAP를 구성하면 IAP 어설션이 약간 다르게 표시됩니다.
{
"alg": "ES256",
"typ": "JWT",
"kid": "4BCyVw"
}.{
"aud": "/projects/0000000000/global/backendServices/000000000000",
"azp": "/projects/0000000000/global/backendServices/000000000000",
"email": "user@example.com",
"exp": 1745374290,
"google": {
"access_levels": [
"accessPolicies/0000000000/accessLevels/Australia"
]
},
"iat": 1745373690,
"identity_source": "WORKFORCE_IDENTITY",
"iss": "https://cloud.google.com/iap",
"sub": "sts.google.com:AAFTZ...Q",
"workforce_identity": {
"iam_principal": "principal://iam.googleapis.com/locations/global/workforcePools/example/subject/user-0000000000",
"workforce_pool_name": "locations/global/workforcePools/example"
}
}.SIGNATURE
IAP 어설션에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
aud |
대상 | IAP 어설션이 사용될 백엔드 서비스, App Engine 애플리케이션 또는 Cloud Run 서비스입니다. |
iss |
발급자 |
토큰의 발급기관으로, 항상 https://cloud.google.com/iap 로 설정됩니다.
|
sub |
제목 |
인증된 주 구성원으로, 고유 ID로 식별됩니다. Google ID를 사용하도록 IAP가 구성된 경우 이 ID는 Directory API에 노출된 ID와 동일합니다. |
IAP 어설션 클레임에 관한 자세한 내용은 JWT 페이로드 확인을 참고하세요.
IAP 어설션은 10분 동안 유효하며 취소할 수 없습니다.
SAML 어설션
보안 보장 마크업 언어(SAML) 어설션은 관리 사용자 계정을 인증하고 맞춤 SAML 앱에 액세스할 수 있는 권한을 부여합니다. SAML 어설션은 Cloud ID에서 발급하고 서명하며 관리 사용자 계정을 인증하는 데만 사용할 수 있습니다.
전역 키를 사용하여 서명되는 ID 토큰과 달리 SAML 어설션은 Cloud ID 또는 Google Workspace 계정에 고유한 키를 사용하여 서명됩니다.
디코딩된 SAML 응답 어설션은 다음과 유사합니다.
<saml2:Assertion
xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
ID="..."
IssueInstant="2025-04-23T22:47:20.881Z"
Version="2.0">
<saml2:Issuer>
https://accounts.google.com/o/saml2?idpid=C0123456789
</saml2:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<saml2:Subject>
<saml2:NameID
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">
user@example.com
</saml2:NameID>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData
NotOnOrAfter="2025-04-23T22:52:20.881Z"
Recipient="https://app.example.com/"/>
</saml2:SubjectConfirmation>
</saml2:Subject>
<saml2:Conditions
NotBefore="2025-04-23T22:42:20.881Z"
NotOnOrAfter="2025-04-23T22:52:20.881Z">
<saml2:AudienceRestriction>
<saml2:Audience>example-app</saml2:Audience>
</saml2:AudienceRestriction>
</saml2:Conditions>
<saml2:AuthnStatement
AuthnInstant="2025-04-23T22:46:44.000Z"
SessionIndex="...">
<saml2:AuthnContext>
<saml2:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified
</saml2:AuthnContextClassRef>
</saml2:AuthnContext>
</saml2:AuthnStatement>
</saml2:Assertion>
SAML 어설션에는 다음 필드가 포함됩니다.
필드 | 이름 | 설명 |
---|---|---|
Audience |
대상 | SAML 앱의 엔티티 ID입니다. |
Issuer |
발급자 | Cloud ID 또는 Google Workspace 계정에 특정한 토큰 발급자입니다. |
NameID |
제목 | 인증된 주 구성원입니다. 식별자 형식은 SAML 앱의 구성에 따라 다릅니다. |
SAML 어설션에 포함된 정확한 속성 집합은 SAML 앱의 구성에 따라 다릅니다.
SAML 어설션은 10분 동안 유효하며 취소할 수 없습니다.