コンテナ メタデータを使用する VM の作成を防止する

組織内のリソースが非推奨のコンテナ起動エージェント(konlet)と関連する gce-container-declaration メタデータを使用していないことを確認するには、組織のポリシーを適用することをおすすめします。管理対象の制約 compute.managed.disableVmsWithContainerStartupAgent が適用されると、非推奨のメタデータを使用するリソースの作成が無効になります。

このセクションでは、次の方法について説明します。

  • コンテナ起動エージェントを使用する Compute Engine インスタンスの作成を無効にする組織のポリシーを適用します。
  • ドライラン モードでポリシーを適用して、組織のポリシーの影響をモニタリングします。
  • ログ エクスプローラを使用して、非推奨のコンテナ起動エージェントを使用しようとしているプロジェクトを特定します。

コンテナ メタデータを使用する VM の作成を無効にする組織のポリシーを適用する

非推奨のコンテナ起動エージェントを使用するリソースの作成を防ぐには、組織のポリシーを適用することをおすすめします。constraints/compute.managed.disableVmsWithContainerStartupAgent 制約により、gce-container-declaration メタデータキーを使用して新しいリソースを作成できなくなります。この制約は、既存のインスタンスやインスタンス テンプレートには影響しません。

この制約を適用するには、 Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用します。

コンソール

コンソールを使用して組織のポリシーを設定する手順は次のとおりです。

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

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

  2. プロジェクト選択ツールから、組織のポリシーを編集するプロジェクト、フォルダ、または組織を選択します。

    [組織のポリシー] ページに、利用可能な組織ポリシー制約のリストが表示されます。

  3. 制約のリストから、[非推奨のコンテナ起動エージェント(konlet)を使用する Compute Engine インスタンスの作成を無効にする] 制約を選択します。表示される [ポリシーの詳細] ページに、制約の説明と、その制約の適用状況に関する情報が示されます。

  4. このリソースの組織ポリシーを構成するには、[ポリシーを管理] をクリックします。

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

  6. [ルールを追加] を選択します。

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

  8. 必要に応じて、組織のポリシーの変更が適用される前にその影響をプレビューするには、[変更内容をテスト] をクリックします。組織のポリシーの変更のテストの詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

  9. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、アクティブなポリシーからドライラン モードで組織のポリシーを作成するをご覧ください。

  10. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、[ポリシーを設定] をクリックして有効なポリシーを設定します。

gcloud

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

    name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.disableVmsWithContainerStartupAgent
    spec:
      rules:
      - enforce: true
    dryRunSpec:
      rules:
      - enforce: true
    

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

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

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

    次の例は、ID が 123456 のプロジェクトに組織のポリシーを適用する YAML ファイルを示しています。

    name: projects/123456/policies/compute.managed.disableVmsWithContainerStartupAgent
    spec:
      rules:
      - enforce: true
    dryRunSpec:
      rules:
      - enforce: true
    

    タグで組織のポリシーに条件を設定するには、rulescondition ブロックを追加します。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。

  2. dryRunSpec フラグを指定して org-policies set-policy コマンドを実行し、ドライラン モードで組織のポリシーを設定します。

     gcloud org-policies set-policy POLICY_PATH \
       --update-mask=dryRunSpec
    

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

    ドライラン組織のポリシーの詳細については、ドライラン モードで組織のポリシーを作成するをご覧ください。

  3. policy-intelligence simulate orgpolicy コマンドを使用して、組織のポリシーの変更が適用される前に、その影響をプレビューします。

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --policies=POLICY_PATH
    

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

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

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

    組織のポリシーの変更のテストの詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

  4. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、org-policies set-policy コマンドと spec フラグを使用して有効なポリシーを設定します。

    gcloud org-policies set-policy POLICY_PATH \
      --update-mask=spec
    

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

REST

組織のポリシーを設定するには、organizations.policies.create メソッドを使用します。

POST https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/policies

リクエストの JSON 本文には、組織のポリシーの定義が含まれています。この制約がパラメータをサポートしていない場合は、rules の下の parameters ブロックを省略します。

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.disableVmsWithContainerStartupAgent",
  "spec": {
    "rules": [
      {
        "enforce": true,
      }
    ]
  },
  "dryRunSpec": {
    "rules": [
      {
        "enforce": true,
      }
    ]
  }
}

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

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

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

次の例は、ID が 123456 のプロジェクトに組織のポリシーを適用するリクエスト本文を示しています。

  {
    "name": "projects/123456/policies/compute.managed.disableVmsWithContainerStartupAgent",
    "spec": {
      "rules": [
        {
          "enforce": true,
        }
      ]
    },
    "dryRunSpec": {
      "rules": [
        {
          "enforce": true,
        }
      ]
    }
  }
  ```

Optionally, to make the organization policy conditional on a tag, add a
`condition` block to the `rules`. If you add a conditional rule to an
organization policy, you must add at least one unconditional rule or the
policy cannot be saved. For more details, see
[Setting an organization policy with tags](/resource-manager/docs/organization-policy/tags-organization-policy).

For more information about dry-run organization policies, see
[Create an organization policy in dry-run mode](/resource-manager/docs/organization-policy/dry-run-policy).

ドライラン モードでポリシーを適用して、非推奨のメタデータの使用状況をモニタリングする

ポリシーを直接適用して、コンテナ宣言メタデータを使用するインスタンスの作成をブロックする代わりに、ドライラン モードでポリシーを適用できます。この設定により、オペレーションに実際に影響を与えることなく、ポリシーがブロックできるアクションをモニタリングしてログに記録できます。詳細については、ドライラン モードで組織のポリシーを作成するをご覧ください。

アクションがドライラン ポリシーをトリガーすると(たとえば、gce-container-declaration メタデータキーを使用してインスタンスを作成しようとすると)、Cloud Audit Logs にログエントリが生成されます。

非推奨のコンテナ スタートアップ エージェントを使用しようとしているプロジェクトを特定する手順は次のとおりです。

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

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

  2. [クエリ] ペインに次のクエリを入力します。

    protoPayload.metadata.dryRun="true"
    protoPayload.methodName="CheckOrgPolicy"
    protoPayload.resourceName =~ "/compute.managed.disableVmsWithContainerStartupAgent"
    
  3. [クエリを実行] をクリックします。

  4. ログエントリを確認して、非推奨のコンテナ起動エージェントを使用しようとしているプロジェクトを特定します。ドライラン違反のログには次の特徴があります。

    • これらは orgpolicy.googleapis.com に関連しています。
    • protoPayload.metadata.dryRun フィールドが true に設定されている。
    • constraints/compute.managed.disableVmsWithContainerStartupAgent 制約は違反の詳細に含まれます。
  5. 監査ログの情報を見直して、非推奨のコンテナ起動エージェントがまだ使用されている場所と理由を確認します。この情報は、これらのワークロードをサポートされている代替手段に移行する取り組みに役立ちます。

  6. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、適用状態をドライラン モードから有効に変更して、ポリシーを適用します。

ログ エクスプローラの使用方法については、ログ エクスプローラを使用してログを表示するをご覧ください。

次のステップ