Policy Simulator で組織のポリシーの変更をテストする

組織のポリシー用の Policy Simulator を使用すると、本番環境に適用する前に、カスタム制約を適用する新しいカスタム制約または組織のポリシーの影響をプレビューできます。Policy Simulator は、提案されたポリシーに違反する前に適用されるリソースのリストを提供します。これにより、これらのリソースを再構成し、例外をリクエストし、組織ポリシーの範囲を中断することなく、デベロッパーと連携するなどして、環境をダウンさせます。

このページでは、Policy Simulator を使用して組織のポリシーの変更をテストする方法について説明します。また、シミュレーションの結果を解釈する方法と、テスト済みの組織のポリシーを適用する方法(そのように選択した場合)についても説明します。

準備

  • Google Cloud CLI で、API 呼び出しに使用するプロジェクトを設定します。

    gcloud config set project PROJECT_ID

    PROJECT_ID は、プロジェクトの名前または ID に置き換えます。

  • Policy Simulator and Resource Manager API を有効にします。

    API を有効にする

  • 省略可: 組織のポリシー サービスの概要を取得します。

必要なロール

シミュレーションの実行とアクセスに必要な権限を取得するには、組織に対するOrgPolicy Simulator 管理者 roles/policysimulator.orgPolicyAdmin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

この事前定義ロールには、シミュレーションの実行とアクセスに必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。

必要な権限

シミュレーションを実行してアクセスするには、次の権限が必要です。

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.get
  • orgpolicy.policies.list
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.listResource
  • cloudasset.assets.listOrgPolicy
  • policysimulator.orgPolicyViolationsPreviews.list
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolations.list

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

ポリシーの変更をテストする

カスタム制約の変更、カスタム制約を適用する組織のポリシー、あるいはその両方を同時にテストできます。

  1. カスタム制約をテストするには、テストするカスタム制約を定義する JSON または YAML ファイルを作成します。

    たとえば、Binary Authorization が有効になっていない Google Kubernetes Engine クラスタ リソースの作成を制限するカスタム制約は、次のようになります。

    name: "organizations/ORGANIZATION_ID/customConstraints/custom.EnforceGKEBinaryAuthz"
    resource_types: "container.googleapis.com/Cluster"
    method_types: CREATE
    condition: "resource.binaryAuthorization.enabled == true"
    action_type: ALLOW
    

    ORGANIZATION_ID は、組織 ID に置き換えます(1234567890123 など)。

    カスタム制約の作成方法については、カスタム制約の作成と管理をご覧ください。

  2. カスタム制約を適用する組織のポリシーをテストするには、テストする組織のポリシーを定義する JSON または YAML ファイルを作成します。

    たとえば、Binary Authorization が有効になっていない Google Kubernetes Engine クラスタ リソースの作成を制限する組織のポリシーは、次のようになります。

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - enforce: true
    

    ORGANIZATION_ID は、組織 ID に置き換えます(1234567890123 など)。

  3. 特定のタグの存在に基づいて条件付きでカスタム制約を適用する組織のポリシーをテストするには、テストする組織のポリシーを定義する JSON または YAML ファイルを作成します。

    たとえば、次の組織のポリシーでは、タグ env=dev が適用されているリソースを除き、Binary Authorization が有効になっていない Google Kubernetes Engine クラスタ リソースの作成が制限されます。

    name: "organizations/ORGANIZATION_ID/policies/custom.EnforceGKEBinaryAuthz"
    spec:
        rules:
        - condition:
            expression: resource.matchTag('env', 'dev')
          enforce: false
        - enforce: true
    

    ORGANIZATION_ID は、組織 ID に置き換えます(1234567890123 など)。

    条件付き組織のポリシーの詳細については、タグを使用した組織のポリシーの設定をご覧ください。

  1. 次のコマンドを実行して、カスタム制約、組織のポリシー、またはその両方の変更をシミュレートします。

    gcloud beta policy-intelligence simulate orgpolicy \
       --organization=ORGANIZATION_ID \
       --custom-constraints=CONSTRAINT_PATH \
       --policies=POLICY_PATH
    

    以下を置き換えます。

    • ORGANIZATION_ID: 組織 ID(1234567890123 など)。 複数の組織にわたる変更のシミュレーションはサポートされていません。

    • CONSTRAINT_PATH: 作成または更新されたカスタム制約へのフルパス。次に例を示します。tmp/constraint.yaml --policiesフラグを設定すると、 --custom-constraints フラグを設定する必要はありません。

    • POLICY_PATH: 作成または更新された組織のポリシーへのフルパス。次に例を示します。tmp/policy.yaml設定すると、--custom-constraintsフラグ。設定する必要はありません。--policiesフラグ。

    数分後、カスタム制約、組織のポリシー、またはその両方の変更に違反するリソースのリストが出力されます。

    組織のポリシーのシミュレーションのサンプル レスポンスを次に示します。このシミュレーションには、Binary Authorization が有効になっていない Google Kubernetes Engine クラスタ リソースの作成を制限するカスタム制約が含まれています。 この場合、変更案が適用されると、プロジェクト simulator-test-projectorgpolicy-test-cluster とプロジェクト autopilot-cluster-1 の 2 つのクラスタ リソースがポリシー違反になります。 orgpolicy-test-0

    Waiting for operation [organizations/012345678901/locations/global/orgPolic
    yViolationsPreviews/85be9a2d-8c49-470d-a65a-d0cb9ffa8f83/operations/1883a83
    c-c448-42e5-a7c5-10a850928f06] to complete...done.
    ---
    customConstraint:
     actionType: ALLOW
     condition: resource.binaryAuthorization.enabled == true
     methodTypes:
     - CREATE
     name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
     resourceTypes:
     - container.googleapis.com/Cluster
    name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/b9fd23a5-7163-46de-9fec-7b9aa6af1113
    resource:
     ancestors:
     - organizations/012345678901
     - projects/456789012345
     assetType: container.googleapis.com/Cluster
     resource: //container.googleapis.com/projects/simulator-test-project/locations/us-central1/clusters/orgpolicy-test-cluster
    ---
    customConstraint:
     actionType: ALLOW
     condition: resource.binaryAuthorization.enabled == true
     methodTypes:
     - CREATE
     name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
     resourceTypes:
     - container.googleapis.com/Cluster
    name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/e73896e6-7613-4a8d-8436-5df7a6455121
    resource:
     ancestors:
     - organizations/012345678901
     - folders/789012345678
     - projects/456789012345
     assetType: container.googleapis.com/Cluster
     resource: //container.googleapis.com/projects/orgpolicy-test-0/locations/us-central1/clusters/autopilot-cluster-1
    

テスト済みのポリシー変更を適用

カスタム制約、組織のポリシー、またはその両方をテストしたら、通常の制約を使用してカスタム制約を設定し、組織のポリシーを適用できます。

  1. カスタム制約を適用するには、組織内の組織のポリシーで使用できるように制約を設定する必要があります。カスタム制約を設定するには、gcloud org-policies set-custom-constraint コマンドを使用します。

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    CONSTRAINT_PATH は、カスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml

    これが完了すると、Google Cloud の組織のポリシーのリストでカスタム制約を使用できるようになります。

  2. カスタム制約を含む組織のポリシーを適用するには、gcloud org-policies set-policy コマンドを使用します。

    gcloud org-policies set-policy POLICY_PATH
    

    POLICY_PATH は、組織のポリシーの YAML ファイルのパスに置き換えます。

    ポリシーが有効になるまでに最大 15 分かかります。

シミュレーション結果を保存する

gcloud CLI を使用している場合は、Policy Simulator の結果を JSON または YAML ファイルとして保存できます。

デフォルトでは、Google Cloud CLI のテスト結果は YAML 形式で出力されます。テスト結果を YAML ファイルとして保存するには、シミュレーションを実行するときに simulate orgpolicy コマンドの出力をリダイレクトします。

> FILENAME

FILENAME は、出力ファイルの名前に置き換えます。

テスト結果を JSON ファイルとして保存するには、シミュレーションを実行するときに次のフラグを simulate orgpolicy コマンドに追加します。

--format=json > FILENAME

FILENAME は、出力ファイルの名前に置き換えます。

次のステップ