このページでは、プリンシパルが特定の Identity and Access Management(IAM)権限を使用できないようにする方法で、プリンシパルのアクセスを拒否する方法について説明します。
IAM では、拒否ポリシーを使用してアクセスを拒否します。各拒否ポリシーは、Google Cloud の組織、フォルダ、プロジェクトに関連付けられます。拒否ポリシーには、プリンシパルを識別し、プリンシパルが使用できない権限を一覧表示する拒否ルールが含まれています。
拒否ポリシーは、IAM ポリシーとも呼ばれる許可ポリシーとは別のものです。許可ポリシーは、プリンシパルに IAM ロールを付与することで、リソースへのアクセスを許可します。
拒否ポリシーは、Google Cloud CLI または IAM v2beta
REST API を使用して管理できます。
始める前に
IAM 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 は、次の表のいずれかの形式を使用します。
接続ポイントの形式 | |
---|---|
組織 |
gcloud CLI の例:
REST API の例: |
フォルダ |
gcloud CLI の例:
REST API の例: |
プロジェクト |
gcloud CLI の例:
REST API の例: |
拒否ポリシーを作成する
組織、フォルダ、プロジェクトに拒否ポリシーを追加できます。各リソースには、最大 5 つの拒否ポリシーを設定できます。
拒否ポリシーには、次の項目を指定する拒否ルールが含まれています。
- 拒否する権限。
- これらの権限を拒否するプリンシパル。
省略可: 権限拒否が免除されるプリンシパル。
たとえば、グループに対する権限を拒否し、そのグループに属する特定のユーザーを除外できます。
拒否ポリシーはリソース階層から継承されます。たとえば、組織レベルで権限を拒否すると、その権限は組織内のフォルダとプロジェクト、および各プロジェクト内のサービス固有のリソースに対しても拒否されます。
拒否ポリシーは許可ポリシーをオーバーライドします。特定の権限を含むロールがプリンシパルに付与されていても、拒否ポリシーでプリンシパルがその権限を使用できないと示されている場合、プリンシパルは権限を使用できません。
gcloud
リソースの拒否ポリシーを作成するには、まず、ポリシーを含む JSON ファイルを作成します。拒否ポリシーの形式は次のとおりです。
{ "displayName": "POLICY_NAME", "rules": [ { "denyRule": DENY_RULE_1 }, { "denyRule": DENY_RULE_2 }, { "denyRule": DENY_RULE_N } ] }
次の値を指定します。
POLICY_NAME
: 拒否ポリシーの表示名。-
DENY_RULE_1
、DENY_RULE_2
、...DENY_RULE_N
: ポリシーの拒否ルール。各拒否ルールには次のフィールドを含めることができます。-
deniedPermissions
: 指定されたプリンシパルが使用できない権限のリスト。これらの権限は、拒否ポリシーでサポートされている必要があります。 -
deniedPrincipals
: 指定された権限を使用できないプリンシパルのリスト。プリンシパル ID にはv2beta
API 形式を使用します。 -
exceptionPrincipals
: 省略可。対象のプリンシパルがdeniedPrincipals
に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID にはv2beta
API 形式を使用します。 -
denialCondition
: 省略可。プリンシパルが権限を使用できないタイミングを指定する条件式。次のフィールドがあります。-
expression
: Common Expression Language(CEL)構文を使用する条件式。式では、リソースタグの評価に CEL 関数を使用する必要があります。他の関数や演算子はサポートされていません。 -
title
: 省略可。条件の目的の概要。 -
description
: 省略可。条件の詳しい説明。
-
拒否ルールの例については、一般的なユースケースをご覧ください。
-
たとえば、次の拒否ポリシーには、ユーザー 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-project
の my-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_1
、DENY_RULE_2
、...DENY_RULE_N
: ポリシーの拒否ルール。各拒否ルールには次のフィールドを含めることができます。-
deniedPermissions
: 指定されたプリンシパルが使用できない権限のリスト。これらの権限は、拒否ポリシーでサポートされている必要があります。 -
deniedPrincipals
: 指定された権限を使用できないプリンシパルのリスト。プリンシパル ID にはv2beta
API 形式を使用します。 -
exceptionPrincipals
: 省略可。対象のプリンシパルがdeniedPrincipals
に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID にはv2beta
API 形式を使用します。 -
denialCondition
: 省略可。プリンシパルが権限を使用できないタイミングを指定する条件式。次のフィールドがあります。-
expression
: Common Expression Language(CEL)構文を使用する条件式。式では、リソースタグの評価に CEL 関数を使用する必要があります。他の関数や演算子はサポートされていません。 -
title
: 省略可。条件の目的の概要。 -
description
: 省略可。条件の詳しい説明。
-
拒否ルールの例については、一般的なユースケースをご覧ください。
-
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-project
の my-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" ] } } ] }
拒否ポリシーを更新する
拒否ポリシーを作成した後、そのポリシーに含まれる拒否ルールと表示名を更新できます。
拒否ポリシーを更新するには、次の読み取り、変更、書き込みのパターンを使用します。
- ポリシーの現在のバージョンを読み取ります。
- 必要に応じてポリシーの情報を変更します。
- 更新したポリシーを書き込みます。
拒否ポリシーを読み取る
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-project
の my-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-project
の my-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
に設定されている場合、オペレーションは完了しており、オペレーションの取得を停止できます。
次のステップ
- 拒否ポリシーでサポートされている権限を確認する。
- 拒否ポリシーのプリンシパル ID の形式を取得する。
- 拒否ポリシーに関するアクセス問題のトラブルシューティング方法を確認する。
- プリンシパルへのアクセスの拒否について学習する。