すべての GKE クラスタで継続的検証チェックベースのプラットフォーム ポリシーを必須にする

このページでは、組織のポリシー サービスを使用して、GKE クラスタで 1 つ以上の継続的検証(CV)チェックベースのプラットフォーム ポリシーの使用を必須にする方法について説明します。必須にするチェックベースのプラットフォーム ポリシーをカスタム制約で指定します。次に、組織のポリシーでカスタム制約を適用します。

費用

このガイドでは、次の Google Cloud サービスを使用します。

  • Binary Authorization。ただし、CV はプレビュー ステージの間は無料です。
  • 組織のポリシーと制約に対して料金は発生しません。

始める前に

  1. Binary Authorization を有効にします。
  2. チェックベースのプラットフォーム ポリシーによる CV と、1 つ以上のチェックベースのプラットフォーム ポリシーによる CV を設定します。

必要なロール

制約を作成して組織のポリシーを適用するために必要な権限を取得する場合は、Google Cloud 組織の組織ポリシー管理者roles/orgpolicy.policyAdmin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

CV のカスタム制約を作成する

コンソール

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

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

  2. [組織のポリシー] ページで、[ カスタム制約] をクリックします。

  3. プロンプトが表示されたら、[親組織に切り替える] をクリックします。組織の詳細については、組織のポリシー サービスの概要をご覧ください。

  4. [制約の詳細] の各フィールドに次の情報を入力します。

    1. 表示名: 制約の表示名(Require a Binary Authorization continuous validation policy for all GKE clusters など)。制約を保存した後、表示名を使用して制約を検索します。表示名フィールドの最大長は 200 文字です。

    2. 制約 ID: 制約の制約 ID(例: RequireBinAuthzCVPolicy)。

    3. 説明: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。説明フィールドの最大長は 2,000 文字です。

  5. [適用] で、次の操作を行います。

    1. [リソースタイプ] に「container.googleaips.com/Cluster」と入力します。

    2. [適用方法] で [作成時と更新時に適用する] を選択します。

    3. [条件] フィールドに式を入力します。このフィールドの最大長は 1,000 文字です。カスタム制約は、条件が true と評価された場合に適用されます。条件は、Common Expression Language(CEL)構文の式です。式を and(&&)や or(||)で組み合わせることで、複雑な式を作成できます。CEL は C に似た式言語です。CEL の構文とセマンティクスの詳細については、https://github.com/google/cel-spec をご覧ください。 条件を入力するには、次の操作を行います。

      1. [ 条件を編集] をクリックします。

      2. 式を入力して、CV プラットフォーム ポリシーの存在を確認します。次の条件では、CV プラットフォーム ポリシー バインディングが存在し、プラットフォーム ポリシーに特定の名前が付けられている必要があります。

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
        

        次のように置き換えます。

        • PROJECT_ID: プラットフォーム ポリシーのプロジェクト ID。プロジェクトは同じ組織に存在する必要があります。
        • POLICY_ID: プラットフォーム ポリシーのポリシー ID。

        次の条件では、2 つの CV プラットフォーム ポリシー バインディングが存在し、それぞれに特定のプラットフォーム ポリシー名が必要です。

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
        
        • PROJECT_ID1: 最初のプラットフォーム ポリシーのプロジェクト ID。プロジェクトは同じ組織に存在する必要があります。
        • POLICY_ID1: 最初のプラットフォーム ポリシーのポリシー ID。
        • PROJECT_ID2: 2 番目のプラットフォーム ポリシーのプロジェクト ID。
        • POLICY_ID2: 2 番目のプラットフォーム ポリシーのポリシー ID。

        • [保存] をクリックします。

    4. [アクション] で [許可] を選択します。

  6. カスタム制約を作成するには、[制約を作成] をクリックします。

gcloud

  1. カスタム制約の YAML ファイルを作成します。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_ID
    resource_types: container.googleapis.com/Cluster
    method_types:
      - CREATE
      - UPDATE
    condition: >-
      CONDITION
    action_type: ACTION
    display_name: DISPLAY_NAME
    description: DESCRIPTION
    

    次のように置き換えます。

    • ORGANIZATION_ID: 組織 ID(例: 123456789)。
    • CONSTRAINT_ID: 制約 ID(例: RequireBinAuthzCVPolicy)。
    • CONDITION: CV プラットフォーム ポリシーの存在を確認する式を入力します。このフィールドの最大長は 1,000 文字です。カスタム制約は、条件が true と評価された場合に適用されます。条件は、Common Expression Language(CEL)構文の式です。式を and(&&)や or(||)で組み合わせることで、複雑な式を作成できます。CEL は C に似た式言語です。CEL の構文とセマンティクスの詳細については、https://github.com/google/cel-spec をご覧ください。 次の条件では、CV プラットフォーム ポリシー バインディングが存在し、プラットフォーム ポリシーに特定の名前が付けられている必要があります。

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
      

      次のように置き換えます。

      • PROJECT_ID: プラットフォーム ポリシーのプロジェクト ID。プロジェクトは同じ組織に存在する必要があります。
      • POLICY_ID: プラットフォーム ポリシーのポリシー ID。

      次の条件では、2 つの CV プラットフォーム ポリシー バインディングが存在し、それぞれに特定のプラットフォーム ポリシー名が必要です。

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
      
      • PROJECT_ID1: 最初のプラットフォーム ポリシーのプロジェクト ID。プロジェクトは同じ組織に存在する必要があります。
      • POLICY_ID1: 最初のプラットフォーム ポリシーのポリシー ID。
      • PROJECT_ID2: 2 番目のプラットフォーム ポリシーのプロジェクト ID。
      • POLICY_ID2: 2 番目のプラットフォーム ポリシーのポリシー ID。

      • ACTION: condition を満たしている場合に実行するアクション。ALLOW または DENY になります。

      • DISPLAY_NAME: 制約の名前。Require a Binary Authorization continuous validation policy for all GKE clusters のように、わかりやすい名前を付けます。表示名フィールドの最大長は 200 文字です。

      • DESCRIPTION: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。説明フィールドの最大長は 2,000 文字です。

    • カスタム制約を適用します。

      gcloud org-policies set-custom-constraint CUSTOM_CONSTRAINT_PATH
      

      CUSTOM_CONSTRAINT_PATH は、カスタム制約定義のパスに置き換えます。

    • カスタム制約が存在することを確認します。

      gcloud org-policies list-custom-constraints \
          --organization=ORGANIZATION_ID
      

      出力は次のようになります。

      CUSTOM_CONSTRAINT: custom.RequireBinAuthzCVPolicy
      ACTION_TYPE: ALLOW
      METHOD_TYPES: CREATE,UPDATE
      RESOURCE_TYPES: container.googleapis.com/Cluster
      DISPLAY_NAME: This cluster requires the continuous validation policy: projects/my-project/platforms/gke/policies/my-policy
      

作成したカスタム制約の適用を有効にするには、組織のポリシーを作成します。

組織のポリシーを使用してカスタム制約を適用する

新しいカスタム制約を適用するには、制約を参照する組織のポリシーを作成してから組織のポリシーを適用します。

コンソール

制約を適用するには、次の操作を行います。

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

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

  2. プロジェクト選択ツールで組織を選択します。

  3. リストから制約を検索して選択します。

  4. その制約の [ポリシーの詳細] ページで、[ポリシーを管理] をクリックします。

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

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

  7. [適用] で [オン] を選択します。

  8. (省略可)[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートします。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

  9. 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。

gcloud

  1. YAML ポリシー定義ファイルを作成します。

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

    次のように置き換えます。

    • ORGANIZATION_ID: 組織 ID
    • CONSTRAINT_ID: 制約 ID
  2. ポリシーを適用します。

    gcloud org-policies set-policy ORG_POLICY_PATH
    

    ORG_POLICY_PATH は、ポリシー定義ファイルのパスに置き換えます。

  3. ポリシーが存在することを確認します。

    gcloud org-policies list \
        --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID は、組織 ID に置き換えます。

    引数のリストについては、gcloud org-policies list をご覧ください。

    出力は次のようになります。

    CONSTRAINT: custom.RequireBinAuthzCVPolicy
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CN622LIGEIDXnpMB-
    

ポリシーが有効になるまでに 15 分ほどかかる場合があります。

CV チェックベースのプラットフォーム ポリシーに複数の制約を適用するには、次の操作を行います。

  • CV チェックベースのポリシーごとに 1 つのカスタム制約を作成します。
  • このセクションの説明に従って、各カスタム制約を使用して組織のポリシーを更新します。

カスタム制約を削除する

カスタム制約は、Google Cloud コンソールまたは Google Cloud CLI で削除できます。

コンソール

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

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

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. 組織選択ツールから自分の組織を選択します。

  4. リストから制約を検索して選択します。

  5. [制約の詳細] で、[ 削除] をクリックします。

  6. [削除] をクリックして、制約の削除を確定します。

gcloud

カスタム制約を削除するには、org-policies delete-custom-constraint gcloud CLI コマンドを使用します。

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_ID \
  --organization=ORGANIZATION_ID

次のように置き換えます。

  • ORGANIZATION_ID: 組織 ID(123456789 など)

  • CONSTRAINT_NAME: カスタム制約の名前

出力は次のようになります。

Deleted custom constraint [organizations/123456789/customConstraints/CONSTRAINT_NAME]

カスタム制約を削除しても、その制約を使用して作成されたポリシーは引き続き存在しますが、無視されます。削除したカスタム制約と同じ名前のカスタム制約を作成することはできません。

次のステップ