このページでは、ドライラン モードの組織のポリシーを使用して、組織のポリシーの変更が適用される前に、それがワークフローにどのような影響を与えるかをモニタリングする方法について説明します。
ドライラン モードの組織のポリシーは、他の組織のポリシーと同様に作成、適用され、ポリシーの違反は監査ログに記録されますが、違反アクションは拒否されません。
準備
ドライラン モードで組織のポリシーを使用するには、Google Cloud プロジェクトに対して課金を有効にする必要があります。プロジェクトに対する課金が有効になっているかどうかの確認については、プロジェクトの課金ステータスを確認するをご覧ください。
組織のポリシーと制約が何であるかとどう機能するかの詳細については、組織のポリシーのサービスの概要をご覧ください。
必要なロール
組織のポリシーを管理するために必要な権限を取得するには、組織に対する組織ポリシー管理者(roles/orgpolicy.policyAdmin
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
この事前定義ロールには、組織のポリシーを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
組織のポリシーを管理するには、次の権限が必要です。
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
制限事項
ドライランの組織のポリシーで使用できるのは、以下の組織のポリシーの制約のみです。
他の制約を使用してドライラン モードで組織のポリシーを作成しようとすると、エラーになります。
ドライラン モードで組織のポリシーを作成する
リスト型制約
リスト型制約のドライラン モードで組織のポリシーを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。次の例は、gcp.restrictServiceUsage
リスト型制約の効果を監査するドライラン モードの組織のポリシーを作成する方法を示しています。
コンソール
Google Cloud Console で、[組織のポリシー] ページに移動します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。
[ドライラン] タブを選択します。
[ドライラン ポリシーを管理] をクリックします。
[ドライラン ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。
[ポリシーの適用] で、[置き換え] をクリックします。
[ルールを追加] をクリックします。
[ポリシーの値] で [カスタム] を選択します。
[ポリシーの種類] で [拒否] を選択します。
[カスタム値] ボックスに
compute.googleapis.com
を入力して、[完了] をクリックします。カスタム制約の場合は、[変更内容をテスト] をクリックして、この組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。[ポリシーを設定] をクリックして、ライブポリシーを設定することもできます。
組織のポリシーの制約の [ドライラン] タブに移動すると、ドライラン モードの組織のポリシーのステータスを確認できます。
ドライラン モードで組織のポリシーが適用されているプロジェクトの場合は、[拒否ログを表示] をクリックすると監査ログを表示できます。この組織のポリシーの場合、リソースサービスの使用を制限する制約が適用され compute.googleapis.com
を拒否しているかのように、監査ログに違反が表示されます。
gcloud
ドライラン モードで組織のポリシーを作成するには、dryRunSpec
で制約を定義する YAML ファイルを作成します。例:
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage dryRunSpec: rules: - values: deniedValues: - compute.googleapis.com
以下を置き換えます。
RESOURCE_TYPE
はorganizations
、folders
、またはprojects
に置き換えます。RESOURCE_ID
は、RESOURCE_TYPE
で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。
この組織のポリシーでは gcp.restrictServiceUsage
制約は適用されませんが、監査ログにはそうしたかのように違反が表示されます。
spec
と dryRunSpec
の両方を定義する場合、同じ YAML ファイル内にライブの組織のポリシーとドライランの組織のポリシーを設定できます。次に例を示します。
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage spec: rules: - values: allowedValues: - container.googleapis.com dryRunSpec: rules: - values: allowedValues: - compute.googleapis.com - appengine.googleapis.com
ドライラン モードの組織のポリシーを適用するには、org-policies set policy
コマンドを使用します。ドライラン モードの既存の組織のポリシーを新しい制約で更新するには、--update-mask
フラグを使用します。次に例を示します。
gcloud org-policies set-policy POLICY_PATH \ --update-mask=UPDATE_MASK
以下を置き換えます。
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。UPDATE_MASK
は、spec
に置き換えてライブポリシーのみを更新するか、dryRunSpec
に置き換えてドライラン モードで組織のポリシーのみを更新します。*
を使用して、spec
フィールドとdryRunSpec
フィールドの両方を更新することもできます。既存の組織のポリシーの更新時にこのフィールドが設定されていない場合、このコマンドはエラーになり、組織のポリシーは更新されません。
ドライラン モードで組織のポリシーが設定されていることは、org-policies describe
コマンドを使用して確認できます。dryRunSpec
フィールドは、組織のポリシー内に存在している場合のみ表示されます。
この組織のポリシーでは、container.googleapis.com
のみを許可するように gcp.restrictServiceUsage
制約を適用します。ただし、監査ログには compute.googleapis.com
と appengine.googleapis.com
の違反も表示されます。
ブール型制約
ブール型制約のドライラン モードで組織のポリシーを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。次の例は、ブール型のカスタム組織のポリシーの効果を監査するドライラン モードの組織のポリシーを作成する方法を示しています。
コンソール
Google Cloud Console で、[組織のポリシー] ページに移動します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[組織のポリシー] ページのリストから、適用するカスタム組織ポリシーを選択します。
[ドライラン] タブを選択します。
[ドライラン ポリシーを管理] をクリックします。
[ドライラン ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。
[ルールを追加] をクリックします。
[適用] で、[オン] を選択し、[完了] をクリックします。
ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。ドライラン モードの組織のポリシーが想定どおりに動作していることを確認したら、[ポリシーを設定] をクリックしてライブポリシーを設定できます。
組織のポリシーの制約の [ドライラン] タブに移動すると、ドライラン モードの組織のポリシーのステータスを確認できます。
ドライラン モードで組織のポリシーが適用されているプロジェクトの場合は、[拒否ログを表示] をクリックすると監査ログを表示できます。この組織のポリシーの場合、カスタム組織のポリシーが適用されているかのように、監査ログに違反が表示されます。
gcloud
ドライラン モードで組織のポリシーを作成するには、dryRunSpec
で制約を定義する YAML ファイルを作成します。例:
name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME dryRunSpec: rules: - enforce: true
以下を置き換えます。
RESOURCE_TYPE
はorganizations
、folders
、またはprojects
に置き換えます。RESOURCE_ID
は、RESOURCE_TYPE
で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。CONSTRAINT_NAME
は、カスタム制約の名前に置き換えます。例:custom.disableGkeAutoUpgrade
この組織のポリシーではカスタム制約は適用されませんが、監査ログには適用されたかのように違反が表示されます。
spec
と dryRunSpec
の両方を定義する場合は、同じ YAML ファイル内にライブの組織のポリシーとドライラン モードの組織のポリシーを設定できます。例:
name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: false dryRunSpec: rules: - enforce: true
ドライラン モードの組織のポリシーを適用するには、org-policies set policy
コマンドを使用します。ドライラン モードの既存の組織のポリシーを新しい制約で更新するには、--update-mask
フラグを使用します。次に例を示します。
gcloud org-policies set-policy POLICY_PATH \ --update-mask=UPDATE_MASK
以下を置き換えます。
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。UPDATE_MASK
は、spec
に置き換えてライブポリシーのみを更新するか、dryRunSpec
に置き換えてドライラン モードで組織のポリシーのみを更新します。*
を使用して、spec
フィールドとdryRunSpec
フィールドの両方を更新することもできます。既存の組織のポリシーの更新時にこのフィールドが設定されていない場合、このコマンドはエラーになり、組織のポリシーは更新されません。
ドライラン モードで組織のポリシーが設定されていることを確認するには、org-policies describe
コマンドを使用します。dryRunSpec
フィールドは、組織のポリシー内に存在している場合のみ表示されます。
この組織のポリシーではカスタム制約は適用されません。ただし、監査ログにはカスタム制約の違反が表示されます。
アクティブなポリシーからドライラン モードで組織のポリシーを作成する
既存の組織のポリシーは、ドライラン モードの組織のポリシーの開始点として使用できます。これによって、既存のポリシーの変更が環境に及ぼす影響を確認できます。
既存のポリシーに基づいてドライラン モードで組織のポリシーを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。
コンソール
Google Cloud Console で、[組織のポリシー] ページに移動します。
プロジェクト選択ツールで、リソース サービスの使用を制限する制約がすでに構成されているリソースを選択します。
[組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。
[ライブ] タブを選択します。
[ポリシーを管理] をクリックします。
[ルールを追加] をクリックします。
[ポリシーの値] で [カスタム] を選択します。
[ポリシーの種類] で [拒否] を選択します。
[カスタム値] ボックスに「
appengine.googleapis.com
」と入力します。[完了]、[ドライラン ポリシーを設定] の順にクリックします。
gcloud
既存のライブの組織のポリシーに基づいてドライラン モードで組織のポリシーを作成するには、org-policies describe
コマンドを使用してリソースに対する現在のポリシーを取得します。例:
gcloud org-policies describe gcp.restrictServiceUsage \ --project=PROJECT_ID
PROJECT_ID
は、この組織のポリシーが構成されているプロジェクトのプロジェクト ID またはプロジェクト番号に置き換えます。
出力は次のようになります。
name: projects/123456789012/policies/gcp.restrictServiceUsage spec: etag: CJy93KEGEKCJw/QB rules: - values: allowedValues: - compute.googleapis.com updateTime: '2023-04-12T21:11:56.512804Z'
このコマンドの出力を一時ファイルにコピーします。このファイルを編集して、etag
フィールドと updateTime
フィールドを削除し、spec
フィールドを dryRunSpec
に変更します。ドライラン モードで組織のポリシーでテストする制約構成を変更します。
完成した YAML ファイルは次のようになります。
name: projects/123456789012/policies/gcp.restrictServiceUsage dryRunSpec: rules: - values: allowedValues: - compute.googleapis.com - appengine.googleapis.com
ドライラン モードで組織のポリシーを適用するには、--update-mask
フラグとともに org-policies set policy
を使用します。例:
gcloud org-policies set-policy POLICY_PATH \ --update-mask=dryRunSpec
POLICY_PATH
は、一時的な組織のポリシーの YAML ファイルのパスに置き換えます。
ドライラン モードで組織のポリシーを削除する
ドライラン モードの組織のポリシーは、Google Cloud コンソールまたは Google Cloud CLI を使用して削除できます。
コンソール
Google Cloud Console で、[組織のポリシー] ページに移動します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。
[ドライラン] タブを選択します。
[ドライラン ポリシーを削除] をクリックします。
gcloud
ドライラン モードで組織のポリシーを削除するには、ドライランの仕様なしで組織のポリシーを定義する YAML ファイルを作成します。次に例を示します。
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage spec: rules: - values: allowedValues: - container.googleapis.com
以下を置き換えます。
RESOURCE_TYPE
はorganizations
、folders
、またはprojects
に置き換えます。RESOURCE_ID
は、RESOURCE_TYPE
で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。
次に、--update-mask
フラグを dryRunSpec
に設定して org-policies set policy
コマンドを使用します。例:
gcloud org-policies set-policy POLICY_PATH \ --update-mask=dryRunSpec
これにより既存の組織のポリシーが更新され、ドライランの仕様が削除され、仕様のライブの部分は無視されます。
ライブの組織のポリシーとドライラン モードの組織のポリシーの両方を同時に削除するには、org-policies delete
コマンドを使用します。次に例を示します。
gcloud org-policies delete CONSTRAINT_NAME \ --RESOURCE_TYPE=RESOURCE_ID
以下を置き換えます。
CONSTRAINT_NAME
は、削除するリビジョンの名前に置き換えます。例:gcp.restrictServiceUsage
RESOURCE_TYPE
はorganizations
、folders
、またはprojects
に置き換えます。RESOURCE_ID
は、RESOURCE_TYPE
で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。
ドライラン モードでの組織のポリシーの有効な評価
ドライラン モードの組織のポリシーは、他の組織のポリシーと同様に継承されます。ドライラン モードの組織のポリシーが組織リソースに設定されている場合、階層の下位レベルでオーバーライドされない限り、そのポリシーはすべての子孫リソースに継承されます。
有効なポリシー評価には、そのリソースに結合された組織のポリシーの結果が表示されます。したがって、ドライラン モードのポリシーがローカルに設定されるのではなく継承される場合、ライブの組織のポリシーの調整は、ドライラン モードの有効な組織のポリシーに反映されます。
たとえば、ライブ組織のポリシーが enforced: false
に設定され、ドライラン モードの組織のポリシーが enforced: true
に設定されている組織リソース Organization A
について考えてみましょう。子リソース Folder B
も、ライブの組織のポリシーを enforced: false
に設定し、ドライラン モードの組織のポリシーを継承します。Folder B
では、設定されたライブポリシーは、ドライラン モードの組織のポリシーの有効なポリシー評価も enforce: false
であり、その親組織で設定されたドライラン モードの組織のポリシーをオーバーライドしているということになります。
Folder B
の子リソース Project X
は、ライブポリシーを enforced: true
に設定します。Folder B
の場合と同様に、ライブポリシーが設定されているため、Project X
のドライラン モードの組織のポリシーの有効な評価は enforced: true
です。
Folder B
の別の子リソース Project Y
は、ドライラン モードの組織のポリシーを enforced: true
に設定します。親リソースから組織のポリシーを継承するため、有効な評価は、ライブポリシーの場合は enforced: false
、ドライラン モードの組織のポリシーの場合は enforced: true
です。
リソース | 設定されたライブの組織のポリシー | 有効なライブの組織のポリシー | ドライラン モードで設定された組織のポリシー | ドライラン モードでの有効な組織のポリシー |
---|---|---|---|---|
組織 A | enforced: false |
enforced: false |
enforced: true |
enforced: true |
フォルダ B | enforced: false |
enforced: false |
なし | enforced: false |
フォルダ C | なし | enforced: false |
なし | enforced: true |
プロジェクト X | enforced: true |
enforced: true |
なし | enforced: true |
プロジェクト Y | なし | enforced: false |
enforced: true |
enforced: true |
ドライラン モードでの組織のポリシーの効果を分析する
ドライラン モードの組織のポリシーは、適用時にどのオペレーションもブロックしません。組織のポリシーの監査ログを確認すると、組織のポリシーによる影響を確認できます。
ライブの組織のポリシーとドライラン モードのポリシーの組織のポリシーの監査ログは、特定のリソースに適用されたポリシーによってオペレーションが許可されるか拒否されるかに基づいて生成されます。次の表に、組織のポリシーの監査ログが生成される状況を示します。
ライブの組織のポリシー | ドライラン モードの組織のポリシー | 生成される監査ログ |
---|---|---|
許可 | 許可 | いいえ |
許可 | 拒否 | ドライラン モードでの監査ログのみ |
拒否 | 許可 | ライブモードとドライラン モードの監査ログ |
拒否 | 拒否 | ライブモードとドライラン モードの監査ログ |
ドライラン モードの組織のポリシーの違反は、監査ログのライブモードの違反とともに表示されます。例:
{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"status": {
"code": 7,
"message": "PERMISSION_DENIED"
},
"authenticationInfo": {},
"requestMetadata": {
"callerIp": "1.2.3.4",
"requestAttributes": {},
"destinationAttributes": {}
},
"serviceName": "appengine.googleapis.com",
"methodName": "google.api.appengine.v1.appengine.apps.services.get",
"resourceName": "projects/sur-project-test-3",
"metadata": {
"constraint": "constraints/gcp.restrictServiceUsage",
"checkedValue": "appengine.googleapis.com",
"liveResult": "ALLOWED",
"@type": "type.googleapis.com/google.cloud.audit.OrgPolicyDryRunAuditMetadata",
"dryRunResult": "DENIED"
}
},
"insertId": "1f2bvoxcmg1",
"resource": {
"type": "audited_resource",
"labels": {
"project_id": "sur-project-test-3",
"service": "appengine.googleapis.com",
"method": "google.api.appengine.v1.appengine.apps.services.get"
}
},
"timestamp": "2022-06-16T19:42:58.244990928Z",
"severity": "WARNING",
"logName": "projects/sur-project-test-3/logs/cloudaudit.googleapis.com%2Fpolicy",
"receiveTimestamp": "2022-06-16T19:42:59.572025716Z"
}
ログ エクスプローラを使用して、ドライラン モードでの組織のポリシーの違反のみをクエリできます。
Console
Google Cloud コンソールでは、ログ エクスプローラを使用して、Google Cloud プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。
Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] ページに移動します。
既存の Google Cloud のプロジェクト、フォルダ、または組織を選択します。
[クエリビルダー] ペインで、次の操作を行います。
リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。
[ログ名] で、[ポリシー] 監査ログタイプを選択します。
[クエリ] ペインに「
protoPayload.metadata.dryRunResult = "DENIED" AND \ protoPayload.metadata.liveResult = "ALLOWED"
」と入力します。
ログ エクスプローラでログを表示する際に問題が発生した場合は、トラブルシューティングの情報をご覧ください。
ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
gcloud
Google Cloud CLI は、Logging API へのコマンドライン インターフェースを提供します。ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリにプロジェクト ID が含まれている場合、指定するプロジェクト識別子は、現在選択されたプロジェクト名を参照している必要があります。
ドライラン モードで組織のポリシーの違反の監査ログエントリを読み取るには、次のコマンドを実行します。
gcloud logging read protoPayload.metadata.dryRunResult = "DENIED" AND \ protoPayload.metadata.liveResult = "ALLOWED" \ --RESOURCE_TYPE=RESOURCE_ID \
以下を置き換えます。
RESOURCE_TYPE
はorganization
、folder
、またはproject
に置き換えます。RESOURCE_ID
は、RESOURCE_TYPE
で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。
1 日以上経過したログを読み取るには、コマンドに --freshness
フラグを追加します。
gcloud CLI の使用方法に関する詳細については、gcloud logging read
をご覧ください。
組織に多数のプロジェクトがある場合は、集約シンクを使用して、組織のすべてのプロジェクトの監査ログエントリを集約し、BigQuery テーブルにルーティングできます。集約シンクの作成の詳細については、組織レベルのログを照合してサポートされている宛先に転送するをご覧ください。
次のステップ
組織のポリシー制約の作成と管理の方法の詳細については、制約の使用をご覧ください。