トークンの種類

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

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

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

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

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

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

アクセス トークン

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

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

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

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

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

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

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

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

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

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

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

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

  • 形式: 一部のアクセス トークンは不透明です。つまり、独自の形式であり、検査できません。他のトークンは JSON Web Token としてエンコードされ、クライアントでデコードできます。
  • 有効期間: トークンによって有効期間と変更可能な範囲が異なります。

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

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

トークンのタイプ 形式 イントロスペクション可能 存続期間 取り消し可能
サービス アカウントのアクセス トークン 不透明 いいえ 5 分~12 時間 いいえ
サービス アカウントの JSON Web Token(JWT) JWT なし 5 分~1 時間 いいえ
連携アクセス トークン 不透明 いいえ 連携アクセス トークンをご覧ください。 いいえ
認証情報アクセス境界トークン 不透明 いいえ 認証情報アクセス境界トークンをご覧ください。 いいえ
クライアント発行の認証情報アクセス境界トークン 不透明 いいえ なし いいえ

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

サービス アカウントのアクセス トークンは、サービス アカウントを認証します。トークンは不透明を使用してイントロスペクションできます。

サービス アカウント アクセス トークンの場合、API は次のような出力を返します。

{
  "azp": "000000000000000000000",
  "aud": "000000000000000000000",
  "scope": "https://www.googleapis.com/auth/userinfo.email",
  "exp": "1744687132",
  "expires_in": "3568",
  "email": "service-account@example.s3ns.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 制約を構成する必要があります。

サービス アカウントの JSON Web Token

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

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

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

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

  2. それぞれのサービス アカウントのサービス アカウント キーを使用してペイロードに署名します。クライアントは、ユーザー管理のサービス アカウント キーを使用してペイロードをオフラインで署名するか、signJwt メソッドと Google 管理のサービス アカウント キーを使用してオンラインで署名できます。詳細については、自己署名 JSON Web Token を作成するをご覧ください。

デコードされたサービス アカウントの JWT は次のようになります。SIGNATURE はトークンの署名に置き換えられます。

{
  "alg": "RS256",
  "kid": "290b7bf588eee0c35d02bf1164f4336229373300",
  "typ": "JWT"
}.{
  "iss": "service-account@example.s3ns.iam.gserviceaccount.com",
  "sub": "service-account@example.s3ns.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.s3ns.iam.gserviceaccount.com",
  "sub": "service-account@example.s3ns.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 プール プリンシパルを認証する連携アクセス トークンと交換できます。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 クライアント ライブラリとアクセス境界仲介トークンを使用して、クライアント発行の認証情報アクセス境界トークンをローカルで作成できます。このトークンは定期的に更新する必要があります。

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

トークン付与トークン

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

  • 以前の認証を表します。

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

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

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

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

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

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

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

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

トークンのタイプ 発行元 利用されたアクセス トークンのタイプ プリンシパル 制限事項
連携更新トークン Cloud de Confiance by S3NS IAM 認可サーバー 連携アクセス トークン Workforce Identity プールのプリンシパル OAuth スコープ
連携認証コード Cloud de Confiance by S3NS IAM 認可サーバー 連携アクセス トークン Workforce Identity プールのプリンシパル OAuth スコープ
外部 JSON Web Token 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし
外部 SAML アサーションまたはレスポンス 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし
アマゾン ウェブ サービス(AWS)GetCallerIdentity トークン 外部 ID プロバイダ 連携アクセス トークン 外部プリンシパル なし

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

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

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

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

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

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

トークンのタイプ 形式 存続期間 取り消し可能 多用途での使用
連携更新トークン 不透明 可変。連携更新トークンを参照 いいえ はい
連携認証コード 不透明 10 分 いいえ いいえ
外部トークンまたは外部 JSON Web Token JWT ID プロバイダによって異なる ID プロバイダによって異なる はい
外部 SAML アサーションまたはレスポンス SAML ID プロバイダによって異なる ID プロバイダによって異なる はい
アマゾン ウェブ サービス(AWS)GetCallerIdentity トークン テキスト blob ID プロバイダによって異なる ID プロバイダによって異なる はい

連携更新トークン

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

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

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

連携認証コード

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

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

外部 JSON Web Token

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

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

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

Workload Identity 連携を使用すると、生成された連携アクセス トークンは、Workload Identity プール プリンシパルを認証します。

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

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

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

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

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

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

アマゾン ウェブ サービス(AWS)GetCallerIdentity トークン

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

ID トークン

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

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

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

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

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

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

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

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

サービス アカウントの 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.s3ns.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 トークンの有効期間は 1 時間で、取り消すことはできません。

Identity-Aware Proxy アサーション

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

IAP アサーションは、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": 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 分間有効で、取り消すことはできません。