プリンシパル アクセス境界ポリシーの作成と適用

プリンシパル アクセス境界(PAB)ポリシーを使用すると、一連のプリンシパルがアクセスできるリソースを制限できます。このページでは、プリンシパル アクセス境界ポリシーを作成して適用する方法について説明します。

始める前に

プリンシパル アクセス境界ポリシーの作成に必要なロール

プリンシパル アクセス境界ポリシーの作成に必要な権限を取得するため、組織に対するプリンシパル アクセス境界管理者roles/iam.principalAccessBoundaryAdmin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

この事前定義ロールには、プリンシパル アクセス境界ポリシーの作成に必要な iam.principalaccessboundarypolicies.create 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

プリンシパル アクセス境界ポリシーの適用に必要なロール

プリンシパル アクセス境界ポリシーを適用するために必要な権限は、ポリシーを適用するプリンシパル セットによって異なります。

プリンシパル アクセス境界ポリシーを適用するために必要な権限を取得するには、次の IAM ロールを付与するように管理者に依頼してください。

  • 組織に対するプリンシパル アクセス境界ユーザーroles/iam.principalAccessBoundaryUser
  • プリンシパル アクセス境界ポリシーを Workforce Identity プールに適用する: ターゲットの Workforce Identity プールに対する IAM Workforce プール管理者roles/iam.workforcePoolAdmin
  • プリンシパル アクセス境界ポリシーを Workload Identity プールに適用する: ターゲットの Workload Identity プールを所有するプロジェクトに対する IAM Workload Identity プール管理者 roles/iam.workloadIdentityPoolAdmin
  • Workload Identity プールにプリンシパル アクセス境界ポリシーを適用する長時間実行オペレーションのステータスを取得する: ターゲットの Workload Identity プールを所有するプロジェクトに対する IAM オペレーション閲覧者roles/iam.operationViewer
  • Google Workspace ドメインにプリンシパル アクセス境界ポリシーを適用する: 組織に対する Workspace プール IAM 管理者roles/iam.workspacePoolAdmin
  • プリンシパル アクセス境界ポリシーをプロジェクトのプリンシパル セットに適用する: プロジェクトに対するプロジェクト IAM 管理者roles/resourcemanager.projectIamAdmin
  • プロジェクトのプリンシパル セットにプリンシパル アクセス境界ポリシーを適用する長時間実行オペレーションのステータスを取得する: プロジェクトに対する IAM オペレーション閲覧者roles/iam.operationViewer
  • プリンシパル アクセス境界ポリシーをフォルダのプリンシパル セットに適用する: フォルダに対するフォルダ IAM 管理者roles/resourcemanager.folderIamAdmin
  • プリンシパル アクセス境界ポリシーを組織のプリンシパル セットに適用する: 組織に対する組織管理者roles/resourcemanager.organizationAdmin

ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

これらの事前定義ロールには、プリンシパル アクセス境界ポリシーの適用に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

プリンシパル アクセス境界ポリシーを適用するには、次の権限が必要です。

  • 組織に対する iam.principalaccessboundarypolicies.bind
  • プリンシパル アクセス境界ポリシーを Workforce Identity 連携プールに適用する: ターゲットの Workforce Identity 連携プールに対する iam.workforcePools.createPolicyBinding
  • プリンシパル アクセス境界ポリシーを Workload Identity 連携プールに適用する: ターゲットの Workforce Identity 連携プールを所有するプロジェクトに対する iam.workloadIdentityPools.createPolicyBinding
  • Workload Identity プールにプリンシパル アクセス境界ポリシーを適用する長時間実行オペレーションのステータスを取得する: ターゲットの Workload Identity プールを所有するプロジェクトに対する iam.operations.get
  • プリンシパル アクセス境界ポリシーを Google Workspace ドメインに適用する: 組織に対する iam.workspacePools.createPolicyBinding
  • プロジェクトのプリンシパル セットにプリンシパル アクセス境界ポリシーを適用する: プロジェクトに対する resourcemanager.projects.createPolicyBinding
  • プロジェクトのプリンシパル セットにプリンシパル アクセス境界ポリシーを適用する長時間実行オペレーションのステータスを取得する: プロジェクトに対する iam.operations.get
  • プリンシパル アクセス境界ポリシーをフォルダのプリンシパル セットに適用する: フォルダに対する resourcemanager.folders.createPolicyBinding
  • 組織のプリンシパル セットにプリンシパル アクセス境界ポリシーを適用する: 組織に対する resourcemanager.organizations.createPolicyBinding

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

プリンシパル アクセス境界ポリシーを作成する

プリンシパル アクセス境界ポリシーは、 Trusted Cloud コンソール、gcloud CLI、IAM REST API を使用して作成できます。

コンソール

  1. Trusted Cloud コンソールで、[プリンシパル アクセス境界ポリシー] ページに移動します。

    [プリンシパル アクセス境界ポリシー] に移動

  2. プリンシパル アクセス境界ポリシーを作成する組織を選択します。

  3. [ ポリシーを作成] をクリックします。

  4. ポリシーにプリンシパル アクセス境界ルールを追加します。

    1. [ 境界ルールを追加] をクリックします。
    2. [説明] フィールドに、プリンシパル アクセス境界ポリシールールの説明を追加します。説明は 256 文字以内で指定できます。
    3. [リソース] セクションに、プリンシパルがアクセスできるようにする Resource Manager リソース(プロジェクト、フォルダ、組織)をすべて入力します。このポリシーの対象となるプリンシパルは、これらのリソースにアクセスできます。

      各プリンシパル アクセス境界ポリシーは、ポリシー内のすべてのルールで最大 500 個のリソースを参照できます。

    4. [完了] をクリックします。

    5. ポリシールールを追加するには、上記の手順を繰り返します。各プリンシパル アクセス境界ポリシーには、最大 500 個のルールを含めることができます。

  5. [ポリシー名] セクションに、ポリシーの名前を入力します。名前は 63 文字以下にしてください。

  6. [適用バージョン] リストで、ポリシーの適用バージョンを選択します。プリンシパル アクセス境界ポリシーのバージョンにより、IAM がプリンシパル アクセス境界ポリシーを適用する権限が決まります。

    適用バージョンの詳細については、プリンシパル アクセス境界の適用バージョンをご覧ください。

  7. [作成] をクリックします。

gcloud

gcloud iam principal-access-boundary-policies create コマンドは、プリンシパル アクセス境界ポリシーを作成します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • ORG_ID: プリンシパル アクセス境界ポリシーを作成する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • PAB_POLICY_ID: プリンシパル アクセス境界ポリシーの一意の ID(例: example-policy)。:
  • DISPLAY_NAME: 省略可。人が読める形式のプリンシパル アクセス境界ポリシーの説明(例: Example policy)。表示名は 63 文字以内にしてください。
  • FILE_PATH: プリンシパル アクセス境界ポリシールールの詳細を含む JSON ファイルのパス。このファイルの形式は次のとおりです。

    {
      "description": DESCRIPTION,
      "resources": [
        RESOURCES
      ],
      "effect": ALLOW
    }
        

    次の値を置き換えます。

    • DESCRIPTION: 省略可。プリンシパル アクセス境界ポリシールールの説明。説明は 256 文字以内で指定できます。
    • RESOURCES: プリンシパルがアクセスできるようにする Resource Manager リソース(プロジェクト、フォルダ、組織)のリスト。このポリシーの対象となるプリンシパルは、これらのリソースにアクセスできます。

      各プリンシパル アクセス境界ポリシーは、ポリシー内のすべてのルールで最大 500 個のリソースを参照できます。

  • ENFORCEMENT_VERSION: ポリシーの適用時に IAM が使用するプリンシパル アクセス境界ポリシーのバージョン。適用バージョンにより、IAM がプリンシパル アクセス境界ポリシーを適用する権限が決まります。

    指定できる値は 123latest です。

    適用バージョンの詳細については、プリンシパル アクセス境界の適用バージョンをご覧ください。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud iam principal-access-boundary-policies create PAB_POLICY_ID \
    --organization=ORG_ID --location=global \
    --display-name=DISPLAY_NAME --details-rules=FILE_PATH.json \
    --details-enforcement-version=ENFORCEMENT_VERSION

Windows(PowerShell)

gcloud iam principal-access-boundary-policies create PAB_POLICY_ID `
    --organization=ORG_ID --location=global `
    --display-name=DISPLAY_NAME --details-rules=FILE_PATH.json `
    --details-enforcement-version=ENFORCEMENT_VERSION

Windows(cmd.exe)

gcloud iam principal-access-boundary-policies create PAB_POLICY_ID ^
    --organization=ORG_ID --location=global ^
    --display-name=DISPLAY_NAME --details-rules=FILE_PATH.json ^
    --details-enforcement-version=ENFORCEMENT_VERSION

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。長時間実行オペレーションのステータスを取得する方法については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

Create request issued for: [example-policy]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715373988044-6181fa136df85-3b06a30a-4816d25b] to complete...done.
Created principalAccessBoundaryPolicy [example-policy].

REST

principalAccessBoundaryPolicies.create メソッドは、プリンシパル アクセス境界ポリシーを作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • ORG_ID: プリンシパル アクセス境界ポリシーを作成する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • PAB_POLICY_ID: プリンシパル アクセス境界ポリシーの一意の ID(例: example-policy)。
  • DISPLAY_NAME: 省略可。人が読める形式のプリンシパル アクセス境界ポリシーの説明(例: Example policy)。表示名は 63 文字以内にしてください。
  • PAB_RULES: プリンシパル アクセス境界ルールのリスト。影響を受けるプリンシパルがアクセスできるリソースを定義します。1 つのプリンシパル アクセス境界ポリシーには、最大 500 個のルールを含めることができます。各ルールの形式は次のとおりです。

    {
    "description": "DESCRIPTION",
    "resources": [
      RESOURCES
    ],
    "effect": ALLOW
    }

    次の値を置き換えます。

    • DESCRIPTION: 省略可。プリンシパル アクセス境界ポリシールールの説明。説明は 256 文字以内で指定できます。
    • RESOURCES: プリンシパルがアクセスできるようにする Resource Manager リソース(プロジェクト、フォルダ、組織)のリスト。このポリシーの対象となるプリンシパルは、これらのリソースにアクセスできます。

      各プリンシパル アクセス境界ポリシーは、ポリシー内のすべてのルールで最大 500 個のリソースを参照できます。

  • ENFORCEMENT_VERSION: ポリシーの適用時に IAM が使用するプリンシパル アクセス境界ポリシーのバージョン。適用バージョンにより、IAM がプリンシパル アクセス境界ポリシーを適用する権限が決まります。

    指定できる値は 123latest です。

    適用バージョンの詳細については、プリンシパル アクセス境界の適用バージョンをご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v3/organizations/ORG_ID/locations/global?principalAccessBoundaryPolicyId=PAB_POLICY_ID

リクエストの本文(JSON):

{
  "displayName": DISPLAY_NAME,
  "details": {
    "rules": [
      PAB_RULES
    ],
    "effect": ALLOW
    }
  ],
  "enforcementVersion": "ENFORCEMENT_VERSION"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。長時間実行オペレーションのステータスを取得する方法については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715373120647-6181f6d8371d2-83309b71-2b8a7532",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-05-10T20:32:00.898809495Z",
    "target": "organizations/123456789012/locations/global/policyBindings/example-policy",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": false
}

プリンシパル アクセス境界ポリシーをプリンシパル セットに適用する

プリンシパル アクセス境界ポリシーをプリンシパル セットに適用するには、ポリシーをプリンシパル セットにバインドするポリシー バインディング リソースを作成します。ポリシー バインディングを作成すると、バインディング内のプリンシパル アクセス境界ポリシーがバインディング内のプリンシパルに適用されます。

ポリシー バインディングは、 Trusted Cloud コンソール、gcloud CLI、IAM REST API を使用して作成できます。

コンソール

  1. Trusted Cloud コンソールで、[プリンシパル アクセス境界ポリシー] ページに移動します。

    [プリンシパル アクセス境界ポリシー] に移動

  2. バインディングを作成するプリンシパル アクセス境界ポリシーを所有する組織を選択します。

  3. バインディングを作成するプリンシパル アクセス境界ポリシーのポリシー ID をクリックします。

  4. [バインディング] タブをクリックし、 [バインディングを追加] をクリックします。

  5. バインドの詳細を入力します。

    1. 省略可: [表示名] フィールドに、バインディングの表示名を入力します。表示名は 63 文字以内にしてください。
    2. [バインディング ID] フィールドに、バインディングの一意の名前(example-binding など)を入力します。
    3. [ターゲット プリンシパル セット] セクションで、ポリシーをバインドするプリンシパル セットのタイプと ID を入力します。ポリシー バインディングの作成後にこの値を変更することはできません。

      各プリンシパル セットに含まれるプリンシパルの詳細については、サポートされているプリンシパル セットをご覧ください。

  6. 省略可: プリンシパル アクセス境界ポリシーを適用するプリンシパル セット内のプリンシパルを指定するには、バインディングに条件を追加します。

    1. [ 条件を追加] をクリックします。
    2. [タイトル] フィールドに、条件の目的の概要を入力します。
    3. 省略可: [説明] フィールドに、条件の詳細な説明を入力します。
    4. [] フィールドに、Common Expression Language(CEL)構文を使用する条件式を入力します。式は principal.type 属性または principal.subject 属性を参照する必要があります。他の属性はサポートされていません。
    5. [保存] をクリックします。
  7. バインディングを作成するには、[追加] をクリックします。

gcloud

gcloud iam policy-bindings create コマンドは、ポリシー バインディングを作成します。

後述のコマンドデータを使用する前に、次のように置き換えます。

  • BINDING_ID: ポリシー バインディングの一意の名前(例: example-binding)。
  • RESOURCE_TYPE: ポリシー バインディングの子である Resource Manager リソースのタイプ(プロジェクト、フォルダ、組織)。値 projectfolder、または organization を使用します。

    リソースタイプは、ポリシー バインディングで設定されたプリンシパルによって異なります。使用するリソースタイプを確認するには、サポートされているプリンシパル タイプをご覧ください。

  • RESOURCE_ID: ポリシー バインディングが子であるプロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • ORG_ID: プリンシパル セットにバインドするプリンシパル アクセス境界ポリシーを所有する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • PAB_POLICY_ID: プリンシパル セットにバインドするプリンシパル アクセス境界ポリシーの ID(例: example-pab-policy)。ポリシー バインディングの作成後にこの値を変更することはできません。
  • PRINCIPAL_SET: ポリシーをバインドするプリンシパル セット。有効なプリンシパル タイプの一覧については、サポートされているプリンシパル セットをご覧ください。ポリシー バインディングの作成後にこの値を変更することはできません。
  • DISPLAY_NAME: 省略可。人が読める形式のバインディングの説明(例: Example binding)。表示名は 63 文字以内にしてください。
  • CONDITION_DETAILS: 省略可。プリンシパル アクセス境界ポリシーが適用されるプリンシパル セット内のプリンシパルを指定する条件式。次のフィールドを含めます。

    • expression: Common Expression Language(CEL)構文を使用する条件式。式は principal.type 属性または principal.subject 属性を参照する必要があります。他の属性はサポートされていません。

      式には最大 10 個の論理演算子(&&||!)を含めることができ、最大 250 文字の長さにすることができます。

    • title: 省略可。条件の目的の概要。
    • description: 省略可。条件の詳しい説明。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud iam policy-bindings create BINDING_ID \
    --RESOURCE_TYPE=RESOURCE_ID --location=global \
    --policy="organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID" \
    --target-principal-set=PRINCIPAL_SET_ID \
    --display-name=DISPLAY_NAME \
    CONDITION_DETAILS

Windows(PowerShell)

gcloud iam policy-bindings create BINDING_ID `
    --RESOURCE_TYPE=RESOURCE_ID --location=global `
    --policy="organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID" `
    --target-principal-set=PRINCIPAL_SET_ID `
    --display-name=DISPLAY_NAME `
    CONDITION_DETAILS

Windows(cmd.exe)

gcloud iam policy-bindings create BINDING_ID ^
    --RESOURCE_TYPE=RESOURCE_ID --location=global ^
    --policy="organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID" ^
    --target-principal-set=PRINCIPAL_SET_ID ^
    --display-name=DISPLAY_NAME ^
    CONDITION_DETAILS

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。長時間実行オペレーションのステータスを取得する方法については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

Create request issued for: [example-binding]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374545618-6181fc272c6f9-55ff07f4-97d0ac76] to complete...done.
Created policyBinding [example-binding].

REST

policyBindings.create メソッドはポリシー バインディングを作成します。

リクエストのデータを使用する前に、次のように置き換えます。

  • RESOURCE_TYPE: ポリシー バインディングの子である Resource Manager リソースのタイプ(プロジェクト、フォルダ、組織)。値 projectsfolders、または organizations を使用します。

    リソースタイプは、ポリシー バインディングで設定されたプリンシパルによって異なります。使用するリソースタイプを確認するには、サポートされているプリンシパル タイプをご覧ください。

  • RESOURCE_ID: ポリシー バインディングが子であるプロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • BINDING_ID: ポリシー バインディングの一意の名前(例: example-binding)。
  • DISPLAY_NAME: 省略可。人が読める形式のバインディングの説明(例: Example binding)。表示名は 63 文字以内にしてください。
  • PRINCIPAL_SET: ポリシーをバインドするプリンシパル セット。有効なプリンシパル タイプの一覧については、サポートされているプリンシパル セットをご覧ください。ポリシー バインディングの作成後にこの値を変更することはできません。
  • ORG_ID: プリンシパル セットにバインドするプリンシパル アクセス境界ポリシーを所有する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • PAB_POLICY_ID: プリンシパル セットにバインドするプリンシパル アクセス境界ポリシーの ID(例: example-pab-policy)。ポリシー バインディングの作成後にこの値を変更することはできません。
  • CONDITION_DETAILS: 省略可。プリンシパル アクセス境界ポリシーが適用されるプリンシパル セット内のプリンシパルを指定する条件式。次のフィールドを含めます。

    • expression: Common Expression Language(CEL)構文を使用する条件式。式は principal.type 属性または principal.subject 属性を参照する必要があります。他の属性はサポートされていません。

      式には最大 10 個の論理演算子(&&||!)を含めることができ、最大 250 文字の長さにすることができます。

    • title: 省略可。条件の目的の概要。
    • description: 省略可。条件の詳しい説明。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v3/RESOURCE_TYPE/RESOURCE_ID/locations/global/policyBindings?policyBindingId=BINDING_ID

リクエストの本文(JSON):

{
  "displayName": DISPLAY_NAME,
  "target": {
    "principalSet": PRINCIPAL_SET
  },
  "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
  "policy": "organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID",
  "condition": {
    CONDITION_DETAILS
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。長時間実行オペレーションのステータスを取得する方法については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715373120647-6181f6d8371d2-83309b71-2b8a7532",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-05-10T20:32:00.898809495Z",
    "target": "organizations/123456789012/locations/global/policyBindings/example-binding",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": false
}

長時間実行オペレーションのステータスを確認する

REST API またはクライアント ライブラリを使用する場合、プリンシパル アクセス境界ポリシーまたはバインディングを変更するメソッドで長時間実行オペレーション(LRO)が返されます。長時間実行オペレーションは、リクエストのステータスを追跡し、ポリシーまたはバインディングの変更が完了したかどうかを示します。

REST

operations.get メソッドは、長時間実行オペレーションのステータスを返します。

リクエストのデータを使用する前に、次のように置き換えます。

  • OPERATION_NAME: オペレーションの完全な名前。この名前は、元のリクエストに対するレスポンスで受け取ります。

    オペレーション名の形式は次のとおりです。

          RESOURCE_TYPE/RESOURCE_ID/locations/global/operations/OPERATION_ID
        

HTTP メソッドと URL:

GET https://iam.googleapis.com/v3/OPERATION_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "organizations/314340013352/locations/global/operations/operation-1732752311821-627edd607a3df-9a62cdea-2a7d9f07",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3.OperationMetadata",
    "createTime": "2024-11-28T00:05:12.006289686Z",
    "endTime": "2024-11-28T00:05:12.192141801Z",
    "target": "organizations/314340013352/locations/global/principalAccessBoundaryPolicies/example-policy",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v3"
  },
  "done": true,
  "response": {
    PAB_POLICY
  }
}

オペレーションの done フィールドが存在しない場合は、オペレーションを繰り返し取得して、ステータスのモニタリングを続行します。各リクエストの間には、切り捨て型指数バックオフを使用して遅延時間を設けてください。done フィールドが true に設定されている場合、オペレーションは完了しており、オペレーションの取得を停止できます。

次のステップ