認証情報の構成をダウンロードしてアクセス権を付与する

このページでは、Workload Identity 連携とリソースへの直接アクセスまたはサービス アカウントの権限借用を使用して Google Cloud リソースにアクセスするようにワークロードを構成する方法について説明します。

エンドツーエンドのユースケース固有の手順については、AWS と AzureActive DirectoryGitHub、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)ロールを直接付与する方法を示しています。

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. バケットのリストで、ロールを付与するバケットの名前をクリックします。

  3. ページ上部にある [権限] タブを選択します。

  4. [ アクセス権を付与] ボタンをクリックします。

    [プリンシパルの追加] ダイアログが表示されます。

  5. [新しいプリンシパル] フィールドに、バケットへのアクセスが必要な ID を 1 つ以上入力します。

    サブジェクト

    principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT
    

    次のように置き換えます。

    • PROJECT_NUMBER: プロジェクト番号
    • POOL_ID: ワークロード プールの ID
    • SUBJECT: IdP からマッピングされた個々のサブジェクト(例: administrator@example.com

    グループ

    principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/group/GROUP
    

    次のように置き換えます。

    • PROJECT_NUMBER: プロジェクト番号
    • WORKLOAD_POOL_ID: ワークロード プールの ID
    • GROUP: 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: ワークロード プールの ID
    • ATTRIBUTE_NAME: IdP からマッピングされた属性のいずれか
    • ATTRIBUTE_VALUE: 属性の値
  6. [ロールを選択] プルダウン メニューからロールを選択します。選択したロールと付与する権限の簡単な説明がパネルに表示されます。

  7. [保存] をクリックします。

gcloud

gcloud CLI を使用してプロジェクトのリソースに IAM ロールを付与するには、次の操作を行います。

  1. リソースが定義されているプロジェクトのプロジェクト番号を取得します。

    gcloud projects describe $(gcloud config get-value core/project) --format=value\(projectNumber\)
    
  2. リソースへのアクセス権を付与します。

    gcloud CLI を使用して、特定の条件を満たす外部 ID に Workload Identity ユーザーロール(roles/iam.workloadIdentityUser)を付与するには、次のコマンドを実行します。

    サブジェクト

    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 プールのプール ID
    • SUBJECT: google.subjectマッピングされている属性の想定値
    • GROUP: google.groupsマッピングされている属性の想定値
    • ATTRIBUTE_NAME: 属性マッピングのカスタム属性の名前
    • ATTRIBUTE_VALUE: 属性マッピングのカスタム属性の値

    IAM 許可ポリシーをサポートする任意の Google Cloud リソースにロールを付与できます。

サービス アカウントの権限借用

  1. 外部ワークロードのサービス アカウントを作成するには、次の操作を行います。

    1. IAM, Security Token Service, and Service Account Credentials API を有効にします。

      API を有効にする

    2. ワークロードを表すサービス アカウントを作成します。ワークロードごとに専用のサービス アカウントを使用することをおすすめします。

      サービス アカウントは、Workload Identity プールと同じプロジェクトにある必要はありません。

    3. 外部 ID にアクセスを許可するリソースに対するアクセス権をサービス アカウントに付与します。

    4. サービス アカウントに Workload Identity ユーザーロール(roles/iam.workloadIdentityUser)を付与します。

    5. ワークロードを表すサービス アカウントを作成します。ワークロードごとに専用のサービス アカウントを使用することをおすすめします。

      サービス アカウントは、Workload Identity プールと同じプロジェクトにある必要はありませんが、サービス アカウントを含むプロジェクトを参照する必要があります。

  2. Google Cloud コンソールまたは gcloud CLI を使用してサービス アカウントの権限借用でフェデレーション ID へのアクセス権を付与するには、次の操作を行います。

    コンソール

    Google Cloud コンソールで、サービス アカウントを使用してフェデレーション ID に IAM ロールを付与する手順は次のとおりです。

    1. 次の手順で、権限借用の ID として機能するサービス アカウントを作成します。

      1. IAM, Security Token Service, and Service Account Credentials API を有効にします。

        API を有効にする

      2. ワークロードの ID を表すサービス アカウントを作成します。ワークロードごとに専用のサービス アカウントを使用することをおすすめします。

        サービス アカウントは、Workload Identity プールと同じプロジェクトにある必要はありませんが、IAM アクセス権を付与する場合は、サービス アカウントを含むプロジェクトを参照する必要があります。

      3. 外部 ID にアクセスを許可するリソースに対するアクセス権をサービス アカウントに付与します。

    2. サービス アカウントの権限借用を使用してアクセス権を付与する手順は次のとおりです。

      1. [Workload Identity プール] ページに移動します。

        [Workload Identity プール] に移動

      2. [アクセス権を付与] を選択します。

      3. [サービス アカウントにアクセス権を付与する] ダイアログで、[Grant access using Service Account impersonation] を選択します。

      4. [サービス アカウント] リストで、権限を借用する外部 ID のサービス アカウントを選択して、次の操作を行います。

      5. プール内のどの ID がサービス アカウントの権限を借用できるかを選択するには、次のいずれかを行います。

        • Workload Identity プールの特定の ID のみにサービス アカウントの権限借用を許可するには、[フィルタに一致する ID のみ] を選択します。

        • [属性名] リストで、フィルタリングする属性を選択します。

        • [属性値] フィールドに、属性の想定値を入力します。たとえば、属性マッピング google.subject=assertion.sub を使用する場合は、属性名を subject に設定します。属性値には、外部 ID プロバイダによって発行されたトークンの sub クレームの値を設定します。

      6. 構成を保存するには、[保存]、[閉じる] の順にクリックします。

    gcloud

    gcloud CLI を使用して、特定の条件を満たす外部 ID に Workload Identity ユーザーロール(roles/iam.workloadIdentityUser)を付与するには、次のコマンドを実行します。

    サブジェクト

    gcloud storage buckets add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \
        --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 SERVICE_ACCOUNT_EMAIL \
        --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 SERVICE_ACCOUNT_EMAIL \
        --role=roles/storage.objectViewer \
        --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE"

    次のように置き換えます。

    • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス
    • PROJECT_NUMBER: Workload Identity プールを含むプロジェクトのプロジェクト番号
    • POOL_ID: Workload Identity プールのプール ID
    • SUBJECT: google.subjectマッピングされている属性の想定値
    • GROUP: google.groupsマッピングされている属性の想定値
    • ATTRIBUTE_NAME: 属性マッピングのカスタム属性の名前
    • ATTRIBUTE_VALUE: 属性マッピングのカスタム属性の値

構成をダウンロードする

ワークロードがクライアント ライブラリにアクセスできるようにするには、まず、次の操作を行い、アプリケーションのデフォルト認証情報(ADC)をダウンロードして構成する必要があります。

  1. Google Cloud コンソールで、[Workload Identity プール] ページに移動します。

    [Workload Identity プール] に移動
  2. テーブルでプールを選択して、プールの詳細ページに移動します。

  3. [アクセス権を付与] をクリックします。

  4. [フェデレーション ID を使用してアクセス権を付与する(推奨)] を選択します。

  5. ワークロードがクライアント ライブラリにアクセスできるようにアプリケーションのデフォルト認証情報(ADC)をダウンロードするには、次の操作を行います。

    1. [構成をダウンロード] をクリックします。

    2. [アプリケーションの構成] ダイアログで、次の操作を行います。

      1. [プロバイダ] プルダウン リストでプロバイダを選択します。

      2. [OIDC token path] または [SAML assertion path] に、トークンまたはアサーションが存在するパスを入力します。

      3. [フォーマット タイプ] プルダウン リストで形式を選択します。

    3. [構成をダウンロード] をクリックし、ファイルを保存したパスをメモします。