このページでは、有効期間の短いサービス アカウントの認証情報を作成する方法について説明します。これにより、サービス アカウントの権限を借用できます。作成するトークンの種類に応じて、有効期間の短いトークンは、サービス アカウントに関連付けられた ID(ID トークンの場合)または権限(アクセス トークンの場合)を提供します。
システム アーキテクチャで一連のトークン生成呼び出しを使用する必要がある場合は、複数のサービス アカウントで構成される委任チェーンを使用できます。ほとんどの場合、このページで説明するように直接的な方法で十分です。
始める前に
-
Enable the IAM and Service Account Credentials APIs:
gcloud services enable iam.googleapis.com
iamcredentials.googleapis.com 認証を設定します。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Go
ローカル開発環境でこのページの Go サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、Google Cloud の認証に関するドキュメントの ローカル開発環境の ADC を設定するをご覧ください。
Java
ローカル開発環境でこのページの Java サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、Google Cloud の認証に関するドキュメントの ローカル開発環境の ADC を設定するをご覧ください。
Node.js
ローカル開発環境でこのページの Node.js サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、Google Cloud の認証に関するドキュメントの ローカル開発環境の ADC を設定するをご覧ください。
Python
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、Google Cloud の認証に関するドキュメントの ローカル開発環境の ADC を設定するをご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
IAM サービス アカウントについて理解します。
サービス アカウントの権限借用について理解します。
必要なトークンの種類を理解し、次のセクションで説明されている必要な手順を実施します。
有効期間の短いアクセス トークンを作成する
ほとんどの Google API で、認証にアクセス トークンを利用できます。サービス アカウントの権限借用を使用してアクセス トークンを生成すると、アクセス トークンに更新トークンがありません。つまり、トークンの有効期限が切れた場合は、権限借用プロセスを繰り返して新しいトークンを生成する必要があります。
詳細については、アクセス トークンをご覧ください。
有効期間の短いアクセス トークンを作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、ユーザー アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する 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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@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:my-user@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 を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自のユーザー アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限保持サービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されます。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
がPRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)をCALLER_ACCOUNT
に付与します。PRIV_SA
に必要なロールを付与します。コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限保持サービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウントのプリンシパル ID(
CALLER_ACCOUNT
)を入力します。例:
my-user@example.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:my-user@example.com" ], "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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:my-user@example.com" ] } ] }
-
更新された許可ポリシーを書き込みます。
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:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "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
呼び出し元のユーザー アカウントで gcloud CLI にログインしていることを確認します。
gcloud auth print-access-token
コマンドを使用して、サービス アカウントのトークンを生成します。後述のコマンドデータを使用する前に、次のように置き換えます。
-
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
Java
Node.js
Python
OpenID Connect(OIDC)ID トークンを作成する
ID トークンは、OpenID Connect(OIDC)仕様に準拠しています。ID トークンは一部のサービスとアプリケーションで使用できます。
詳細については、ID トークンと Cloud Run または Cloud Run functions でホストされているアプリケーションの認証をご覧ください。
ID トークンを作成するには、次の操作を行います。
-
ID トークンを作成するには、サービス アカウントの OpenID Connect ID トークン作成者のロール(
roles/iam.serviceAccountOpenIdTokenCreator
)を使用します。これは、他の種類のトークンに使用するロールとは異なります。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、ユーザー アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する 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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@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:my-user@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 を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自のユーザー アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元アカウント(
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
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウントのプリンシパル ID(
CALLER_ACCOUNT
)を入力します。例:
my-user@example.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:my-user@example.com" ], "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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウントの OpenID Connect ID トークン作成者ロール(roles/iam.serviceAccountOpenIdTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "user:my-user@example.com" ] } ] }
-
更新された許可ポリシーを書き込みます。
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:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountOpenIdTokenCreator", "members": [ "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
呼び出し元のユーザー アカウントで gcloud CLI にログインしていることを確認します。
gcloud auth print-identity-token
コマンドを使用して、サービス アカウントのトークンを生成します。後述のコマンドデータを使用する前に、次のように置き換えます。
-
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 ウェブトークン(JWT)を作成する
自己署名 JSON Web Token(JWT)はさまざまな状況で役立ちます。たとえば、次のような場合です。
- 独自のアプリケーション間での安全な通信を行う。このシナリオでは、1 つのアプリケーションが、認証目的で別のアプリケーションによって確認できるトークンに署名できます。
- OAuth を使用しないサービス アカウントの認証の説明のように、Google API の呼び出しを認証する。
- API Gateway でデプロイされた API の認証を行う。
- ユーザー、アカウント、デバイスに関する任意のクレームを含む JWT に署名することにより、サービス アカウントを ID プロバイダとして扱う。
JWT を作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、ユーザー アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する 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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@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:my-user@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 を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自のユーザー アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限保持サービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されます。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
がPRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)をCALLER_ACCOUNT
に付与します。PRIV_SA
に必要なロールを付与します。コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限保持サービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウントのプリンシパル ID(
CALLER_ACCOUNT
)を入力します。例:
my-user@example.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:my-user@example.com" ], "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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:my-user@example.com" ] } ] }
-
更新された許可ポリシーを書き込みます。
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:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "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 は署名を作成するために使用できる、署名付き URL を含むさまざまな認証フローに必要な Cloud Storage オブジェクトです。署名の詳細については、Cloud Storage のドキュメントをご覧ください。
自己署名バイナリ オブジェクトを作成するには、次の操作を行います。
必要な権限を提供する
直接リクエストには、認証情報をリクエストする呼び出し元と、認証情報が作成されるサービス アカウントの 2 つの ID が含まれます。権限を設定する方法は、呼び出し元がサービス アカウントとして認証されるか、ユーザー アカウントとして認証されるかによって異なります。
ローカル開発環境で、このページで説明する 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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_SA
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@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:my-user@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 を使用して有効期間の短いトークンを生成する場合、またはローカル開発環境から有効期間の短いトークンを生成する場合は、ユーザー アカウントを使用してトークンを生成できます。多くの場合、独自のユーザー アカウントを使用できます。
ユーザー アカウントを使用して有効期間の短いトークンを生成する場合、次の ID が関係します。
呼び出し元アカウント(
CALLER_ACCOUNT
)このユーザー アカウントは、権限を保持しているサービス アカウントに有効期間の短い認証情報を生成するために使用されます。
権限保持サービス アカウント(
PRIV_SA
)このサービス アカウントには、有効期間の短いトークンに必要な IAM ロールが付与されます。これは、有効期間の短いトークンが作成されるサービス アカウントです。
CALLER_ACCOUNT
がPRIV_SA
に有効期間の短い認証情報を作成できるようにするには、PRIV_SA
に対するサービス アカウント トークン作成者ロール(roles/iam.serviceAccountTokenCreator
)をCALLER_ACCOUNT
に付与します。PRIV_SA
に必要なロールを付与します。コンソール
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- プロジェクトを選択します。
- 権限保持サービス アカウントのメールアドレス(
PRIV_SA
)をクリックします。 - [権限] タブをクリックします。
- [このサービス アカウントにアクセスできるプリンシパル] で、[ アクセスを許可] をクリックします。
-
呼び出し元のアカウントのプリンシパル ID(
CALLER_ACCOUNT
)を入力します。例:
my-user@example.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:my-user@example.com" ], "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:my-user@example.com" ] } ] }
サービス アカウントにロールを付与していない場合、レスポンスには
etag
値のみが含まれます。このetag
値を次のステップに含めます。 -
許可ポリシーを変更して、
CALLER_ACCOUNT
にサービス アカウント トークン作成者のロール(roles/iam.serviceAccountTokenCreator
)を付与します。たとえば、前の手順のサンプル レスポンスを変更するには、次のコードを追加します。
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "user:my-user@example.com" ] } ] }
-
更新された許可ポリシーを書き込みます。
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:my-user@example.com" ] }, { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "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" }
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-22 UTC。