リソースへのアクセスを拒否する

このページでは、プリンシパルが特定の Identity and Access Management(IAM)権限を使用できないようにする方法で、プリンシパルのアクセスを拒否する方法について説明します。

IAM では、拒否ポリシーを使用してアクセスを拒否します。各拒否ポリシーは、Google Cloud の組織、フォルダ、プロジェクトに関連付けられます。拒否ポリシーには、プリンシパルを識別し、プリンシパルが使用できない権限を一覧表示する拒否ルールが含まれています。

拒否ポリシーは、IAM ポリシーとも呼ばれる許可ポリシーとは別のものです。許可ポリシーは、プリンシパルに IAM ロールを付与することで、リソースへのアクセスを許可します。

拒否ポリシーは、Google Cloud CLI または IAM v2beta REST API を使用して管理できます。

始める前に

必要なロール

拒否ポリシーの管理に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

  • 拒否ポリシーを表示する: 拒否審査担当者(roles/iam.denyReviewer
  • 拒否ポリシーを表示、作成、更新、削除する: 拒否管理者(roles/iam.denyAdmin

ロールの付与の詳細については、アクセスの管理をご覧ください。

これらの事前定義ロールには、拒否ポリシーの管理に必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。

必要な権限

  • 拒否ポリシーを表示する:
    • iam.denypolicies.get
    • iam.denypolicies.list
  • 拒否ポリシーを作成、更新、削除する:
    • iam.denypolicies.create
    • iam.denypolicies.delete
    • iam.denypolicies.get
    • iam.denypolicies.update

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

拒否する権限を特定する

拒否ポリシーを作成する前に、拒否する権限と、これらの権限を拒否するプリンシパルを決定する必要があります。

すべての IAM 権限のサブセットを拒否できます。拒否できる権限のリストについては、拒否ポリシーでサポートされる権限をご覧ください。

拒否ポリシーは、v2beta REST API で管理します。この REST API では、権限名に特別な形式が必要です。たとえば、IAM カスタムロールを作成する権限名は次のように指定します。

  • v1 API: iam.roles.create
  • v2beta API: iam.googleapis.com/roles.create

接続ポイントを特定する

拒否ポリシーは組織、フォルダ、プロジェクトに関連付けられます。拒否ポリシーを使用するには、拒否ポリシーが接続されているリソースの ID が必要です。これは接続ポイントと呼ばれます。この ID は、次の表のいずれかの形式を使用します。

接続ポイントの形式
組織

cloudresourcemanager.googleapis.com/organizations/ORG_ID
ORG_ID は、数値の組織 ID に置き換えます。REST API の場合は、値全体を URL エンコードします。

gcloud CLI の例:
cloudresourcemanager.googleapis.com/organizations/123456789012

REST API の例:
cloudresourcemanager.googleapis.com%2Forganizations%2F123456789012

フォルダ

cloudresourcemanager.googleapis.com/folders/FOLDER_ID
FOLDER_ID は、数値のフォルダ ID に置き換えます。REST API の場合は、値全体を URL エンコードします。

gcloud CLI の例:
cloudresourcemanager.googleapis.com/folders/987654321098

REST API の例:
cloudresourcemanager.googleapis.com%2Ffolders%2F987654321098

プロジェクト

cloudresourcemanager.googleapis.com/projects/PROJECT_ID
PROJECT_ID は、英数字または数字のプロジェクト ID に置き換えます。REST API の場合は、値全体を URL エンコードします。

gcloud CLI の例:
cloudresourcemanager.googleapis.com/projects/my-project

REST API の例:
cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project

拒否ポリシーを作成する

組織、フォルダ、プロジェクトに拒否ポリシーを追加できます。各リソースには、最大 5 つの拒否ポリシーを設定できます。

拒否ポリシーには、次の項目を指定する拒否ルールが含まれています。

  • 拒否する権限。
  • これらの権限を拒否するプリンシパル。
  • 省略可: 権限拒否が免除されるプリンシパル。

    たとえば、グループに対する権限を拒否し、そのグループに属する特定のユーザーを除外できます。

  • 省略可: リソースのタグに基づいてプリンシパルが権限を使用できないタイミングを指定する条件式

拒否ポリシーはリソース階層から継承されます。たとえば、組織レベルで権限を拒否すると、その権限は組織内のフォルダとプロジェクト、および各プロジェクト内のサービス固有のリソースに対しても拒否されます。

拒否ポリシーは許可ポリシーをオーバーライドします。特定の権限を含むロールがプリンシパルに付与されていても、拒否ポリシーでプリンシパルがその権限を使用できないと示されている場合、プリンシパルは権限を使用できません。

gcloud

リソースの拒否ポリシーを作成するには、まず、ポリシーを含む JSON ファイルを作成します。拒否ポリシーの形式は次のとおりです。

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },
    {
      "denyRule": DENY_RULE_N
    }
  ]
}

次の値を指定します。

  • POLICY_NAME: 拒否ポリシーの表示名。
  • DENY_RULE_1DENY_RULE_2...DENY_RULE_N: ポリシーの拒否ルール。各拒否ルールには次のフィールドを含めることができます。

    • deniedPermissions: 指定されたプリンシパルが使用できない権限のリスト。これらの権限は、拒否ポリシーでサポートされている必要があります。
    • deniedPrincipals: 指定された権限を使用できないプリンシパルのリスト。プリンシパル ID には v2beta API 形式を使用します。
    • exceptionPrincipals: 省略可。対象のプリンシパルが deniedPrincipals に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID には v2beta API 形式を使用します。
    • denialCondition: 省略可。プリンシパルが権限を使用できないタイミングを指定する条件式。次のフィールドがあります。

    拒否ルールの例については、一般的なユースケースをご覧ください。

たとえば、次の拒否ポリシーには、ユーザー lucian@example.com に対する 1 つの権限を拒否する拒否ルールが 1 つ含まれています。

{
  "displayName": "My deny policy.",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

次に、gcloud beta iam policies create コマンドを実行します。

gcloud beta iam policies create POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --policy-file=POLICY_FILE

次の値を指定します。

  • POLICY_ID: 拒否ポリシーの ID。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_FILE: 拒否ポリシーを含む JSON ファイルのファイルパス。

デフォルトでは、このコマンドが成功すると、出力は表示されません。詳細なレスポンスを出力するには、コマンドに --format=json フラグを追加します。

たとえば、次のコマンドは、policy.json という名前のファイルを使用して、プロジェクト my-projectmy-deny-policy という拒否ポリシーを作成します。

gcloud beta iam policies create my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

REST

policies.createPolicy メソッドは、リソースに拒否ポリシーを作成します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_ID: 拒否ポリシーの ID。
  • POLICY_NAME: 拒否ポリシーの表示名。
  • DENY_RULE_1DENY_RULE_2...DENY_RULE_N: ポリシーの拒否ルール。各拒否ルールには次のフィールドを含めることができます。

    • deniedPermissions: 指定されたプリンシパルが使用できない権限のリスト。これらの権限は、拒否ポリシーでサポートされている必要があります。
    • deniedPrincipals: 指定された権限を使用できないプリンシパルのリスト。プリンシパル ID には v2beta API 形式を使用します。
    • exceptionPrincipals: 省略可。対象のプリンシパルが deniedPrincipals に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID には v2beta API 形式を使用します。
    • denialCondition: 省略可。プリンシパルが権限を使用できないタイミングを指定する条件式。次のフィールドがあります。

    拒否ルールの例については、一般的なユースケースをご覧ください。

HTTP メソッドと URL:

POST https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies?policyId=POLICY_ID

JSON 本文のリクエスト:

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },

    {
      "denyRule": DENY_RULE_N
    }
  ]
}

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2beta.PolicyOperationMetadata",
    "createTime": "2021-09-28T19:06:12.455151Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
    "createTime": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-09-28T22:26:21.968687Z"
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

レスポンスで長時間実行オペレーションを識別できます。長時間実行オペレーションのステータスで、オペレーションの完了を確認できます。詳細については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

拒否ポリシーを一覧表示する

1 つのリソースに最大 5 つの拒否ポリシーを設定できます。リソースに関連付けられているすべての拒否ポリシーを一覧表示してから、各拒否ポリシーを表示して、ポリシーの拒否ルールを確認できます。

gcloud

リソースの拒否ポリシーを一覧表示するには、gcloud beta iam policies list コマンドを実行します。

gcloud beta iam policies list \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

次の値を指定します。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

たとえば、次のコマンドは、数値 ID が 123456789012 の組織に接続されている拒否ポリシーを一覧表示します。

gcloud beta iam policies list \
    --attachment-point=cloudresourcemanager.googleapis.com/organizations/123456789012 \
    --kind=denypolicies \
    --format=json

REST

policies.listPolicies メソッドは、リソースの拒否ポリシーを一覧表示します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

HTTP メソッドと URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies

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

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

{
  "policies": [
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy",
      "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
      "kind": "DenyPolicy",
      "displayName": "My deny policy.",
      "createTime": "2021-09-28T19:06:12.455151Z",
      "updateTime": "2021-09-28T22:26:21.968687Z"
    },
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-2",
      "uid": "8465d710-ea20-0a08-d92c-b2a3ebf766ab",
      "kind": "DenyPolicy",
      "displayName": "My second deny policy.",
      "createTime": "2021-10-05T19:21:53.595455Z",
      "updateTime": "2021-10-05T19:21:53.595455Z"
    },
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-3",
      "uid": "ee9f7c2f-7e8c-b05c-d4e5-e03bfb2954e0",
      "kind": "DenyPolicy",
      "displayName": "My third deny policy.",
      "createTime": "2021-10-05T19:22:26.770543Z",
      "updateTime": "2021-10-05T19:22:26.770543Z"
    }
  ]
}

拒否ポリシーを表示する

拒否ポリシーを表示して、拒否された権限や、それらの権限を使用できないプリンシパルを含む拒否ルールを確認できます。

gcloud

リソースの拒否ポリシーを取得するには、gcloud beta iam policies get コマンドを実行します。

gcloud beta iam policies get POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

次の値を指定します。

  • POLICY_ID: 拒否ポリシーの ID。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

たとえば、次のコマンドはプロジェクト my-projectmy-deny-policy という名前の拒否ポリシーを取得し、policy.json というファイルに保存します。

gcloud beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get メソッドは、リソースの拒否ポリシーを取得します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_ID: 拒否ポリシーの ID。

HTTP メソッドと URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

拒否ポリシーを更新する

拒否ポリシーを作成した後、そのポリシーに含まれる拒否ルールと表示名を更新できます。

拒否ポリシーを更新するには、次の読み取り、変更、書き込みのパターンを使用します。

  1. ポリシーの現在のバージョンを読み取ります。
  2. 必要に応じてポリシーの情報を変更します。
  3. 更新したポリシーを書き込みます。

拒否ポリシーを読み取る

gcloud

リソースの拒否ポリシーを取得するには、gcloud beta iam policies get コマンドを実行します。

gcloud beta iam policies get POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

次の値を指定します。

  • POLICY_ID: 拒否ポリシーの ID。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

たとえば、次のコマンドはプロジェクト my-projectmy-deny-policy という名前の拒否ポリシーを取得し、policy.json というファイルに保存します。

gcloud beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get メソッドは、リソースの拒否ポリシーを取得します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_ID: 拒否ポリシーの ID。

HTTP メソッドと URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

拒否ポリシーを変更する

拒否ポリシーを変更するには、以前に IAM から読み取ったポリシーのコピーに変更を行います。表示名を更新することも、拒否ルールの追加、変更、削除を行うこともできます。更新されたポリシーを書き込むまで、変更は適用されません。

たとえば、既存の拒否ルールに権限を追加できます。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create",
          "iam.googleapis.com/roles.delete"
        ]
      }
    }
  ]
}

更新された拒否ポリシーを書き込む

ローカルで拒否ポリシーを変更したら、更新された拒否ポリシーを IAM に書き込む必要があります。

各拒否ポリシーには、ポリシー バージョンを識別する etag フィールドが含まれています。etag は、ポリシーを更新するたびに変更されます。更新されたポリシーを書き込むと、リクエスト内の etag は、IAM に保存されている現在の etag と一致させる必要があります。値が一致しない場合、リクエストは失敗します。この機能を使用すると、同時変更による上書きを防ぐことができます。

gcloud

リソースの拒否ポリシーを更新するには、gcloud beta iam policies update コマンドを実行します。

gcloud beta iam policies update POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --policy-file=POLICY_FILE

次の値を指定します。

  • POLICY_ID: 拒否ポリシーの ID。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_FILE: 拒否ポリシーを含む JSON ファイルのファイルパス。

デフォルトでは、このコマンドが成功すると、出力は表示されません。詳細なレスポンスを出力するには、コマンドに --format=json フラグを追加します。

たとえば、次のコマンドは、policy.json という名前のファイルを使用して、プロジェクト my-projectmy-deny-policy という拒否ポリシーを更新します。

gcloud beta iam policies update my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

REST

policies.update メソッドは、拒否ポリシーを更新します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_ID: 拒否ポリシーの ID。
  • POLICY: 更新された拒否ポリシー。

    たとえば、前の手順で説明したポリシーに権限を追加するには、POLICY を次のように置き換えます。

    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
      "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
      "kind": "DenyPolicy",
      "displayName": "My deny policy.",
      "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
      "createTime": "2021-10-05T19:22:26.770543Z",
      "updateTime": "2021-10-05T19:22:26.770543Z",
      "rules": [
        {
          "denyRule": {
            "deniedPrincipals": [
              "principal://goog/subject/lucian@example.com"
            ],
            "deniedPermissions": [
              "iam.googleapis.com/roles.create",
              "iam.googleapis.com/roles.delete"
            ]
          }
        }
      ]
    }

HTTP メソッドと URL:

PUT https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

JSON 本文のリクエスト:

POLICY

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8b2d0ab2daf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2alpha.PolicyOperationMetadata",
    "createTime": "2021-10-05T22:26:21.968687Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2alpha.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTgxNTIxNDE3NTYxNjQxODYxMTI=",
    "createTime": "2021-10-05T19:22:26.770543Z",
    "updateTime": "2021-10-05T22:26:21.968687Z",
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create",
            "iam.googleapis.com/roles.delete"
          ]
        }
      }
    ]
  }
}

レスポンスで長時間実行オペレーションを識別できます。長時間実行オペレーションのステータスで、オペレーションの完了を確認できます。詳細については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

拒否ポリシーを削除する

拒否ポリシーにルールを適用する必要がなくなった場合は、拒否ポリシーを削除できます。

必要に応じて、削除するポリシー バージョンの etag を指定できます。etag を指定する場合は、IAM によって保存されている現在の etag と一致させる必要があります。値が一致しない場合、リクエストは失敗します。この機能を使用すると、ポリシーの更新バージョンではなく、目的のポリシーを削除できます。

リクエストから etag を省略すると、IAM は無条件にポリシーを削除します。

gcloud

リソースから拒否ポリシーを削除するには、gcloud beta iam policies delete コマンドを実行します。

gcloud beta iam policies delete POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies

次の値を指定します。

  • POLICY_ID: 拒否ポリシーの ID。

  • ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

必要に応じて、フラグ --etag=ETAG を追加できます。ETAG は、拒否ポリシーの現在の etag 値に置き換えます。

デフォルトでは、このコマンドが成功すると、出力は表示されません。詳細なレスポンスを出力するには、コマンドに --format=json フラグを追加します。

たとえば、次のコマンドは、プロジェクト my-project から my-deny-policy という名前の拒否ポリシーを削除します。

gcloud beta iam policies delete my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies

REST

policies.delete メソッドは、リソースから拒否ポリシーを削除します。

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • POLICY_ID: 拒否ポリシーの ID。
  • ETAG: 省略可。ポリシーのバージョン ID。存在する場合、この値はポリシーの現在の etag 値と一致させる必要があります。

HTTP メソッドと URL:

DELETE https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID?etag=ETAG

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8223fe308bf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2beta.PolicyOperationMetadata",
    "createTime": "2021-10-05T19:45:00.133311Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
    "createTime": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-10-05T19:45:00.133311Z",
    "deleteTime": "2021-10-05T19:45:00.133311Z",
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

レスポンスで長時間実行オペレーションを識別できます。長時間実行オペレーションのステータスで、オペレーションの完了を確認できます。詳細については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。

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

REST API を使用する場合、拒否ポリシーの変更メソッドで長時間実行オペレーション(LRO)が返されます。長時間実行オペレーションは、リクエストのステータスを追跡し、ポリシーの変更が完了したかどうかを示します。長時間実行オペレーションをポーリングして、そのステータスをモニタリングできます。

長時間実行オペレーションをポーリングするには、まず現在のステータスを取得します。

REST

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

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

  • ENCODED_ATTACHMENT_POINT: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。

  • OPERATION_ID: オペレーションの ID。この ID は、元のリクエストに対するレスポンスでオペレーション名の一部として受け取ります。オペレーション名の末尾には 16 進数の値を使用します。例: 89cb3e508bf1ff01

HTTP メソッドと URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/operations/OPERATION_ID

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

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

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01",
  "done": true
}

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

次のステップ