このページでは、有効期間の短いサービス アカウントの認証情報を作成する方法について説明します。これにより、サービス アカウントの権限を借用できます。作成するトークンの種類に応じて、有効期間の短いトークンは、サービス アカウントに関連付けられた ID(ID トークンの場合)または権限(アクセス トークンの場合)を提供します。
システム アーキテクチャで一連のトークン生成呼び出しを使用する必要がある場合は、複数のサービス アカウントで構成される委任チェーンを使用できます。ほとんどの場合、このページで説明するように直接的な方法で十分です。
始める前に
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the IAM and Service Account Credentials APIs:
gcloud services enable iam.googleapis.com
iamcredentials.googleapis.com IAM サービス アカウントについて理解します。
サービス アカウントの権限借用について理解します。
必要なトークンの種類を理解し、次のセクションで説明されている必要な手順を実施します。
有効期間の短いアクセス トークンを作成する
ほとんどの Google API で、認証にアクセス トークンを利用できます。サービス アカウントの権限を借用してアクセス トークンを生成した場合、アクセス トークンに更新トークンがありません。つまり、トークンの有効期限が切れた場合は、権限借用プロセスを繰り返して新しいトークンを生成する必要があります。
詳細については、アクセス トークンをご覧ください。
有効期間の短いアクセス トークンを作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、Google アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する REST コマンドまたは gcloud CLI コマンドを実行する場合、呼び出し元をユーザー認証情報で表すことができます。Compute Engine で実行されているアプリケーションなどの自動ワークロードの場合、呼び出し元はサービス アカウントで表す必要があります。
サービス アカウント
呼び出し元のアプリケーションがサービス アカウントを ID として使用する場合、次のプリンシパルが関係します。
呼び出し元のサービス アカウント(
CALLER_SA
)このサービス アカウントは呼び出し元のアプリケーションを表し、有効期間の短い認証情報のリクエストを発行します。
-
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
PRIV_SA
に有効期間の短い認証情報を作成する権限を CALLER_SA
に付与するには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_SA
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウント(
CALLER_SA
)のメールアドレスを入力します。例:
demo@my-project.iam.gserviceaccount.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、サービス アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_SA
: 有効期間の短いトークンをリクエストするアプリケーションを表すサービス アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_SA
は、有効期間が短いトークンを作成するサービス アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
ユーザー認証情報
Google Cloud CLI を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自の Google アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
が PRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_ACCOUNT
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)のメールアドレスを入力します。例:
username@google.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、ユーザー アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_ACCOUNT
: 有効期間の短いトークンのリクエストに使用するユーザー アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_ACCOUNT
は、有効期間が短いトークンを作成するユーザー アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
アクセス トークンを生成する
gcloud CLI、REST API、または Cloud クライアント ライブラリと Google API クライアント ライブラリを使用して、OAuth 2.0 アクセス トークンを生成できます。
REST API を使用していて、トークンの有効期間を延長できるようにシステムが構成されている場合は、有効期間がデフォルトより長いトークンを作成できます。Google Cloud CLI では、トークンの有効期間の設定はサポートされていません。
以下のサンプルは、ローカル開発環境で使用するように設計されています。呼び出し元は、サービス アカウントではなくユーザー アカウントである必要があります。
サービス アカウントの OAuth 2.0 アクセス トークンを生成するには、次の手順を実施します。
gcloud
呼び出し元の Google アカウントとして Google Cloud CLI にログインします。
gcloud auth login CALLER_ACCOUNT
サービス アカウントのトークンを生成します。
gcloud auth print-access-token
コマンドで、サービス アカウントの OAuth 2.0 アクセス トークンを生成します。後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
Windows(PowerShell)
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
Windows(cmd.exe)
gcloud auth print-access-token --impersonate-service-account=PRIV_SA
次のようなレスポンスが返されます。
WARNING: This command is using service account impersonation. All API calls will be executed as [my-sa@my-project.iam.gserviceaccount.com]. ya29.c.b0AXv0zTPnzTnDV8F8Aj5Fgy46Yf2v_v8eZIoKq7xGpfbpXuy23aQ1693m3gAuE8AZga7w6kdagN7a9bfdDYbdeoGY0CMHOClsCwIdutL7k_RFC672lOCbUgF5hS8Iu2nCA8hle-11LJXBLmaxFmH08ZTBJLuDrWSNd8cYqGYFunSC1K1qLIPBF18tsa0hxVgKPucI8b1A9L8_MK1JGLGcr0n7-zY77_lmbcdODG3NmIbLOGWOutjJgqSO_YoeCKK2QTUZIp5PG7RkKlXWnmYJA9pEahzNoQrs5sWZctc2bia9af_ITzqqlXC9h1Kj5-me6e8rd734MJvpagqYazRk0gGWpMb03XmMGpgPc_FBp4pnX9rGOzW83SNpcDz8zeFO1Q0Bo3N7CuZougjRce0y8I2_4rtw5ME_nV3wrCWa..................................................................................................................................................................................................................................................................................................
-
REST
Service Account Credentials API の serviceAccounts.generateAccessToken
メソッドによって、サービス アカウントの OAuth 2.0 アクセス トークンが生成されます。
リクエストのデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 -
LIFETIME
: アクセス トークンが期限切れになるまでの秒数。例:300s
デフォルトでは、トークンの最大有効期間は 1 時間(3,600 秒)です。これらのトークンの最大有効期間を 12 時間(43,200 秒)まで延長するには、
constraints/iam.allowServiceAccountCredentialLifetimeExtension
リスト型制約が含まれる組織のポリシーにサービス アカウントを追加します。
HTTP メソッドと URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateAccessToken
リクエストの本文(JSON):
{ "scope": [ "https://www.googleapis.com/auth/cloud-platform" ], "lifetime": "LIFETIME" }
リクエストを送信するには、次のいずれかのオプションを展開します。
generateAccessToken
リクエストが成功した場合、レスポンスの本文には OAuth 2.0 アクセス トークンと有効期限が含まれます。expireTime
に達するまで、サービス アカウントの代わりに accessToken
をリクエストの認証に使用できます。
{ "accessToken": "eyJ0eXAi...NiJ9", "expireTime": "2020-04-07T15:01:23.045123456Z" }
Go
このサンプルコードを使用するには、権限保持サービス アカウントの権限借用に必要なロールをすでに付与している呼び出し元の Google アカウントのアプリケーションのデフォルト認証情報を設定する必要があります。
Java
このサンプルコードを使用するには、権限保持サービス アカウントの権限借用に必要なロールをすでに付与している呼び出し元の Google アカウントのアプリケーションのデフォルト認証情報を設定する必要があります。
Node.js
このサンプルコードを使用するには、権限保持サービス アカウントの権限借用に必要なロールをすでに付与している呼び出し元の Google アカウントのアプリケーションのデフォルト認証情報を設定する必要があります。
Python
このサンプルコードを使用するには、権限保持サービス アカウントの権限借用に必要なロールをすでに付与している呼び出し元の Google アカウントのアプリケーションのデフォルト認証情報を設定する必要があります。
OpenID Connect(OIDC)ID トークンを作成する
ID トークンは、OpenID Connect(OIDC)仕様に準拠しています。ID トークンは一部のサービスとアプリケーションで使用できます。
詳細については、ID トークンと Cloud Run または Cloud Functions でホストされているアプリケーションの認証をご覧ください。
ID トークンを作成するには、次の操作を行います。
-
ID トークンを作成するには、サービス アカウントの OpenID Connect ID トークン作成者のロール(
roles/iam.serviceAccountOpenIdTokenCreator
)を使用します。これは、他の種類のトークンに使用するロールとは異なります。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、Google アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する REST コマンドまたは gcloud CLI コマンドを実行する場合、呼び出し元をユーザー認証情報で表すことができます。Compute Engine で実行されているアプリケーションなどの自動ワークロードの場合、呼び出し元はサービス アカウントで表す必要があります。
サービス アカウント
呼び出し元のアプリケーションがサービス アカウントを ID として使用する場合、次のプリンシパルが関係します。
呼び出し元のサービス アカウント(
CALLER_SA
)このサービス アカウントは呼び出し元のアプリケーションを表し、有効期間の短い認証情報のリクエストを発行します。
-
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
有効期間の短い PRIV_SA
の認証情報を作成する権限を CALLER_SA
に付与するには、PRIV_SA
に対するサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を CALLER_SA
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウント(
CALLER_SA
)のメールアドレスを入力します。例:
demo@my-project.iam.gserviceaccount.com
-
サービス アカウントの OpenID Connect ID トークン作成者ロール(
roles/iam.serviceAccountOpenIdTokenCreator
)を選択します。 - [保存] をクリックして、サービス アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_SA
: 有効期間の短いトークンをリクエストするアプリケーションを表すサービス アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountOpenIdTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_SA
は、有効期間が短いトークンを作成するサービス アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
ユーザー認証情報
Google Cloud CLI を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自の Google アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
が PRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を CALLER_ACCOUNT
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)のメールアドレスを入力します。例:
username@google.com
-
サービス アカウントの OpenID Connect ID トークン作成者ロール(
roles/iam.serviceAccountOpenIdTokenCreator
)を選択します。 - [保存] をクリックして、ユーザー アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_ACCOUNT
: 有効期間の短いトークンのリクエストに使用するユーザー アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountOpenIdTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountOpenIdTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_ACCOUNT
は、有効期間が短いトークンを作成するユーザー アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
ID トークンを生成する
OpenID Connect(OIDC)ID トークンは、gcloud CLI、REST API、または Cloud クライアント ライブラリと Google API クライアント ライブラリを使用して生成できます。
以下のサンプルは、ローカル開発環境で使用するように設計されています。呼び出し元は、サービス アカウントではなくユーザー アカウントである必要があります。
OIDC ID トークンは 1 時間(3,600 秒)有効です。
サービス アカウントの Google 署名 OIDC ID トークンを生成します。
gcloud
呼び出し元の Google アカウントとして Google Cloud CLI にログインします。
gcloud auth login CALLER_ACCOUNT
サービス アカウントのトークンを生成します。
gcloud auth print-identity-token
コマンドは、サービス アカウントの OIDC ID トークンを生成します。後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 -
AUDIENCE_NAME
: トークンのオーディエンス。通常は、トークンのアクセスに使用されるアプリケーションまたはサービスの URL です。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
Windows(PowerShell)
gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
Windows(cmd.exe)
gcloud auth print-identity-token --impersonate-service-account=PRIV_SA --audiences="AUDIENCE_NAME"
次のようなレスポンスが返されます。
WARNING: This command is using service account impersonation. All API calls will be executed as [my-sa@my-project.iam.gserviceaccount.com]. eyJhbGciOiJSUzI1NiIsImtpZDNhMDg4ZDRmZmMjJkYTVmZTM5MDZjY2MiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ3d3cuZXhhbXBsJhenAiOiIxMTYzwNDYyMDk0ODIiLCJleHAiOjE2NTQ4ODU0MzEsImlhdCI6MTY1NDg4MTgzMSwiaXN6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIMDQ2MjA5NDgyIn0.F7mu8IHj5VQdu7ItFrnYAKyGd7YqXuOP_rFLc98q8BaFBycAF1zAQnSnwqnSUXba0UK9PDT_-IOry68qLwBObz4XlX9lk0ehpN0O0W9FcFToKLB6wefXXPd4h7xtuPe5KzmpSOqj2Qqv34HriGw00Nqd-oGSgNY_lZ4wGEf4rT4oQa_kEcrY57Q2G6pwd769BhgeFwoLi5aK_Cv2kvf_zfMszC-xlkP9zwWQ8XinJBwe-qcQBa4NTgrbueNtXsEjccBS366zmw
-
REST
Service Account Credentials API の serviceAccounts.generateIdToken
メソッドによって、サービス アカウントの OIDC ID トークンが生成されます。
リクエストのデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 -
AUDIENCE_NAME
: トークンのオーディエンス。通常は、トークンのアクセスに使用されるアプリケーションまたはサービスの URL です。
HTTP メソッドと URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:generateIdToken
リクエストの本文(JSON):
{ "audience": "AUDIENCE_NAME", "includeEmail": "true" }
リクエストを送信するには、次のいずれかのオプションを展開します。
generateId
リクエストが成功した場合、レスポンス本文には 1 時間有効な ID トークンが含まれます。サービス アカウントの代わりに token
をリクエストの認証に使用できます。
{ "token": "eyJ0eXAi...NiJ9" }
自己署名 JSON Web Token(JWT)を作成する
自己署名 JSON Web Token(JWT)はさまざまな状況で役立ちます。たとえば、次のような場合です。
- API Gateway でデプロイされた API の認証を行う。
- Google の認証ガイドに従って Google API の呼び出しを認証する。
- 独自のアプリケーション間での安全な通信を行う。このシナリオでは、1 つのアプリケーションが、認証目的で別のアプリケーションによって確認できるトークンに署名できます。
- ユーザー、アカウント、デバイスに関する任意のクレームを含む JWT に署名することにより、サービス アカウントを ID プロバイダとして扱う。
JWT を作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、Google アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する REST コマンドまたは gcloud CLI コマンドを実行する場合、呼び出し元をユーザー認証情報で表すことができます。Compute Engine で実行されているアプリケーションなどの自動ワークロードの場合、呼び出し元はサービス アカウントで表す必要があります。
サービス アカウント
呼び出し元のアプリケーションがサービス アカウントを ID として使用する場合、次のプリンシパルが関係します。
呼び出し元のサービス アカウント(
CALLER_SA
)このサービス アカウントは呼び出し元のアプリケーションを表し、有効期間の短い認証情報のリクエストを発行します。
-
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
PRIV_SA
に有効期間の短い認証情報を作成する権限を CALLER_SA
に付与するには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_SA
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウント(
CALLER_SA
)のメールアドレスを入力します。例:
demo@my-project.iam.gserviceaccount.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、サービス アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_SA
: 有効期間の短いトークンをリクエストするアプリケーションを表すサービス アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_SA
は、有効期間が短いトークンを作成するサービス アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
ユーザー認証情報
Google Cloud CLI を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自の Google アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
が PRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_ACCOUNT
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)のメールアドレスを入力します。例:
username@google.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、ユーザー アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_ACCOUNT
: 有効期間の短いトークンのリクエストに使用するユーザー アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_ACCOUNT
は、有効期間が短いトークンを作成するユーザー アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
JWT を生成する
自己署名 JWT を生成します。
REST
Service Account Credentials API の serviceAccounts.signJwt
メソッドでは、サービス アカウントのシステムで管理する秘密鍵を使用して JWT に署名します。
リクエストのデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 -
JWT_PAYLOAD
: 署名する JWT ペイロード。これは JWT クレームセットを含む JSON オブジェクトです。ご希望のユースケースに必要なクレームを含め、呼び出すサービスの検証要件を満たしてください。Google API を呼び出す場合は、クレーム要件について Google の認証ガイドをご覧ください。exp
(有効期限)クレームは、今後 12 時間以内にする必要があります。Google API を呼び出す場合は、exp
クレームは 1 時間以内に設定する必要があります。次の例のペイロードには、Google API を呼び出すクレームが含まれています。ここで、
EXP
は有効期限を表す整数タイムスタンプです。{ \"iss\": \"PRIV_SA\", \"sub\": \"PRIV_SA\", \"aud\": \"https://firestore.googleapis.com/\", \"iat\": 1529350000, \"exp\": EXP }
HTTP メソッドと URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signJwt
リクエストの本文(JSON):
{ "payload": "JWT_PAYLOAD" }
リクエストを送信するには、次のいずれかのオプションを展開します。
signJwt
リクエストが成功した場合、レスポンスの本文には、署名付きの JWT と JWT の署名に使用された署名鍵 ID が含まれています。サービス アカウントの代わりに、signedJwt
値を署名なしトークンとして使用してリクエストを直接認証できます。トークンは、リクエストで指定された有効期限まで有効です。
{ "keyId": "42ba1e...fc0a", "signedJwt": "eyJ0eXAi...NiJ9" }
自己署名バイナリ オブジェクト(blob)を作成する
自己署名バイナリ オブジェクト(blob)は、データの送信元がわかっているときにバイナリデータを送信する際に使用されます(blob は自己署名であるため)。blob は、署名を作成するために使用できる Cloud Storage オブジェクトで、署名付き URL を含むさまざまな認証フローで必要になります。署名の詳細については、Cloud Storage のドキュメントをご覧ください。
自己署名バイナリ オブジェクトを作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、Google アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する REST コマンドまたは gcloud CLI コマンドを実行する場合、呼び出し元をユーザー認証情報で表すことができます。Compute Engine で実行されているアプリケーションなどの自動ワークロードの場合、呼び出し元はサービス アカウントで表す必要があります。
サービス アカウント
呼び出し元のアプリケーションがサービス アカウントを ID として使用する場合、次のプリンシパルが関係します。
呼び出し元のサービス アカウント(
CALLER_SA
)このサービス アカウントは呼び出し元のアプリケーションを表し、有効期間の短い認証情報のリクエストを発行します。
-
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
PRIV_SA
に有効期間の短い認証情報を作成する権限を CALLER_SA
に付与するには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_SA
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウント(
CALLER_SA
)のメールアドレスを入力します。例:
demo@my-project.iam.gserviceaccount.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、サービス アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_SA
: 有効期間の短いトークンをリクエストするアプリケーションを表すサービス アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=serviceAccount:CALLER_SA --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "serviceAccount:CALLER_SA" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwXhCB4eyjY=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_SA
は、有効期間が短いトークンを作成するサービス アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:CALLER_SA" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
ユーザー認証情報
Google Cloud CLI を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自の Google アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限を保持しているサービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されています。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
が PRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)を CALLER_ACCOUNT
に付与します。
PRIV_SA
に必要なロールを付与します。
コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限を保持しているサービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元の Google アカウント(
CALLER_ACCOUNT
)のメールアドレスを入力します。例:
username@google.com
- サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を選択します。 - [保存] をクリックして、ユーザー アカウントにロールを付与します。
gcloud
gcloud iam service-accounts add-iam-policy-binding
コマンドで、サービス アカウントにロールを付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: トークンが生成される権限保持サービス アカウントのメールアドレス。 -
CALLER_ACCOUNT
: 有効期間の短いトークンのリクエストに使用するユーザー アカウントのメールアドレス。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud iam service-accounts add-iam-policy-binding PRIV_SA \ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(PowerShell)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ` --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
Windows(cmd.exe)
gcloud iam service-accounts add-iam-policy-binding PRIV_SA ^ --member=user:CALLER_ACCOUNT --role=roles/iam.serviceAccountTokenCreator --format=json
次のようなレスポンスが返されます。
Updated IAM policy for serviceAccount [PRIV_SA]. { "bindings": [ { "members": [ "user:CALLER_ACCOUNT" ], "role": "roles/iam.serviceAccountTokenCreator" } ], "etag": "BwX1ZbefjXU=", "version": 1 }
REST
-
PRIV_SA
の許可ポリシーを読み取ります。serviceAccounts.getIamPolicy
メソッドで、サービス アカウントの許可ポリシーを取得します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA:getIamPolicy
リクエストの本文(JSON):
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
-
更新された許可ポリシーを書き込みます。
serviceAccounts.setIamPolicy
メソッドは、サービス アカウントに更新後の許可ポリシーを設定します。リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID
: Google Cloud プロジェクト ID。プロジェクト ID は英数字からなる文字列です(例:my-project
)。-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 POLICY_VERSION
: 返されるポリシー バージョン。リクエストでは、最新のポリシー バージョン(ポリシー バージョン 3)を指定する必要があります。詳細については、ポリシーの取得時にポリシー バージョンを指定するをご覧ください。-
POLICY
: 設定するポリシーの JSON 表現。ポリシーの形式については、ポリシー リファレンスをご覧ください。たとえば、前の手順で示した許可ポリシーを設定するには、
POLICY
を次のように置き換えます。ここで、CALLER_ACCOUNT
は、有効期間が短いトークンを作成するユーザー アカウントです。{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:CALLER_ACCOUNT" ] } ] }
HTTP メソッドと URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/PRIV_SA
リクエストの本文(JSON):
{ "policy": POLICY }
リクエストを送信するには、次のいずれかのオプションを展開します。
レスポンスには、更新された許可ポリシーが含まれます。
自己署名 blob を生成する
サービス アカウントの自己署名 blob を生成します。
REST
Service Account Credentials API の serviceAccounts.signBlob
メソッドでは、サービス アカウントのシステムで管理する秘密鍵を使用して blob に署名します。
リクエストのデータを使用する前に、次のように置き換えます。
-
PRIV_SA
: 有効期間の短いトークンが作成される権限保持サービス アカウントのメールアドレス。 -
BLOB_PAYLOAD
: base64 でエンコードされたバイトの文字列。例:VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cu
。
HTTP メソッドと URL:
POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/PRIV_SA:signBlob
リクエストの本文(JSON):
{ "payload": "BLOB_PAYLOAD" }
リクエストを送信するには、次のいずれかのオプションを展開します。
signBlob
リクエストが成功した場合、レスポンスの本文には、署名 blob と blob の署名に使用された署名鍵 ID が含まれています。サービス アカウントの代わりに、signedBlob
値を署名なしトークンとして使用してリクエストを直接認証できます。トークンは、サービス アカウントのシステムで管理する秘密鍵が期限切れになるまで有効です。この鍵の ID はレスポンスの keyId
フィールドの値です。
{ "keyId": "42ba1e...fc0a", "signedBlob": "eyJ0eXAi...NiJ9" }