このページでは、プリンシパルが特定の Identity and Access Management(IAM)権限を使用できないようにする方法で、プリンシパルのアクセスを拒否する方法について説明します。
IAM では、拒否ポリシーを使用してアクセスを拒否します。各拒否ポリシーは、Google Cloud の組織、フォルダ、プロジェクトに関連付けられます。拒否ポリシーには拒否ルールが含まれています。このルールには、プリンシパルと、そのプリンシパルが使用できない権限のリストが記述されています。
拒否ポリシーは、IAM ポリシーとも呼ばれる許可ポリシーとは別のものです。許可ポリシーは、プリンシパルに IAM ロールを付与することで、リソースへのアクセスを許可します。
拒否ポリシーは、Google Cloud CLI または IAM v2
REST API を使用して管理できます。
始める前に
IAM API を有効にします。
認証を設定する。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
このページの gcloud CLI のサンプルは、次のいずれかの開発環境から使用できます。
Terraform
このページの Terraform サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。
Go
このページの Go サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。
Java
このページの Java サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。
Node.js
このページの Node.js サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。
Python
このページの Python サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google アカウントのローカル認証情報を作成します。
gcloud auth application-default login
詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
拒否ポリシーの概要を確認する。
必要なロール
拒否ポリシーの管理に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与の詳細については、アクセスの管理をご覧ください。
これらの事前定義ロールには、拒否ポリシーの管理に必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。
必要な権限
拒否ポリシーを管理するには、次の権限が必要です。
-
拒否ポリシーを表示する:
-
iam.denypolicies.get
-
iam.denypolicies.list
-
-
拒否ポリシーを作成、更新、削除する:
-
iam.denypolicies.create
-
iam.denypolicies.delete
-
iam.denypolicies.get
-
iam.denypolicies.update
-
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
拒否する権限を特定する
拒否ポリシーを作成する前に、拒否する権限と、これらの権限を拒否するプリンシパルを決定する必要があります。
拒否できるのは一部の権限です。拒否できる権限のリストについては、拒否ポリシーでサポートされる権限をご覧ください。
権限グループを使用して権限のセットを拒否できる場合もあります。詳しくは、権限グループをご覧ください。
拒否ポリシーは、v2
REST API で管理します。この REST API では、権限名に特別な形式が必要です。たとえば、IAM カスタムロールを作成する権限名は次のように指定します。
v1
API:iam.roles.create
v2
API:iam.googleapis.com/roles.create
接続ポイントを特定する
拒否ポリシーは組織、フォルダ、プロジェクトに関連付けられます。これらのリソースのいずれかに接続すると、そのプロジェクト、フォルダ、または組織内の下位レベルのすべてのリソースに拒否ポリシーが継承されます。拒否ポリシーを使用するには、拒否ポリシーが接続されているリソースの ID が必要です。これは接続ポイントと呼ばれます。この ID は、次の表のいずれかの形式を使用します。
接続ポイントの形式 | |
---|---|
組織 |
gcloud CLI の例:
REST API の例: |
フォルダ |
gcloud CLI の例:
REST API の例: |
プロジェクト |
gcloud CLI の例:
REST API の例: |
拒否ポリシーを作成する
組織、フォルダ、プロジェクトに拒否ポリシーを追加できます。各リソースには、最大 500 個の拒否ポリシーを設定できます。
拒否ポリシーには、次の項目を指定する拒否ルールが含まれています。
- 拒否する権限。
- これらの権限を拒否するプリンシパル。
省略可: 権限拒否が免除されるプリンシパル。
たとえば、グループに対する権限を拒否し、そのグループに属する特定のユーザーを除外できます。
省略可: プリンシパルが権限を使用できないタイミングを指定する条件式。拒否ポリシーの条件式ではリソースタグの関数のみを使用できます。他の関数と演算子はサポートされていません。
各リソースには、接続されている拒否ポリシー全体で最大 500 個の拒否ルールを設定できます。
拒否ポリシーはリソース階層から継承されます。たとえば、組織レベルで権限を拒否すると、その権限は組織内のフォルダとプロジェクト、および各プロジェクト内のサービス固有のリソースに対しても拒否されます。
拒否ポリシーは許可ポリシーをオーバーライドします。特定の権限を含むロールがプリンシパルに付与されていても、拒否ポリシーでプリンシパルがその権限を使用できないと示されている場合、プリンシパルは権限を使用できません。
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 にはv2
API 形式を使用します。 -
exceptionPrincipals
: 省略可。対象のプリンシパルがdeniedPrincipals
に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID にはv2
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 iam policies create
コマンドを実行します。
gcloud 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 iam policies create my-deny-policy \
--attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
--kind=denypolicies \
--policy-file=policy.json
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
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 にはv2
API 形式を使用します。 -
exceptionPrincipals
: 省略可。対象のプリンシパルがdeniedPrincipals
に含まれていても、指定された権限を使用できるプリンシパルのリスト。たとえば、このフィールドを使用して、拒否されたグループに属する特定のユーザーを例外にすることができます。プリンシパル ID にはv2
API 形式を使用します。 -
denialCondition
: 省略可。プリンシパルが権限を使用できないタイミングを指定する条件式。次のフィールドがあります。-
expression
: Common Expression Language(CEL)構文を使用する条件式。式では、リソースタグの評価に CEL 関数を使用する必要があります。他の関数や演算子はサポートされていません。 -
title
: 省略可。条件の目的の概要。 -
description
: 省略可。条件の詳しい説明。
-
拒否ルールの例については、一般的なユースケースをご覧ください。
-
HTTP メソッドと URL:
POST https://iam.googleapis.com/v2/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.v2.PolicyOperationMetadata", "createTime": "2022-06-28T19:06:12.455151Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.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": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-06-28T22:26:21.968687Z" "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] } }
レスポンスで長時間実行オペレーションを識別できます。長時間実行オペレーションのステータスで、オペレーションの完了を確認できます。詳細については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。
拒否ポリシーを一覧表示する
1 つのリソースに複数の拒否ポリシーを設定できます。リソースに接続されているすべての拒否ポリシーを一覧表示してから、各拒否ポリシーを表示して、ポリシーの拒否ルールを確認できます。
gcloud
リソースの拒否ポリシーを一覧表示するには、gcloud iam policies list
コマンドを実行します。
gcloud iam policies list \ --attachment-point=ATTACHMENT_POINT \ --kind=denypolicies \ --format=json
次の値を指定します。
-
ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。
たとえば、次のコマンドは、数値 ID が 123456789012
の組織に接続されている拒否ポリシーを一覧表示します。
gcloud iam policies list \
--attachment-point=cloudresourcemanager.googleapis.com/organizations/123456789012 \
--kind=denypolicies \
--format=json
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
REST
policies.listPolicies
メソッドは、リソースの拒否ポリシーを一覧表示します。
リクエストのデータを使用する前に、次のように置き換えます。
-
ENCODED_ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。
HTTP メソッドと URL:
GET https://iam.googleapis.com/v2/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": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-06-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": "2022-06-05T19:21:53.595455Z", "updateTime": "2022-06-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": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z" } ] }
拒否ポリシーを表示する
拒否ポリシーを表示して、拒否された権限や、それらの権限を使用できないプリンシパルを含む拒否ルールを確認できます。
gcloud
リソースの拒否ポリシーを取得するには、gcloud iam policies get
コマンドを実行します。
gcloud 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 iam policies get my-deny-policy \
--attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
--kind=denypolicies \
--format=json \
> ./policy.json
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
REST
policies.get
メソッドは、リソースの拒否ポリシーを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
-
ENCODED_ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。 POLICY_ID
: 拒否ポリシーの ID。
HTTP メソッドと URL:
GET https://iam.googleapis.com/v2/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": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-05T19:22:26.770543Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] }
拒否ポリシーを更新する
拒否ポリシーを作成した後、そのポリシーに含まれる拒否ルールと表示名を更新できます。
拒否ポリシーを更新するには、次の読み取り、変更、書き込みのパターンを使用します。
- ポリシーの現在のバージョンを読み取ります。
- 必要に応じてポリシーの情報を変更します。
- 更新したポリシーを書き込みます。
拒否ポリシーを読み取る
gcloud
リソースの拒否ポリシーを取得するには、gcloud iam policies get
コマンドを実行します。
gcloud 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 iam policies get my-deny-policy \
--attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
--kind=denypolicies \
--format=json \
> ./policy.json
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
REST
policies.get
メソッドは、リソースの拒否ポリシーを取得します。
リクエストのデータを使用する前に、次のように置き換えます。
-
ENCODED_ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。 POLICY_ID
: 拒否ポリシーの ID。
HTTP メソッドと URL:
GET https://iam.googleapis.com/v2/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": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-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 iam policies update
コマンドを実行します。
gcloud 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 iam policies update my-deny-policy \
--attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
--kind=denypolicies \
--policy-file=policy.json
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
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": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-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/v2/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.v2.PolicyOperationMetadata", "createTime": "2021-10-05T22:26:21.968687Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.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": "2022-06-05T19:22:26.770543Z", "updateTime": "2022-06-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 iam policies delete
コマンドを実行します。
gcloud 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 iam policies delete my-deny-policy \
--attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
--kind=denypolicies
Go
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Go API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Java
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Java API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Node.js
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Node.js API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
Python
IAM のクライアント ライブラリをインストールして使用する方法については、IAM クライアント ライブラリをご覧ください。詳細については、IAM Python API のリファレンス ドキュメントをご覧ください。
IAM で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、始める前にをご覧ください。
REST
policies.delete
メソッドは、リソースから拒否ポリシーを削除します。
リクエストのデータを使用する前に、次のように置き換えます。
-
ENCODED_ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。 POLICY_ID
: 拒否ポリシーの ID。-
ETAG
: 省略可。ポリシーのバージョン ID。存在する場合、この値はポリシーの現在のetag
値と一致させる必要があります。
HTTP メソッドと URL:
DELETE https://iam.googleapis.com/v2/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.v2.PolicyOperationMetadata", "createTime": "2021-10-05T19:45:00.133311Z" }, "response": { "@type": "type.googleapis.com/google.iam.v2.Policy", "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy", "kind": "DenyPolicy", "displayName": "My deny policy.", "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=", "createTime": "2022-06-28T19:06:12.455151Z", "updateTime": "2022-07-05T19:45:00.133311Z", "deleteTime": "2022-07-05T19:45:00.133311Z", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://goog/subject/lucian@example.com" ], "deniedPermissions": [ "iam.googleapis.com/roles.create" ] } } ] } }
レスポンスで長時間実行オペレーションを識別できます。長時間実行オペレーションのステータスで、オペレーションの完了を確認できます。詳細については、このページの長時間実行オペレーションのステータスを確認するをご覧ください。
長時間実行オペレーションのステータスを確認する
REST API またはクライアント ライブラリを使用する場合、拒否ポリシーの変更メソッドで長時間実行オペレーション(LRO)が返されます。長時間実行オペレーションは、リクエストのステータスを追跡し、ポリシーの変更が完了したかどうかを示します。
Go
このページのコードサンプルは、長時間実行オペレーションが完了するまで待ってから、その結果にアクセスする方法を示しています。
Java
このページのコードサンプルは、長時間実行オペレーションが完了するまで待ってから、その結果にアクセスする方法を示しています。
Node.js
このページのコードサンプルは、長時間実行オペレーションが完了するまで待ってから、その結果にアクセスする方法を示しています。
Python
このページのコードサンプルは、長時間実行オペレーションが完了するまで待ってから、その結果にアクセスする方法を示しています。
REST
policies.operations.get
メソッドは、長時間実行オペレーションのステータスを返します。
リクエストのデータを使用する前に、次のように置き換えます。
-
ENCODED_ATTACHMENT_POINT
: 拒否ポリシーが接続しているリソースの URL エンコード ID。この値の形式については、このページの接続ポイントを特定するをご覧ください。 -
OPERATION_ID
: オペレーションの ID。この ID は、元のリクエストに対するレスポンスでオペレーション名の一部として受け取ります。オペレーション名の末尾には 16 進数の値を使用します。例:89cb3e508bf1ff01
HTTP メソッドと URL:
GET https://iam.googleapis.com/v2/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 の形式を取得する。
- 拒否ポリシーに関するアクセス問題のトラブルシューティング方法を確認する。
- プリンシパルへのアクセスの拒否について学習する。