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

プリンシパル アクセス境界(PAB)ポリシーを使用すると、一連のプリンシパルがアクセスできるリソースを制限できます。このページでは、既存のプリンシパル アクセス境界ポリシーを編集する方法と、プリンシパル アクセス境界ポリシーのポリシー バインディングを編集してポリシーの適用対象を変更する方法について説明します。

始める前に

  • 認証を設定します。

    Select the tab for how you plan to use the samples on this page:

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    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.

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

  • プリンシパル アクセス境界ポリシーの概要を確認します。

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

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

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

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

プリンシパル アクセス境界ポリシー バインディングの編集に必要なロール

プリンシパル アクセス境界ポリシーのポリシー バインディングを編集するために必要な権限は、ポリシーにバインドされているプリンシパル セットによって異なります。

プリンシパル アクセス境界ポリシーのポリシー バインディングを編集するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼します。

  • 組織に対するプリンシパル アクセス境界ユーザーroles/iam.principalAccessBoundaryUser
  • Workforce Identity 連携プールにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: ターゲットの Workforce Identity 連携プールに対する IAM Workforce プール管理者roles/iam.workforcePoolAdmin
  • Workload Identity 連携プールにバインドされたプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: ターゲットの Workforce Identity 連携プールを所有するプロジェクトに対する IAM Workload Identity プール管理者roles/iam.workloadIdentityPoolAdmin
  • Google Workspace ドメインにバインドされたプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: 組織に対する Workspace プール IAM 管理者roles/iam.workspacePoolAdmin
  • プロジェクトのプリンシパル セットにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: プロジェクトに対するプロジェクト IAM 管理者roles/resourcemanager.projectIamAdmin
  • フォルダのプリンシパル セットにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: フォルダに対するフォルダ IAM 管理者roles/resourcemanager.folderIamAdmin
  • 組織のプリンシパル セットにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: 組織に対する組織管理者roles/resourcemanager.organizationAdmin

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

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

必要な権限

プリンシパル アクセス境界ポリシーのポリシー バインディングを編集するには、次の権限が必要です。

  • 組織に対する iam.principalaccessboundarypolicies.bind
  • Workforce Identity 連携プールにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: Workforce Identity 連携プールに対する iam.workforcePools.updatePolicyBinding
  • Workload Identity 連携プールにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: 対象の Workforce Identity 連携プールを所有するプロジェクトに対する iam.workloadIdentityPools.updatePolicyBinding
  • Google Workspace ドメインにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: 組織に対する iam.workspacePools.updatePolicyBinding
  • プロジェクトのプリンシパル セットにバインドされたプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: プロジェクトに対する resourcemanager.projects.updatePolicyBinding
  • フォルダのプリンシパル セットにバインドされたプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: フォルダに対する resourcemanager.folders.updatePolicyBinding
  • 組織のプリンシパル セットにバインドされているプリンシパル アクセス境界ポリシーのポリシー バインディングを編集する: 組織に対する resourcemanager.organizations.updatePolicyBinding

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

既存のプリンシパル アクセス境界ポリシーを編集する

プリンシパル アクセス境界ポリシーにルールを追加する場合、プリンシパル アクセス境界ポリシーからルールを削除する場合、またはプリンシパル アクセス境界ポリシーのメタデータを変更する場合は、プリンシパル アクセス境界ポリシーを編集します。

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

コンソール

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

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

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

  3. 編集するプリンシパル アクセス境界ポリシーのポリシー ID をクリックします。

  4. [ポリシーの編集] をクリックします。

  5. ポリシーのルールを編集する手順は次のとおりです。

    1. 編集するルールをクリックします。
    2. ルールの説明またはルールに含まれるリソースを編集します。
    3. [完了] をクリックします。
  6. ポリシーからルールを削除するには、そのルールの行にある [ 削除] をクリックします。

  7. ポリシーの表示名を編集するには、[表示名] フィールドを編集します。

  8. ポリシーの適用バージョンを編集するには、[適用バージョン] リストをクリックして新しい値を選択します。

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

gcloud

gcloud beta iam principal-access-boundary-policies update コマンドは、既存のプリンシパル アクセス境界ポリシーを更新します。

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

  • PAB_POLICY_ID: 更新するプリンシパル アクセス境界ポリシーの ID(例: example-policy)。
  • ORG_ID: プリンシパル アクセス境界ポリシーを所有する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • FIELD_TO_UPDATE=UPDATED_VALUE: 更新するフィールドと、それに対応する更新後の値。

    ポリシーのフィールドを更新するために使用できるフラグの例を次に示します。

    • --display-name=DISPLAY_NAME: ポリシーの表示名を DISPLAY_NAME に置き換えます。
    • --details-enforcement-version=ENFORCEMENT_VERSION: ポリシーの適用バージョンENFORCEMENT_VERSION に更新します。
    • --details-rules=RULES_FILE.json: プリンシパル アクセス境界ポリシーのルールを RULES_FILE.json のルールに置き換えます。ルールファイルの形式については、プリンシパル アクセス境界ポリシーを作成するをご覧ください。

      このフラグを使用すると、--add-details-rules フラグは使用できません。

    • --add-details-rules=RULES_FILE: RULES_FILE.json のルールをポリシーの既存のルールに追加します。ルールファイルの形式については、プリンシパル アクセス境界ポリシーを作成するをご覧ください。

      このフラグを使用する場合、--details-rules フラグは使用できません。

    • --remove-details-rules=RULES_FILE: ポリシーの既存のルールから RULES_FILE.json のルールを削除します。ルールファイルの形式については、プリンシパル アクセス境界ポリシーを作成するをご覧ください。RULES_FILE.json のルールのいずれかに完全に一致するルールのみが削除されます。

      このフラグを使用する場合、--clear-rule-details フラグは使用できません。

    • --clear-details-rules: プリンシパル アクセス境界ポリシーからすべてのルールを消去します。

      このフラグを使用する場合、--remove-rule-details フラグは使用できません。

    プリンシパル アクセス境界ポリシーの更新に使用できるフラグの完全なリストについては、gcloud beta iam principal-access-boundary-policies update コマンド リファレンスをご覧ください。

  • FORMAT: レスポンスの形式。json または yaml を使用します。

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

Linux、macOS、Cloud Shell

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID \
    --organization=ORG_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows(PowerShell)

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID `
    --organization=ORG_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows(cmd.exe)

gcloud beta iam principal-access-boundary-policies update PAB_POLICY_ID ^
    --organization=ORG_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。オペレーションが完了すると、更新されたプリンシパル アクセス境界ポリシーがレスポンスに出力されます。

Request issued for: [example-policy]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374208720-6181fae5e2034-2d8a712b-5c92e5b9] to complete...done.
Updated principalAccessBoundaryPolicy [example-policy].
{
  "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
  "uid": "puid_13364150419245236225",
  "etag": "W/\"Gh/PcTdJD/AWHUhPW45kdw==\"",
  "displayName": "Updated display name",
  "createTime": "2024-05-07T00:05:48.295209Z",
  "updateTime": "2024-05-10T20:50:09.200421Z",
  "details": [
    "rules": {
      [
        "description": "Make principals eligible to access example.com"
        "resources": {
          "//cloudresourcemanager.googleapis.com/organizations/123456789012"
        },
        "effect": ALLOW
      ]
    },
    "enforcementVersion": "1"
  ]
}

REST

principalAccessBoundaryPolicies.patch メソッドは、既存のプリンシパル アクセス境界ポリシーを更新します。

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

  • ORG_ID: プリンシパル アクセス境界ポリシーを所有する組織の ID。組織 ID は数値で指定します(例: 123456789012)。
  • PAB_POLICY_ID: 更新するプリンシパル アクセス境界ポリシーの ID(例: example-policy)。
  • FIELDS_TO_UPDATE: 更新するフィールドのカンマ区切りリスト。更新するフィールドを指定しない場合、IAM は既存のポリシーをリクエスト本文のコンテンツで置き換えます。

    指定できる値は displayNamedetailsdetails.rulesdetails.rules.descriptiondetails.rules.resourcesdetails.rules.effectdetails.enforcementVersion です。

  • 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 がプリンシパル アクセス境界ポリシーを適用する権限が決まります。

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

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

HTTP メソッドと URL:

PATCH https://iam.googleapis.com/v3beta/organizations/ORG_ID/locations/global/principalAccessBoundaryPolicies/PAB_POLICY_ID?updateMask=FIELDS_TO_UPDATE

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

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

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

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715626721931-6185a7953ef76-76f80ee4-19cd1bf7",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3beta.OperationMetadata",
    "createTime": "2024-05-13T18:58:43.721277235Z",
    "target": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-policy",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3beta"
  },
  "done": false
}

プリンシパル アクセス境界ポリシーの適用対象を変更する

プリンシパル アクセス境界ポリシーのポリシー バインディングを作成した後、バインディングで設定したポリシー ID やプリンシパルは変更できません。そのため、プリンシパル アクセス境界ポリシーの適用対象を変更する場合は、次のいずれかを行う必要があります。

  • プリンシパル アクセス境界ポリシーが適用されるプリンシパルのセットを絞り込むには、ポリシー バインディングの条件を変更します。バインディングの条件を変更するには、ポリシー バインディングを編集します。
  • 追加のプリンシパル セットにプリンシパル アクセス境界ポリシーを適用するには、そのプリンシパル セットにポリシーをバインドする新しいポリシー バインディングを作成します。
  • プリンシパル セットからプリンシパル アクセス境界ポリシーを削除するには、ポリシーをプリンシパル セットにバインドするポリシー バインディングを削除します。

プリンシパル アクセス境界ポリシーの既存のポリシー バインディングを編集する

ポリシー バインディングを作成したら、バインディングを編集して、バインディングの条件やバインディングの表示名を変更できます。

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

コンソール

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

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

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

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

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

  5. 編集するバインディングの ID を見つけます。そのバインディングの行で、アクション)をクリックし、[バインディングを編集] をクリックします。

  6. バインディングの表示名を更新するには、[表示名] フィールドを編集します。

  7. バインディングに条件を追加する手順は次のとおりです。

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

    1. 条件の名前の横にある [ 条件を編集] をクリックします。
    2. 条件のタイトル、説明、式を更新します。
    3. [保存] をクリックします。
  9. 変更を保存するには、[保存] をクリックします。

gcloud

gcloud beta iam policy-bindings update コマンドは、既存のポリシー バインディングを更新します。

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

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

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

  • RESOURCE_ID: ポリシー バインディングが子であるプロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • FIELD_TO_UPDATE=UPDATED_VALUE: 更新するフィールドと、それに対応する更新後の値。

    ポリシー バインディングのフィールドを更新するために使用できるフラグの例を次に示します。

    • --display-name=DISPLAY_NAME: バインディングの表示名を DISPLAY_NAME に置き換えます。
    • --condition-description=CONDITION_DESCRIPTION: バインディングに条件がある場合は、条件の説明を CONDITION_DESCRIPTION に置き換えます。それ以外の場合は、指定された説明を使用して、バインディングに新しい条件を追加します。このフラグを使用して条件のないバインディングを更新する場合は、--condition-expression フラグも設定する必要があります。
    • --condition-expression=CONDITION_EXPRESSION: バインディングに条件がある場合は、条件の式を CONDITION_EXPRESSION に置き換えます。それ以外の場合は、指定された式を使用して、バインディングに新しい条件を追加します。
    • --condition-title=CONDITION_TITLE: バインディングに条件がある場合は、条件のタイトルを CONDITION_TITLE に置き換えます。そうでない場合は、指定したタイトルの新しい条件をバインディングに追加します。このフラグを使用して条件のないバインディングを更新する場合は、--condition-expression フラグも設定する必要があります。

    更新可能なフィールドの一覧については、gcloud beta iam policy-bindings update コマンド リファレンスをご覧ください。

  • FORMAT: レスポンスの形式。json または yaml を使用します。

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

Linux、macOS、Cloud Shell

gcloud beta iam policy-bindings update BINDING_ID \
    --RESOURCE_TYPE=RESOURCE_ID --location=global \
    --FIELD_TO_UPDATE=UPDATED_VALUE \
    --format=FORMAT

Windows(PowerShell)

gcloud beta iam policy-bindings update BINDING_ID `
    --RESOURCE_TYPE=RESOURCE_ID --location=global `
    --FIELD_TO_UPDATE=UPDATED_VALUE `
    --format=FORMAT

Windows(cmd.exe)

gcloud beta iam policy-bindings update BINDING_ID ^
    --RESOURCE_TYPE=RESOURCE_ID --location=global ^
    --FIELD_TO_UPDATE=UPDATED_VALUE ^
    --format=FORMAT

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。

Update request issued for: [my-binding]
Waiting for operation [organizations/123456789012/locations/global/operations/operation-1715374545618-6181fc272c6f9-55ff07f4-97d0ac76] to complete...done.
Updated policyBinding [my-binding].
{
  "createTime": "2024-05-06T18:08:24.729843Z",
  "displayName": "Updated display name",
  "etag": "W/\"xkdnPfTxoxyVqOwhQSJbMg==\"",
  "name": "organizations/123456789012/locations/global/policyBindings/example-binding",
  "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
  "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
  "policyUid": "puid_9519202237377675265",
  "target": {
    "principalSet": "//cloudresourcemanager.googleapis.com/organizations/123456789012"
  },
  "uid": "buid_9904260005517852673", 
  "updateTime": "2024-05-06T18:11:16.798841Z"
}

REST

policyBindings.patch メソッドは、既存のポリシー バインディングを更新します。

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

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

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

  • RESOURCE_ID: ポリシー バインディングが子であるプロジェクト、フォルダ、または組織の ID。プロジェクト ID は英数字からなる文字列です(例: my-project)。フォルダ ID と組織 ID は数値です(例: 123456789012)。
  • BINDING_ID: 更新するポリシー バインディングの ID(例: example-binding)。
  • FIELDS_TO_UPDATE: 更新するフィールドのカンマ区切りリスト。更新するフィールドを指定しない場合、IAM は既存のバインディングをリクエスト本文のコンテンツに置き換えます。

    指定できる値は displayNameconditioncondition.expressioncondition.titlecondition.description です。

  • DISPLAY_NAME: 省略可。人が読める形式のバインディングの説明(例: Example binding)。表示名は 63 文字以内にしてください。
  • CONDITION_DETAILS: 省略可。プリンシパル アクセス境界ポリシーが適用されるプリンシパル セット内のプリンシパルを指定する条件式。次のフィールドを含めます。

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

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

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

HTTP メソッドと URL:

POST https://iam.googleapis.com/v3beta/RESOURCE_TYPE/RESOURCE_ID/locations/global/policyBindings/BINDING_ID?updateMask=FIELDS_TO_UPDATE

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

{
  "displayName": DISPLAY_NAME,
  "condition": {
    CONDITION_DETAILS
  }
}

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

レスポンスには、リクエストを表す長時間実行オペレーションが含まれます。

{
  "name": "organizations/123456789012/locations/global/operations/operation-1715373159010-6181f6fcccfa7-dcd0055c-00c22cad",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v3beta.OperationMetadata",
    "createTime": "2024-05-10T20:32:39.254910121Z",
    "target": "organizations/123456789012/locations/global/policyBindings/example-binding",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v3beta"
  },
  "done": false
}

次のステップ