トークンの種類

Google Cloud は、目的や交換される当事者に応じて異なる複数の種類のトークンを発行します。

次の表は、主なトークン カテゴリの概要を示しています。各カテゴリには、さまざまなトークンタイプがあります。

トークンのカテゴリ 通信経路 目的
アクセス トークン 認証サーバー クライアント Google API クライアントが Google Cloud API を呼び出せるようにします。
トークン付与トークン 認可サーバー クライアント クライアントが新しいトークンや別のトークンを後で取得できるようにします。
ID トークン 認可サーバー クライアント クライアントがやり取りしているユーザーを識別できるようにします。

アクセス トークンと ID トークンは署名なしトークンです。署名なしトークンは、トークンを所有するパーティーにアクセス権を付与する一般的なクラスです。

署名なしトークンの認証の使用は、HTTPS などの暗号化されたプロトコルによって提供されるセキュリティに依存します。署名なしトークンがインターセプトされると、不正な行為者がこれを利用してアクセスできるようになる可能性があります。

署名なしトークンでユースケースに十分なセキュリティが得られない場合は、コンテキスト認識アクセスを使用するか、アクセス トークンの有効期間を制限するか、Chrome Enterprise Premium などの相互 Transport Layer Security(mTLS)ソリューションを使用することで、トークンの盗難のリスクを軽減できます。

アクセス トークン

アクセス トークンを使用すると、クライアントは Google Cloud API に対して認証済み呼び出しを行うことができます。Google Cloud は、次の共通プロパティを持つ複数の異なるタイプのアクセス トークンをサポートしています。

  • ユーザーまたはワークロードであるプリンシパルを認証します。

  • 特定のクライアントに発行されます。

  • これらは短期間で有効期限が切れ、最長でも数時間で期限切れになります。

  • 特定の OAuth スコープ、エンドポイント、リソースに制限されています。つまり、アクセス トークンは通常、ユーザーのすべてのリソースへのアクセス権を付与するのではなく、特定のリソースのサブセットへのアクセス権のみを付与します。

アクセス トークンには、次のような違いがあります。

  • 発行者: トークンを発行する当事者。

  • プリンシパル: トークンが認証できるプリンシパルのタイプ。

  • 制限: トークンに適用できる制限。

次の表に、さまざまなタイプのアクセス トークンを示します。

トークンのタイプ 発行元 プリンシパル 制限事項
ユーザー アクセス トークン Google 認証サーバー
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
OAuth スコープ
サービス アカウントのアクセス トークン
  • Google 認証サーバー
  • Google Cloud IAM 認可サーバー
サービス アカウント OAuth スコープ
ドメイン全体の委任トークン Google 認証サーバー ユーザー(管理対象ユーザー) OAuth スコープ
サービス アカウントの JSON Web Token(JWT) クライアント サービス アカウント OAuth スコープまたは API
連携アクセス トークン Google Cloud IAM 認可サーバー
  • Workforce Identity プールのプリンシパル
  • Workload Identity プールのプリンシパル
OAuth スコープ
認証情報アクセス境界トークン Google Cloud IAM 認可サーバー
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
  • サービス アカウント
特定の Cloud Storage オブジェクト
クライアント発行の認証情報アクセス境界トークン クライアント サービス アカウント 特定の Cloud Storage オブジェクト

アクセス トークンの種類によって、セキュリティ プロパティも異なります。

  • 形式: 一部のアクセス トークンは不透明です。つまり、独自の形式であり、検査できません。他のトークンは JSON Web Token としてエンコードされ、クライアントでデコードできます。

  • イントロスペクション可能性: 一部の不透明トークンは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 クライアント ID で識別される、トークンをリクエストした OAuth クライアント。
email メインのメールアドレス

ユーザーのメインのメールアドレス。

このフィールドは、トークンに https://www.googleapis.com/auth/userinfo.email スコープが含まれている場合にのみ存在します。

exp 有効期限 トークンの有効期限(Unix エポック時間形式)。
scope OAuth スコープ クライアントがユーザーの代わりにアクセスできる API のセット。 OAuth スコープで識別されます。
sub 件名

一意の ID で識別される認証済みプリンシパル。

この ID は、 Directory API で公開されている ID と同じです。

ユーザー アクセス トークンは 1 時間後に自動的に期限切れになりますが、必要に応じてそれより前に取り消すことができます。

デフォルトでは、ユーザー アクセス トークンは署名なしトークンです。つまり、特定の通信チャネル、ネットワーク、追加の認証情報にバインドされていません。必要に応じて、証明書ベースのアクセスをデプロイしてトークン バインディングを実装し、ユーザー アクセス トークンを有効な 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 メインのメールアドレス

サービス アカウントのメールアドレス。

このフィールドは、トークンに https://www.googleapis.com/auth/userinfo.email スコープが含まれている場合にのみ存在します。

exp 有効期限 トークンの有効期限(Unix エポック時間形式)。

サービス アカウント アクセス トークンは取り消すことができず、有効期限が切れるまで有効です。

デフォルトでは、サービス アカウントのアクセス トークンは 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 メインのメールアドレス

権限を借用したユーザーのメインのメールアドレス。

このフィールドは、トークンに https://www.googleapis.com/auth/userinfo.email スコープが含まれている場合にのみ存在します。

exp 有効期限 トークンの有効期限(Unix エポック時間形式)。
scope OAuth スコープ クライアントが権限借用されたユーザーに代わってアクセスできる API のセット。 OAuth スコープで識別されます。

ドメイン全体の委任トークンは 1 時間後に自動的に期限切れになり、取り消すことはできません。

サービス アカウントの JSON ウェブトークン

サービス アカウントの JSON ウェブトークン(JWT)は、サービス アカウントを認証します。サービス アカウントのアクセス トークンは認可サーバーによって発行されますが、サービス アカウントの JWT はクライアント自体によって発行できます。

これらは「自己署名」JWT と呼ばれることもあります。これらは、承認サーバーからアクセス トークンを取得せずに一部の Google API に対する認証を行う必要がある場合(独自のクライアント ライブラリを作成する場合など)に役立ちます。

サービス アカウントの JWT を発行するには、クライアントは次の手順を行う必要があります。

  1. サービス アカウントのメールアドレス、OAuth スコープまたは API エンドポイント、有効期限を含む JSON ウェブ署名ペイロードを準備します。

  2. それぞれのサービス アカウントのサービス アカウント キーを使用してペイロードに署名します。クライアントは、ユーザー管理のサービス アカウント キーを使用してペイロードをオフラインで署名するか、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

サービス アカウントの JWT では、scope キーで OAuth スコープを指定する代わりに、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 エポック時間形式)。
iat 問題の時刻 トークンが発行された時刻(Unix エポック時間形式)。
iss 発行元 トークンの発行者(サービス アカウント自体)。
scope OAuth スコープ クライアントがアクセスできる API のセット。 OAuth スコープで識別されます。aud が指定されていない場合にのみ有効です。
sub 件名 認証されたプリンシパル(サービス アカウント自体)。

サービス アカウントの JWT は最大 1 時間有効で、取り消すことはできません。

連携アクセス トークン

フェデレーション アクセス トークンは、ID Workforce プールのプリンシパルまたは Workload Identity プールのプリンシパルを認証します。

Workforce Identity 連携を使用すると、クライアントは外部トークンを、ワークフォース プール プリンシパルを認証する連携アクセス トークンと交換できます。Workforce Identity プールのプリンシパルは、次のようなプリンシパル識別子で識別されます。

principal://iam.googleapis.com/locations/global/workforcePools/POOL/subject/raha@altostrat.com.

Workload Identity 連携を使用すると、クライアントは外部トークンをワークロード プール プリンシパルを認証する連携アクセス トークンと交換できます。Workload Identity プールのプリンシパルは、次のようなプリンシパル ID で識別されます。

principal://iam.googleapis.com/projects/PROJECT/locations/global/workloadIdentityPools/POOL/subject/SUBJECT_ATTRIBUTE_VALUE

連携アクセス トークンは不透明であり、イントロスペクションできません。トークンは取り消すことができず、有効期限まで有効です。各トークン タイプの有効期限は次のように設定されます。

  • Workforce Identity 連携は、トークンの有効期限を次の 2 つの値のうち小さい方に設定します。

    • Workforce Identity 連携セッションの有効期限が切れるまでの残り時間

    • 1 時間

    Workforce Identity 連携セッションの有効期限は、ログイン時間と Workforce Identity 連携プールに構成されたセッション継続時間に基づいて決定されます。

  • Workload Identity 連携は、外部トークンの有効期限と一致するようにトークンの有効期限を設定します。

認証情報アクセス境界トークン

認証情報アクセス境界トークンは、ユーザーまたはサービス アカウントを認証し、アクセス境界を含みます。アクセス境界は、定義された Cloud Storage リソースのサブセットへのアクセスにのみ使用できるようにトークンを制限します。

認証情報アクセス境界トークンは、入力トークンから派生しますが、アクセス権を付与するリソースがより制限されているため、範囲が限定されたトークンと呼ばれることがあります。

認証情報アクセス境界トークンの有効期限は、入力トークンの有効期限から派生します。入力トークンには、ユーザー アクセス トークンまたはサービス アカウント アクセス トークンを使用できます。認証情報アクセス境界トークンは不透明であり、内省や取り消しはできません。

クライアント発行の認証情報アクセス境界トークン

クライアント発行の認証情報アクセス境界トークンは、認証情報アクセス境界トークンと似ていますが、クライアントが異なるアクセス境界を持つ認証情報アクセス境界トークンを高い頻度で取得する必要があるシナリオ向けに最適化されています。

クライアントは、Cloud クライアント ライブラリとアクセス境界仲介トークンを使用して、クライアント発行の認証情報アクセス境界トークンをローカルで作成できます。このトークンは定期的に更新する必要があります。

クライアント発行の認証情報アクセス境界トークンは不透明であり、内省や取り消しはできません。

トークン付与トークン

トークン付与トークンを使用すると、クライアントは新しいトークンや別のトークンを後で取得できます。 Google Cloud は複数の異なるタイプのトークン付与トークンをサポートしており、それらにはすべて次の共通点があります。

  • これらは以前の認証を表します。

  • プリンシパル(Google ID(ユーザーまたはワークロード)または外部 ID)を認証します。

  • アクセス トークンと引き換えることができます。

  • Google API 呼び出しには使用できません。これがアクセス トークンとの違いです。

トークン付与トークンは、次の点で異なる場合があります。

  • 発行者: トークンを発行する当事者。

  • プリンシパル: トークンで認証できるプリンシパル ID のタイプ。

  • 制限: トークンに適用できる制限。

次の表に、さまざまなタイプのトークン付与トークンを示します。

トークンのタイプ 発行元 利用されたアクセス トークンのタイプ プリンシパル 制限事項
更新トークン Google 認証サーバー ユーザー アクセス トークン
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
OAuth スコープ
認証コード Google 認証サーバー ユーザー アクセス トークン
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
OAuth スコープ
フェデレーション更新トークン Google Cloud IAM 認可サーバー 連携アクセス トークン Workforce Identity プールのプリンシパル OAuth スコープ
連携認証コード Google Cloud IAM 認可サーバー 連携アクセス トークン Workforce Identity プールのプリンシパル OAuth スコープ
サービス アカウントの JSON ウェブトークン アサーション クライアント
  • ドメイン全体の委任トークン
  • サービス アカウントのアクセス トークン
  • ユーザー(管理対象ユーザー)
  • サービス アカウント
OAuth スコープ
外部 JSON ウェブトークン 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし
外部 SAML アサーションまたはレスポンス 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし
Amazon Web Services(AWS)GetCallerIdentity トークン 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし

トークン付与トークンの種類によって、セキュリティ プロパティも異なります。

  • 形式: 一部のトークンは不透明です。他のトークンはクライアントでデコードできます。

  • 有効期間: トークンは有効期間と変更可能な範囲が異なります。

  • 複数回使用: トークン付与トークンの中には、1 回しか使用できないものがあります。他のトークンは複数回使用できます。

  • 取り消し可能性: 一部のトークンは取り消すことができます。他のトークンは有効期限まで有効です。

次の表に、トークン付与トークンのこれらのプロパティの違いを示します。

トークンのタイプ 形式 存続期間 取り消し可能 多用途での使用
更新トークン 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 やクライアント シークレットなど)と組み合わせてのみ使用できます。

クライアントの認可に 1 つ以上の Google Cloud OAuth スコープが含まれている場合、更新トークンの有効期間は Google Cloud セッションの長さの制御の対象となります。それ以外の場合、更新トークンは、ユーザーが認証を取り消すか、他のトークン取り消しイベントが発生するまで有効です。

認証コード

認可コードは、不透明で有効期間の短いトークンです。このコードは、クライアントと Google 認証サーバー間の仲介として、ユーザー認証でのみ使用されることを想定しています。

更新トークンと同様に、認証コードはクライアントに関連付けられており、有効なクライアント認証情報との組み合わせでのみ使用できます。更新トークンとは異なり、認可コードは 1 回しか使用できません。

連携更新トークン

連携更新トークンは、ユーザーが以前にクライアントに代行処理を承認した場合に、クライアントが Workforce Identity プールのプリンシパルのアクセス トークンを取得できるようにする不透明なトークンです。

更新トークンと同様に、フェデレーション更新トークンは特定のクライアントに関連付けられており、有効なクライアント認証情報(クライアント ID やクライアント シークレットなど)と組み合わせてのみ使用できます。

更新トークンとは異なり、フェデレーション更新トークンは取り消すことができません。フェデレーション更新トークンの有効期間は、トークンの取得に使用された Workforce Identity セッションに関連付けられており、セッションの有効期限が切れるまで有効です。

連携認証コード

認証コードと同様に、連携認証コードは不透明な有効期間の短いトークンです。このコードは、クライアントと Google Cloud IAM 認証サーバーの間の中間として、ユーザー認証でのみ使用されることを想定しています。

認証コードはクライアントに関連付けられており、有効なクライアント認証情報と組み合わせて 1 回のみ使用できます。

サービス アカウントの 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 と似ています。どちらのタイプのトークンもクライアント自体が発行でき、サービス アカウント キーで署名されます。ただし、次の表に示すように、2 種類のトークンでは異なるペイロードが使用されます。

フィールド サービス アカウントの JWT サービス アカウントの JWT アサーション
aud Google Cloud API。scope が指定されている場合は省略されます。 必ず https://oauth2.googleapis.com/token にします。
exp 有効期限 有効期限
iat 問題の時刻 問題の時刻
iss サービス アカウントのメールアドレス サービス アカウントのメールアドレス
scope OAuth スコープ。aud が指定されている場合は省略されます。 OAuth スコープ
sub サービス アカウントのメールアドレス ドメイン全体の委任に使用するユーザー アカウントのメールアドレス。それ以外の場合は省略されます。

サービス アカウントの JWT アサーションは最大 1 時間有効で、取り消すことはできません。

外部 JSON ウェブトークン

外部 JSON ウェブトークン(JWT)は、Microsoft Entra ID、Okta、Kubernetes、GitHub などの外部 ID プロバイダによって発行されます。構造や内容が異なる場合があります。

Workforce Identity 連携または Workload Identity 連携を構成することで、 Google Cloud と外部 ID プロバイダ間の信頼関係を設定できます。ワークロードは、外部 JWT をトークン付与トークンとして使用して、連携アクセス トークンを取得できます。

Workforce Identity 連携を使用すると、結果として得られるフェデレーション アクセス トークンは、Workforce ID プールのプリンシパルを認証します。

Workload Identity 連携を使用すると、生成されたフェデレーション アクセス トークンは、ワークロード ID プール プリンシパルを認証します。

どちらの場合も、プリンシパル ID は外部 JWT の 1 つ以上のクレームから取得されます。

Workforce Identity 連携または Workload Identity 連携と互換性を持たせるには、外部 JWT が特定の要件を満たしている必要があります。

外部 SAML アサーションまたはレスポンス

外部 Security Assertion Markup Language(SAML)アサーションは、Microsoft Entra ID、Okta、Active Directory Federation Services などの外部 ID プロバイダによって発行される SAML 2.0 アサーションです。これらの外部 SAML アサーションは、必要に応じて SAML 2.0 レスポンスに含めるか、暗号化できます。

外部 JSON ウェブ トークンと同様に、ワークロードが外部 SAML アサーションまたはレスポンスをトークン付与トークンとして使用して、連携アクセス トークンを取得できるように、Workforce Identity 連携または Workload Identity 連携を構成できます。

Workforce Identity 連携または Workload Identity 連携との互換性を確保するには、外部 SAML アサーションが特定の要件を満たしている必要があります。

Amazon Web Services(AWS)GetCallerIdentity トークン

外部 AWS GetCallerIdentity トークンは、AWS GetCallerIdentity API への署名付きリクエストを含むテキスト BLOB です。外部 JSON Web トークンや SAML アサーションと同様に、ワークロードがこれらのテキスト BLOB をトークン付与トークンとして使用して連携アクセス トークンを取得できるように、Workforce Identity 連携または Workload Identity 連携を構成できます。

ID トークン

ID トークンを使用すると、クライアントはやり取りしているユーザーを識別できます。 Google Cloud は複数の異なるタイプの ID トークンをサポートしており、それらにはすべて次の共通点があります。

  • クライアントでデコード、検証、解釈できるように、JSON ウェブトークン(JWT)としてフォーマットされます。

  • ユーザーまたはワークロードであるプリンシパルを認証します。

  • 特定のクライアントに発行されます。

  • 有効期間は短く、最大 1 時間で期限切れになります。

  • 取り消すことはできません。

  • Google API 呼び出しには使用できません。この点がアクセス トークンと異なります。

  • アクセス トークンの取得には使用できません。この点が、トークン付与トークンとの違いです。

  • これらは、マイクロサービス間の呼び出しを認証したり、Identity-Aware Proxy(IAP)に対してプログラムで認証したりするために使用できます。

ID トークンには、次のような違いがあります。

  • オーディエンス: トークンをデコードして使用する予定のパーティ。

  • 発行者: トークンを発行する当事者。

  • 有効期間: トークンは有効期間と変更可能な範囲が異なります。

  • プリンシパル: トークンで認証できるプリンシパル ID のタイプ。

次の表に、さまざまなタイプの ID トークンを示します。

トークンのタイプ 発行元 オーディエンス プリンシパル 存続期間
ユーザー ID トークン Google 認証サーバー OAuth/OIDC クライアント
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
1 時間
サービス アカウント ID トークン Google Cloud IAM 認可サーバー オーディエンスを自由に選択できる サービス アカウント 1 時間
Identity-Aware Proxy(IAP)アサーション IAP
  • バックエンド
  • App Engine アプリ
  • ユーザー(管理対象ユーザー)
  • ユーザー(一般ユーザー向けアカウント)
  • Workforce Identity プールのプリンシパル
10 分
SAML アサーション Google 認証サーバー SAML アプリ ユーザー(管理対象ユーザー) 10 分

ユーザー ID トークン

ユーザー ID トークンは、ユーザーを認証する JSON ウェブトークン(JWT)です。クライアントは、OIDC 認証フローを開始してユーザー ID トークンを取得できます。

ユーザー ID トークンは、Google JSON Web Key Set(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 エポック時間形式)。
hd 所有ドメイン

ユーザーの Cloud Identity アカウントまたは Google Workspace アカウントのプライマリ ドメイン。

このクレームは、ユーザーが管理対象ユーザー アカウントであり、クライアントが認証リクエストで hd パラメータを指定した場合にのみ存在します。

iss 発行元 トークンの発行者。常に https://accounts.google.com に設定されます。
sub 件名

一意の ID で識別される認証済みプリンシパル。

この ID は、 Directory API で公開されている ID と同じです。

ID トークンに含まれるクレームの正確なセットは、認証リクエストの scope パラメータによって異なります。

ユーザーが管理対象ユーザー アカウントかどうかを識別したり、ユーザーが属する Cloud Identity アカウントまたは Google Workspace アカウントを識別したりするには、クライアントは hd クレームを検査する必要があります。

ユーザー ID トークンは 1 時間有効で、取り消すことはできません。

サービス アカウントの ID トークン

サービス アカウント ID トークンは、サービス アカウントを認証する JSON Web Token(JWT)です。

サービス アカウントの JWTサービス アカウントの JWT アサーションとは異なり、サービス アカウントの ID トークンはサービス アカウント キーで署名されません。代わりに、サービス アカウント ID トークンは Google JSON Web Key Set(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 エポック時間形式)。
iss 発行元 トークンの発行者。常に https://accounts.google.com に設定されます。
sub 件名 トークンをリクエストしたサービス アカウント。一意の ID で識別されます。

ID トークンに含まれるクレームの正確なセットは、ID トークンのリクエスト方法によって異なります。たとえば、Compute Engine メタデータ サーバーによってリクエストされた ID トークンには、VM の ID をアサートする追加のクレームを含めることができます。IAM Credentials API を使用してリクエストされた ID トークンには、サービス アカウントのプロジェクトの組織 ID を含めることができます。

ユーザー ID トークンとは異なり、サービス アカウント ID トークンは hd クレームをサポートしていません。

サービス アカウントの ID トークンの有効期間は 1 時間で、取り消すことはできません。

Identity-Aware Proxy アサーション

Identity-Aware Proxy(IAP)アサーションは、IAP が x-goog-iap-jwt-assertion HTTP リクエスト ヘッダーで IAP で保護されたウェブ アプリケーションに渡す JSON Web Token(JWT)です。IAP アサーションはユーザーを認証し、リクエストが IAP によって承認されたことの証明としても機能します。

ユーザー ID トークンサービス アカウント ID トークンとは異なり、IAP アサーションは Google JSON Web Key Set(JWKS)を使用して署名されません。代わりに、IAP アサーションは別の JWKS(IAP JWKS)を使用して署名されます。この JWKS はグローバル リソースであり、次のユーザーを含むさまざまなタイプのユーザーに同じ署名鍵が使用されます。

  • 管理対象ユーザー アカウント

  • 一般ユーザー向けアカウント

  • サービス アカウント

  • Workforce Identity プールのプリンシパル

デコードされた 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 の代わりに Workforce Identity 連携を使用するように 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 アサーション

Security Assertion Markup Language(SAML)アサーションは、管理対象ユーザー アカウントを認証し、カスタム SAML アプリへのアクセスを承認します。SAML アサーションは Cloud Identity によって発行され、署名されます。また、管理対象ユーザー アカウントの認証にのみ使用できます。

グローバル キーを使用して署名される ID トークンとは異なり、SAML アサーションは Cloud Identity アカウントまたは 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 Identity アカウントまたは Google Workspace アカウントに固有です。
NameID 件名 認証されたプリンシパル。識別子の形式は、SAML アプリの構成によって異なります。

SAML アサーションに含まれる属性の正確なセットは、SAML アプリの構成によって異なります。

SAML アサーションは 10 分間有効で、取り消すことはできません。