このページでは、Workload Identity 連携とリソースへの直接アクセスまたはサービス アカウントの権限借用を使用して Google Cloud リソースにアクセスするようにワークロードを構成する方法について説明します。
エンドツーエンドのユースケース固有の手順については、AWS と Azure、Active Directory、GitHub、GitLab、その他のデプロイ パイプライン、Kubernetes の構成ガイドをご覧ください。
外部ワークロードが Google Cloud リソースにアクセスできるようにする
ワークロードに Google Cloud リソースへのアクセス権を付与するには、プリンシパルに直接リソースへのアクセス権を付与することをおすすめします。この場合、プリンシパルは連携ユーザーです。一部の Google Cloud プロダクトには、Google Cloud API の制限事項があります。ワークロードが制限付きの API エンドポイントを呼び出す場合は、サービス アカウントの権限借用を使用できます。この場合、プリンシパルは Google Cloud サービス アカウントであり、ID として機能します。リソースのサービス アカウントにアクセス権を付与します。
リソースへの直接アクセス
Google Cloud コンソールまたは gcloud CLI を使用して、リソースへの直接アクセス権を連携 ID に付与できます。
コンソール
Google Cloud コンソールでリソースに IAM ロールを直接付与するには、リソースのページに移動してロールを付与する必要があります。次の例は、Cloud Storage ページに移動し、Cloud Storage バケットでフェデレーション ID にストレージ オブジェクト閲覧者(roles/storage.objectViewer
)ロールを直接付与する方法を示しています。
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
バケットのリストで、ロールを付与するバケットの名前をクリックします。
ページ上部にある [権限] タブを選択します。
[add_box アクセス権を付与] ボタンをクリックします。
[プリンシパルの追加] ダイアログが表示されます。
[新しいプリンシパル] フィールドに、バケットへのアクセスが必要な ID を 1 つ以上入力します。
サブジェクト
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号POOL_ID
: ワークロード プールの IDSUBJECT
: IdP からマッピングされた個々のサブジェクト(例:administrator@example.com
)
グループ
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号WORKLOAD_POOL_ID
: ワークロード プールの IDGROUP
: IdP からマッピングされたグループ(例:administrator-group@example.com
)
属性
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号WORKLOAD_POOL_ID
: ワークロード プールの IDATTRIBUTE_NAME
: IdP からマッピングされた属性のいずれかATTRIBUTE_VALUE
: 属性の値
[ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。
[保存] をクリックします。
gcloud
gcloud CLI を使用してプロジェクトのリソースに IAM ロールを付与するには、次の操作を行います。
リソースが定義されているプロジェクトのプロジェクト番号を取得します。
gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
リソースへのアクセス権を付与します。
gcloud CLI を使用して、特定の条件を満たす外部 ID に Storage オブジェクト閲覧者ロール(
roles/storage.objectViewer
)を付与するには、次のコマンドを実行します。サブジェクト
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
グループ
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
属性
gcloud storage buckets add-iam-policy-binding BUCKET_ID \ --role=roles/storage.objectViewer \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
次のように置き換えます。
BUCKET_ID
: アクセス権を付与するバケットPROJECT_NUMBER
: Workload Identity プールを含むプロジェクトのプロジェクト番号POOL_ID
: Workload Identity プールのプール IDSUBJECT
:google.subject
にマッピングされている属性の想定値GROUP
:google.groups
にマッピングされている属性の想定値ATTRIBUTE_NAME
: 属性マッピングのカスタム属性の名前ATTRIBUTE_VALUE
: 属性マッピングのカスタム属性の値
IAM 許可ポリシーをサポートする任意の Google Cloud リソースにロールを付与できます。
サービス アカウントの権限借用
外部ワークロードのサービス アカウントを作成するには、次の操作を行います。
Enable the IAM, Security Token Service, and Service Account Credentials APIs.
ワークロードを表すサービス アカウントを作成します。ワークロードごとに専用のサービス アカウントを使用することをおすすめします。サービス アカウントは、Workload Identity プールと同じプロジェクトにある必要はありませんが、サービス アカウントを含むプロジェクトを参照する必要があります。
外部 ID にアクセスを許可するリソースに対するアクセス権をサービス アカウントに付与します。
サービス アカウントに Workload Identity ユーザーロール(
roles/iam.workloadIdentityUser
)を付与します。
Google Cloud コンソールまたは gcloud CLI を使用してサービス アカウントの権限借用でフェデレーション ID へのアクセス権を付与するには、次の操作を行います。
コンソール
Google Cloud コンソールで、サービス アカウントを使用してフェデレーション ID に IAM ロールを付与する手順は次のとおりです。
同じプロジェクトのサービス アカウント
同じプロジェクトのサービス アカウントに対してサービス アカウントの権限借用を使用してアクセス権を付与する手順は次のとおりです。
[Workload Identity プール] ページに移動します。
[アクセス権を付与] を選択します。
[サービス アカウントにアクセス権を付与する] ダイアログで、[Grant access using Service Account impersonation] を選択します。
[サービス アカウント] リストで、権限を借用する外部 ID のサービス アカウントを選択して、次の操作を行います。
プール内のどの ID がサービス アカウントの権限を借用できるかを選択するには、次のいずれかを行います。
Workload Identity プールの特定の ID のみにサービス アカウントの権限借用を許可するには、[フィルタに一致する ID のみ] を選択します。
[属性名] リストで、フィルタリングする属性を選択します。
[属性値] フィールドに、属性の想定値を入力します。たとえば、属性マッピング
google.subject=assertion.sub
を使用する場合は、属性名をsubject
に設定します。属性値には、外部 ID プロバイダによって発行されたトークンのsub
クレームの値を設定します。
構成を保存するには、[保存]、[閉じる] の順にクリックします。
別のプロジェクトのサービス アカウント
別のプロジェクトのサービス アカウントに対してサービス アカウントの権限借用を使用してアクセス権を付与する手順は次のとおりです。
[サービス アカウント] ページに移動します。
権限を借用するサービス アカウントを選択します。
[アクセスを管理] をクリックします。
[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、プール内でサービス アカウントの権限を借用する ID の次のプリンシパル ID のいずれかを入力します。
サブジェクト
principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号POOL_ID
: ワークロード プールの IDSUBJECT
: IdP からマッピングされた個々のサブジェクト(例:administrator@example.com
)
グループ
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号WORKLOAD_POOL_ID
: ワークロード プールの IDGROUP
: IdP からマッピングされたグループ(例:administrator-group@example.com
)
属性
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号WORKLOAD_POOL_ID
: ワークロード プールの IDATTRIBUTE_NAME
: IdP からマッピングされた属性のいずれかATTRIBUTE_VALUE
: 属性の値
プール別
principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
次のように置き換えます。
PROJECT_NUMBER
: プロジェクト番号WORKLOAD_POOL_ID
: ワークロード プールの ID
[ロールを選択] で、Workload Identity ユーザーのロール(
roles/iam.workloadIdentityUser
)を指定します。構成を保存するには、[保存] をクリックします。
gcloud
gcloud CLI を使用して、特定の条件を満たす外部 ID に Workload Identity ユーザーロール(roles/iam.workloadIdentityUser
)を付与するには、次のコマンドを実行します。
サブジェクト
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT"
グループ
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP"
属性
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \ --role=roles/iam.workloadIdentityUser \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"
次のように置き換えます。
構成をダウンロードする
ワークロードがクライアント ライブラリにアクセスできるようにするには、まず、次の操作を行い、アプリケーションのデフォルト認証情報(ADC)をダウンロードして構成する必要があります。
-
Google Cloud コンソールで、[Workload Identity プール] ページに移動します。
[Workload Identity プール] に移動 -
テーブルでプールを選択して、プールの詳細ページに移動します。
-
[アクセス権を付与] をクリックします。
-
[フェデレーション ID を使用してアクセス権を付与する(推奨)] を選択します。
-
ワークロードがクライアント ライブラリにアクセスできるようにアプリケーションのデフォルト認証情報(ADC)をダウンロードするには、次の操作を行います。
-
[構成をダウンロード] をクリックします。
-
[アプリケーションの構成] ダイアログで、次の操作を行います。
-
[プロバイダ] プルダウン リストでプロバイダを選択します。
-
[OIDC token path] または [SAML assertion path] に、トークンまたはアサーションが存在するパスを入力します。
[フォーマット タイプ] プルダウン リストで形式を選択します。
-
-
[構成をダウンロード] をクリックし、ファイルを保存したパスをメモします。
-