ドライラン モードで組織のポリシーを作成する

このページでは、ドライラン モードの組織のポリシーを使用して、組織のポリシーの変更が適用される前に、それがワークフローにどのような影響を与えるかをモニタリングする方法について説明します。

ドライラン モードの組織のポリシーは、他の組織のポリシーと同様に作成、適用され、ポリシーの違反は監査ログに記録されますが、違反アクションは拒否されません。

準備

ドライラン モードで組織のポリシーを使用するには、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 リスト型制約の効果を監査するドライラン モードの組織のポリシーを作成する方法を示しています。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。

  3. [組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。

  4. [ドライラン] タブを選択します。

  5. [ドライラン ポリシーを管理] をクリックします。

  6. [ドライラン ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。

  7. [ポリシーの適用] で、[置き換え] をクリックします。

  8. [ルールを追加] をクリックします。

  9. [ポリシーの値] で [カスタム] を選択します。

  10. [ポリシーの種類] で [拒否] を選択します。

  11. [カスタム値] ボックスに compute.googleapis.com を入力して、[完了] をクリックします。

  12. カスタム制約の場合は、[変更内容をテスト] をクリックして、この組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

  13. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。[ポリシーを設定] をクリックして、ライブポリシーを設定することもできます。

組織のポリシーの制約の [ドライラン] タブに移動すると、ドライラン モードの組織のポリシーのステータスを確認できます。

ドライラン モードで組織のポリシーが適用されているプロジェクトの場合は、[拒否ログを表示] をクリックすると監査ログを表示できます。この組織のポリシーの場合、リソースサービスの使用を制限する制約が適用され compute.googleapis.com を拒否しているかのように、監査ログに違反が表示されます。

gcloud

ドライラン モードで組織のポリシーを作成するには、dryRunSpec で制約を定義する YAML ファイルを作成します。例:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage
  dryRunSpec:
    rules:
    - values:
        deniedValues:
        - compute.googleapis.com

以下を置き換えます。

  • RESOURCE_TYPEorganizationsfolders、または projects に置き換えます。

  • RESOURCE_ID は、RESOURCE_TYPE で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。

この組織のポリシーでは gcp.restrictServiceUsage 制約は適用されませんが、監査ログにはそうしたかのように違反が表示されます。

specdryRunSpec の両方を定義する場合、同じ 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.comappengine.googleapis.com の違反も表示されます。

ブール型制約

ブール型制約のドライラン モードで組織のポリシーを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。次の例は、ブール型カスタム組織のポリシーの効果を監査するドライラン モードの組織のポリシーを作成する方法を示しています。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。

  3. [組織のポリシー] ページのリストから、適用するカスタム組織のポリシーを選択します。

  4. [ドライラン] タブを選択します。

  5. [ドライラン ポリシーを管理] をクリックします。

  6. [ドライラン ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。

  7. [ルールを追加] をクリックします。

  8. [適用] で [オン] を選択し、[完了] をクリックします。

  9. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。ドライラン モードの組織のポリシーが想定どおりに動作していることを確認したら、[ポリシーを設定] をクリックしてライブポリシーを設定できます。

組織のポリシーの制約の [ドライラン] タブに移動すると、ドライラン モードの組織のポリシーのステータスを確認できます。

ドライラン モードで組織のポリシーが適用されているプロジェクトの場合は、[拒否ログを表示] をクリックすると監査ログを表示できます。この組織のポリシーの場合、カスタム組織のポリシーが適用されているかのように、監査ログに違反が表示されます。

gcloud

ドライラン モードで組織のポリシーを作成するには、dryRunSpec で制約を定義する YAML ファイルを作成します。例:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
  dryRunSpec:
    rules:
    - enforce: true

以下を置き換えます。

  • RESOURCE_TYPEorganizationsfolders、または projects に置き換えます。

  • RESOURCE_ID は、RESOURCE_TYPE で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。

  • CONSTRAINT_NAME は、カスタム制約の名前に置き換えます。例: custom.disableGkeAutoUpgrade

この組織のポリシーではカスタム制約は適用されませんが、監査ログには適用されたかのように違反が表示されます。

specdryRunSpec の両方を定義する場合は、同じ 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 を使用します。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、リソース サービスの使用を制限する制約がすでに構成されているリソースを選択します。

  3. [組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。

  4. [ライブ配信] タブを選択します。

  5. [ポリシーを管理] をクリックします。

  6. [ルールを追加] をクリックします。

  7. [ポリシーの値] で [カスタム] を選択します。

  8. [ポリシーの種類] で [拒否] を選択します。

  9. [カスタム値] ボックスに「appengine.googleapis.com」と入力します。

  10. [完了]、[ドライラン ポリシーを設定] の順にクリックします。

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 を使用します。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。

  3. [組織のポリシー] ページのリストから、[リソース サービスの使用を制限する] 制約を選択します。

  4. [ドライラン] タブを選択します。

  5. [ドライラン ポリシーを削除] をクリックします。

gcloud

ドライラン モードで組織のポリシーを削除するには、ドライランの仕様なしで組織のポリシーを定義する YAML ファイルを作成します。次に例を示します。

  name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage
  spec:
    rules:
    - values:
        allowedValues:
        - container.googleapis.com

以下を置き換えます。

  • RESOURCE_TYPEorganizationsfolders、または 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_TYPEorganizationsfolders、または 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 プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。

  1. Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. 既存の Google Cloud のプロジェクト、フォルダ、または組織を選択します。

  3. [クエリビルダー] ペインで、次の操作を行います。

    • リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。

    • [ログ名] で、[policy] 監査ログタイプを選択します。

    • [クエリ] ペインに次のコマンドを入力します。 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_TYPEorganizationfolder、または project に置き換えます。

  • RESOURCE_ID は、RESOURCE_TYPE で指定されたリソースのタイプに応じた、組織 ID、フォルダ ID、プロジェクト ID またはプロジェクト番号に置き換えます。

1 日以上経過したログを読み取るには、コマンドに --freshness フラグを追加します。

gcloud CLI の使用方法に関する詳細については、gcloud logging read をご覧ください。

組織に多数のプロジェクトがある場合は、集約シンクを使用して、組織のすべてのプロジェクトの監査ログエントリを集約し、BigQuery テーブルにルーティングできます。集約シンクの作成の詳細については、組織レベルのログを照合してサポートされている宛先に転送するをご覧ください。

次のステップ

組織のポリシー制約の作成と管理の方法の詳細については、制約の使用をご覧ください。