Kubernetes 用の Azure Policy について理解する

Azure Policy によって Open Policy Agent (OPA) のための "アドミッション コントローラー Webhook" である Gatekeeper v3 が拡張され、一貫性した一元的な方法でクラスターに対して大規模な実施と保護が適用されます。 Azure Policy を使用すると、Kubernetes クラスターのコンプライアンスの状態を 1 か所から管理し、レポートすることができます。 アドオンにより、次の機能が設定されます。

  • Azure Policy サービスを使用してクラスターへのポリシー割り当てをチェックします。
  • ポリシーを定義を制約テンプレートおよび制約カスタム リソースとしてクラスターにデプロイします。
  • 監査およびコンプライアンスの詳細を Azure Policy サービスに報告します。

Kubernetes 用の Azure Policy では、次のクラスター環境がサポートされています。

重要

Azure Policy アドオンの Helm モデルと AKS エンジンのアドオンは "非推奨" になりました。 これらのアドオンを削除するための手順は以下を参照してください。 Azure Arc 対応 Kubernetes 用の Azure Policy 拡張機能は "プレビュー" 段階です。

概要

Kubernetes クラスターで Azure Policy を有効にして使用するには、次の操作を実行します。

  1. Kubernetes クラスターを構成し、Azure Kubernetes Service (AKS) アドオンをインストールする

    Note

    インストールの一般的な問題については、Azure Policy アドオンのトラブルシューティングに関するページを参照してください。

  2. Kubernetes 用の Azure Policy 言語を理解する

  3. 定義を Kubernetes クラスターに割り当てる

  4. 検証を待機する

制限事項

Kubernetes クラスターの Azure Policy アドオンに、次の一般的な制限事項が適用されます。

  • Kubernetes の Azure Policy アドオンは、Kubernetes バージョン 1.14 以降でサポートされています。
  • Kubernetes の Azure Policy アドオンは、Linux ノード プールにのみデプロイできます。
  • 組み込みのポリシー定義のみがサポートされます。 カスタム ポリシー定義は "パブリック プレビュー" 機能です。
  • Azure Policy アドオンでサポートされるポッド最大数: 10,000
  • クラスターごとのポリシー単位での非対応レコードの最大数:500
  • サブスクリプションごとの非対応レコードの最大数:100 万
  • Azure Policy アドオン以外の Gatekeeper のインストールは、サポートされていません。 Azure Policy アドオンを有効にする前に、以前の Gatekeeper インストールによってインストールされたすべてのコンポーネントをアンインストールします。
  • 非対応の理由は、Microsoft.Kubernetes.Dataリソース プロバイダー モードには利用できません。 コンポーネントの詳細を使用してください。
  • コンポーネント レベルの除外は、リソース プロバイダー モードではサポートされていません。

AKS の Azure Policy アドオンにのみ、次の制限事項が適用されます。

推奨事項

Azure Policy アドオンを使用する場合の一般的な推奨事項を次に示します。

  • Azure Policy アドオンでは、3 つの Gatekeeper コンポーネント (監査ポッドのレプリカが 1 つ、Webhook ポッドのレプリカが 2 つ) を実行する必要があります。 クラスター内での Kubernetes リソースとポリシー割り当ての数が増えるにつれて、監査および適用の操作が必要となり、これらのコンポーネントによってさらに多くのリソースを消費されます。

    • 最大 20 の制約を持つ 1 つのクラスター内のポッド数が 500 を下回る場合: コンポーネントごとに 2 つの vCPU と 350 MB のメモリ。
    • 最大 40 の制約を持つ 1 つのクラスター内のポッド数が 500 を上回る場合: コンポーネントごとに 3 つの vCPU と 600 MB のメモリ。
  • Windows ポッド セキュリティ コンテキストをサポートしていません。 そのため、Windows ポッドでは、ルート特権の禁止など、一部の Azure Policy 定義をエスカレートすることができず、Linux ポッドにのみ適用されます。

次の推奨事項は、AKS と Azure Policy アドオンにのみ適用されます。

  • CriticalAddonsOnly テイントとシステム ノード プールを使用して、Gatekeeper ポッドをスケジュールします。 詳細については、システム ノード プールの使用に関するページを参照してください。
  • AKS クラスターから送信トラフィックをセキュリティで保護します。 詳細については、クラスター ノードのエグレス トラフィックの制御に関するページを参照してください。
  • クラスターで aad-pod-identity が有効になっている場合、Azure Instance Metadata エンドポイントの呼び出しをインターセプトするよう、Node Managed Identity (NMI) ポッドによりノードの iptables が変更されます。 この構成の場合、Metadata エンドポイントに要求が行われると、ポッドで aad-pod-identity が使用されていない場合でも NMI により要求がインターセプトされます。 CRD に定義されているラベルに一致するポッドから Metadata エンドポイントに要求が行われた場合、NMI で何も処理することなく、その要求をプロキシ処理することを aad-pod-identity に通知するよう、AzurePodIdentityException CRD を構成できます。 kubernetes.azure.com/managedby: aks 名前空間の kubernetes.azure.com/managedby: aks ラベルを持つシステム ポッドは、AzurePodIdentityException CRD を構成することで、aad-pod-identity で除外してください。 詳細については、「特定のポッドまたはアプリケーションの aad-pod-identity を無効にする」を参照してください。 例外を構成するには、mic-exception YAML をインストールします。

AKS 用の Azure Policy アドオンをインストールする

Azure Policy アドオンをインストールしたり、このサービスの機能のいずれかを有効にしたりする前に、お客様のサブスクリプションで Microsoft.PolicyInsights リソース プロバイダーを有効にする必要があります。

  1. Azure CLI バージョン 2.12.0 以降がインストールされて構成されている必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードが必要な場合は、Azure CLI のインストールに関するページを参照してください。

  2. リソース プロバイダーとプレビュー機能を登録します。

    • Azure portal:

      Microsoft.PolicyInsights リソース プロバイダーを登録します。 手順については、「リソース プロバイダーと種類」を参照してください。

    • Azure CLI:

      # Log in first with az login if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      az provider register --namespace Microsoft.PolicyInsights
      
  3. 限定プレビュー ポリシー定義がインストールされていた場合は、AKS クラスターの [ポリシー] ページで [無効] ボタンを使用して、アドオンを削除します。

  4. AKS クラスターは、バージョン 1.14 以降である必要があります。 AKS クラスターのバージョンを検証するには、次のスクリプトを使用します。

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  5. バージョン 2.12.0 以降の Azure CLI をインストールします。 詳細については、「 Azure CLI のインストール」を参照してください。

上記の前提条件ステップが完了したら、管理する AKS クラスターに Azure Policy アドオンをインストールします。

  • Azure portal

    1. Azure portal で [すべてのサービス] を選択し、 [Kubernetes サービス] を検索して選択することで AKS サービスを起動します。

    2. お使いのいずれかの AKS クラスターを選択します。

    3. [Kubernetes サービス] ページの左側の [ポリシー] を選択します。

    4. メイン ページで、 [アドオンを有効にする] ボタンを選択します。

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

アドオンが正常にインストールされていることと、azure-policy および gatekeeper ポッドが実行されていることを確認するには、次のコマンドを実行します。

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

最後に、<rg> をリソース グループ名に置き換え、<cluster-name> を AKS クラスターの名前に置き換えて Azure CLI コマンド az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name> を実行することにより、最新のアドオンがインストールされていることを確認します。 結果は次の出力のようになります。

{
        "config": null,
        "enabled": true,
        "identity": null
}

Azure Arc 対応 Kubernetes 用の Azure Policy 拡張機能 (プレビュー) をインストールする

Kubernetes 用の Azure Policy を使用すると、Kubernetes クラスターのコンプライアンスの状態を 1 か所から管理し、レポートすることができます。

この記事では、Kubernetes 用の Azure Policy 拡張機能を作成し、拡張機能の状態を表示し、拡張機能を削除する方法について説明します。

拡張機能のプラットフォームの概要については、Azure Arc クラスターの拡張機能に関する記事を参照してください。

前提条件

注: 既に Helm を使用して拡張機能なしで Kubernetes 用の Azure Policy を直接 Azure Arc クラスターにデプロイしている場合は、記載されている手順に従って Helm チャートを削除します。 削除が完了したら、次に進むことができます。

  1. お使いの Kubernetes クラスターがサポートされているディストリビューションであることを確認します。

    注: Arc 拡張機能用の Azure Policy は、次の Kubernetes ディストリビューションでサポートされています。

  2. Azure Arc へのクラスターの接続など、こちらに記載されている Kubernetes 拡張機能の一般的な前提条件をすべて満たしていることを確認します。

    注: Arc 対応 Kubernetes クラスターでは、こちらのリージョンで Azure Policy 拡張機能がサポートされています。

  3. Azure Policy 拡張機能のポートを開きます。 Azure Policy 拡張機能では、これらのドメインとポートを使用して、ポリシー定義と割り当てがフェッチされ、クラスターのコンプライアンスが Azure policy に報告されます。

    Domain Port
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  4. Azure Policy 拡張機能をインストールしたり、このサービスの機能のいずれかを有効にしたりする前に、お客様のサブスクリプションで Microsoft.PolicyInsights リソース プロバイダーを有効にする必要があります。

    注: リソース プロバイダーを有効にするには、リソース プロバイダーと種類に関する記事の手順を実行するか、Azure CLI または Azure PowerShell コマンドを実行します。

    • Azure CLI

      # Log in first with az login if you're not using Cloud Shell
      # Provider register: Register the Azure Policy provider
      az provider register --namespace 'Microsoft.PolicyInsights'
      
    • Azure PowerShell

      # Log in first with Connect-AzAccount if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
      

Azure Policy 拡張機能を作成する

Azure Policy 拡張機能の作成では、以下に注意してください。

  • 自動アップグレードは既定で有効になっています。これにより、新しい変更がデプロイされると、Azure Policy 拡張機能のマイナー バージョンが更新されます。
  • パラメーターとして connectedk8s に渡されるプロキシ変数は、送信プロキシをサポートするように Azure Policy 拡張機能に反映されます。

拡張機能のインスタンスを作成するには、Arc 対応クラスターで、<> をご自身の値に置き換えて次のコマンドを実行します。

az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>

例:

az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy

出力例:

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.policyinsights",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
 "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "azurepolicy",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "my-test-rg",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2021-10-27T01:20:06.834236+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.0"
}

Azure Policy 拡張機能を表示する

拡張機能インスタンスが正常に作成されたことを確認し、拡張機能のメタデータを検査するには、<> をご自身の値に置き換えて次のコマンドを実行します。

az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

例:

az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy

拡張機能が正常にインストールされていることと、azure-policy ポッドと gatekeeper ポッドが実行されていることを確認するには、次のコマンドを実行します。

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

Azure Policy 拡張機能を削除する

拡張機能インスタンスを削除するには、<> をご自身の値に置き換えて次のコマンドを実行します。

az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

ポリシーの言語

Kubernetes を管理するための Azure Policy 言語構造は、既存のポリシー定義のものに従います。 Microsoft.Kubernetes.Dataリソース プロバイダー モードでは、Kubernetes クラスターを管理するために、"audit" および "deny" 効果が使用されます。 "audit" および "deny" によって、OPA Constraint Framework および Gatekeeper v3 の操作に固有の details プロパティが提供される必要があります。

Azure Policy からはアドオンに対して、ポリシー定義の tails.templateInfodetails.constraint、または details.constraintTemplate プロパティの一部として、これらの CustomResourceDefinitions (CRD) の URI または Base64Encoded 値が渡されます。 Rego は、Kubernetes クラスターへの要求を検証するために OPA および Gatekeeper がサポートする言語です。 Azure Policy は、Kubernetes 管理のための既存の標準をサポートすることによって、既存の規則を再利用し、これらを Azure Policy とペアにすることで、統合されたクラウド コンプライアンス レポート体験を実現します。 詳しくは、「Rego とは」を参照してください。

ポリシー定義を割り当てる

ポリシー定義を Kubernetes クラスターに割り当てるには、適切な Azure ロールベースのアクセス制御 (Azure RBAC) ポリシー割り当て操作が割り当てられている必要があります。 Azure 組み込みのロール リソース ポリシー共同作成者所有者には、これらの操作があります。 詳細については、「Azure Policy における Azure RBAC アクセス許可」を参照してください。

次の手順に従って、Azure portal を使用してクラスターを管理する組み込みのポリシー定義を確認します。 カスタム ポリシー定義を使用する場合は、それを作成するときに使用した名前またはカテゴリで検索します。

  1. Azure portal で Azure Policy サービスを開始します。 左側のウィンドウで [すべてのサービス] を選択し、 [ポリシー] を検索して選択します。

  2. Azure Policy ページの左側のウィンドウで、 [定義] を選択します。

  3. [カテゴリ] ドロップダウン リスト ボックスから、 [すべて選択] を使用してフィルターをクリアし、 [Kubernetes] を選択します。

  4. ポリシー定義を選択し、 [割り当てる] ボタンを選択します。

  5. [スコープ] を、ポリシーの割り当てを適用する Kubernetes クラスターの管理グループ、サブスクリプション、またはリソース グループに設定します。

    Note

    Kubernetes 用の Azure Policy 定義を割り当てるとき、 [スコープ] にクラスター リソースを含める必要があります。

  6. ポリシーの割り当てに、簡単に識別するために使用できる [名前][説明] を設定します。

  7. [ポリシーの適用] を以下のいずれかの値に設定します。

    • [有効] - クラスターでポリシーを適用します。 違反がある Kubernetes の受付要求は拒否されます。

    • [無効] - クラスターでポリシーを適用しません。 違反がある Kubernetes の受付要求は拒否されません。 コンプライアンス評価の結果は引き続き利用できます。 新しいポリシー定義を実行中のクラスターにロールアウトする場合、 [無効] オプションを使用すると、違反のある受付要求が拒否されないため、ポリシー定義のテストに役立ちます。

  8. [次へ] を選択します。

  9. パラメーターの値を設定する

    • ポリシーの評価から Kubernetes 名前空間を除外するには、パラメーター [名前空間の除外] で名前空間の一覧を指定します。 kube-systemgatekeeper-system、、azure-arc は除外することをお勧めします。
  10. [Review + create](レビュー + 作成) を選択します。

あるいは、「ポリシーの割り当て - ポータル」クイックスタートを使用して、Kubernetes ポリシーを見つけて割り当てます。 サンプルの 'audit vms' ではなく、Kubernetes ポリシー定義を検索します。

重要

組み込みのポリシー定義は、カテゴリ Kubernetes の Kubernetes クラスターに使用できます。 組み込みポリシー定義の一覧については、Kubernetes のサンプルに関する記事をご覧ください。

ポリシーの評価

アドオンは 15 分おきに、ポリシーの割り当ての変更について Azure Policy サービスでチェックインします。 この更新サイクル中に、アドオンによって変更が確認されます。 これらの変更によって、制約テンプレートと制約の作成、更新、または削除がトリガーされます。

Kubernetes クラスターでは、クラスターに適したラベルが名前空間に含まれている場合、違反のある受付要求は拒否されません。 コンプライアンス評価の結果は引き続き利用できます。

  • Azure Arc 対応 Kubernetes クラスター: admission.policy.azure.com/ignore
  • Azure Kubernetes Service クラスター: control-plane

Note

クラスター管理者は、Azure Policy アドオンによってインストールされた制約テンプレートと制約リソースを作成および更新するアクセス許可を持っている場合がありますが、手動更新は上書きされるため、これらのシナリオはサポートされていません。 Gatekeeper は、アドオンをインストールして Azure Policy ポリシー定義を割り当てる前に存在していたポリシーの評価を続けます。

アドオンでは、15 分ごとにクラスターのフル スキャンが呼び出されます。 アドオンを使うと、フル スキャンの詳細情報と、クラスターに試行された変更についての Gatekeeper によるすべてのリアルタイム評価が収集された後、すべての Azure Policy 割り当てと同様に、[ポリシー準拠状況の詳細] に含めるために、結果が Azure Policy に報告されます。 アクティブなポリシー割り当ての結果のみが監査サイクル中に返されます。 監査結果は、失敗した制約の状態フィールドに違反と示されることもあります。 "準拠していない" リソースの詳細については、「リソース プロバイダー モードのコンポーネントの詳細」を参照してください。

Note

Kubernetes クラスター用の Azure Policy 内の各コンプライアンス レポートには、過去 45 分間のすべての違反が含まれます。 タイムスタンプは、違反が発生した時刻を示します。

その他の考慮事項:

  • クラスター サブスクリプションが Microsoft Defender for Cloud に登録されている場合、Microsoft Defender for Cloud Kubernetes ポリシーがクラスターに自動的に適用されます。

  • 既存の Kubernetes リソースを持つクラスターに拒否ポリシーが適用された場合は、新しいポリシーに準拠していない既存のリソースが引き続き実行されます。 準拠していないリソースが別のノードで再スケジュールされると、ゲートキーパーによってリソースの作成がブロックされます。

  • リソースを検証する拒否ポリシーがクラスターにある場合、デプロイの作成時にはユーザーに拒否メッセージは表示されません。 たとえば、replicasets とポッドを含む Kubernetes のデプロイについて考えてみます。 ユーザーが kubectl describe deployment $MY_DEPLOYMENT を実行したとき、イベントの一部として拒否メッセージは返されません。 ただし、kubectl describe replicasets.apps $MY_DEPLOYMENT によって、拒否に関連付けられたイベントが返されます。

Note

ポリシーの評価時に init コンテナーが含まれる場合があります。 init コンテナーが含まれるかどうかを確認するには、次のような宣言がないか CRD を確認してください。

input_containers[c] {
   c := input.review.object.spec.initContainers[_]
}

制約テンプレートの競合

複数の制約テンプレートのリソース メタデータ名が同じだが、ポリシー定義で参照されているソースが異なる場所にある場合、このポリシー定義は競合していると見なされます。 たとえば、2 つのポリシー定義によって、Azure Policy テンプレート ストア (store.policy.core.windows.net) や GitHub などの異なるソースの場所に格納されている同じ template.yaml ファイルが参照されている場合があります。

ポリシー定義とその制約テンプレートが割り当てられているが、クラスターにまだインストールされておらず、かつ競合している場合、これらは競合しているものとして報告され、競合が解決されるまでクラスターにインストールされません。 同様に、新しく割り当てられたポリシー定義と競合する、クラスター上に既に存在する既存のポリシー定義とその制約テンプレートは、引き続き正常に機能します。 既存の割り当てが更新され、制約テンプレートの同期に失敗した場合、クラスターも競合としてマークされます。 すべての競合メッセージについては、「AKS リソース プロバイダー モードのコンプライアンス上の理由」を参照してください。

ログ記録

Kubernetes のコントローラーおよびコンテナーとして、azure-policy ポッドと gatekeeper ポッドのどちらを使用しても、Kubernetes クラスター内にログが保持されます。 このログは Kubernetes クラスターの [Insights] ページに公開されます。 詳細については、「Azure Monitor for containers を使用して Kubernetes クラスターのパフォーマンスを監視する」を参照してください。

アドオンのログを表示するには、kubectl を使用します。

# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system

# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system

詳細については、Gatekeeper ドキュメントの Gatekeeper のデバッグに関する記事を参照してください。

Gatekeeper のアーティファクトを表示する

アドオンにより、ポリシー割り当てがダウンロードされ、制約テンプレートと制約がクラスターにインストールされた後、ポリシー割り当て ID やポリシー定義 ID などの Azure Policy 情報で両方に注釈が付けられます。 アドオン関連のアーティファクトを表示するようにクライアントを構成するには、次の手順を使用します。

  1. クラスターの kubeconfig を設定します。

    Azure Kubernetes Service クラスターの場合、次の Azure CLI を使用します。

    # Set context to the subscription
    az account set --subscription <YOUR-SUBSCRIPTION>
    
    # Save credentials for kubeconfig into .kube in your home folder
    az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
    
  2. クラスターの接続をテストします。

    kubectl cluster-info コマンドを実行します。 正常に実行されると、各サービスは実行されている場所の URL で応答します。

アドオンの制約テンプレートを表示する

アドオンによってダウンロードされた制約テンプレートを表示するには、kubectl get constrainttemplates を実行します。 k8sazure で始まる制約テンプレートが、アドオンによってインストールされたものです。

Azure Policy のマッピングを取得する

クラスターにダウンロードされた制約テンプレートとポリシー定義間のマッピングを特定するには、kubectl get constrainttemplates <TEMPLATE> -o yaml を使用します。 結果は次の出力のようになります。

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
    annotations:
    azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
    constraint-template-installed-by: azure-policy-addon
    constraint-template: <URL-OF-YAML>
    creationTimestamp: "2021-09-01T13:20:55Z"
    generation: 1
    managedFields:
    - apiVersion: templates.gatekeeper.sh/v1beta1
    fieldsType: FieldsV1
...

<SUBID> はサブスクリプション ID、<GUID> はマップされたポリシー定義の ID です。 <URL-OF-YAML> は、クラスターにインストールするためにアドオンによってダウンロードされた制約テンプレートのソースの場所です。

アドオンによってダウンロードされた制約テンプレートの名前を取得したら、その名前を使用して関連する制約を表示できます。 kubectl get <constraintTemplateName> を使用してリストを取得します。 アドオンによってインストールされた制約は、azurepolicy- で始まります。

制約の詳細を表示する

制約には、ポリシー定義の違反とマッピングおよびポリシー割り当てに関する詳細が含まれます。 詳細を表示するには、kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml を使用します。 結果は次の出力のようになります。

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
  annotations:
    azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
    azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
    azure-policy-definition-reference-id: ""
    azure-policy-setdefinition-id: ""
    constraint-installed-by: azure-policy-addon
    constraint-url: <URL-OF-YAML>
  creationTimestamp: "2021-09-01T13:20:55Z"
spec:
  enforcementAction: deny
  match:
    excludedNamespaces:
    - kube-system
    - gatekeeper-system
    - azure-arc
  parameters:
    imageRegex: ^.+azurecr.io/.+$
status:
  auditTimestamp: "2021-09-01T13:48:16Z"
  totalViolations: 32
  violations:
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hello-world-78f7bfd5b8-lmc5b
    namespace: default
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hellow-world-89f8bfd6b9-zkggg

アドオンのトラブルシューティング

Kubernetes のアドオンのトラブルシューティングに関する詳細については、Azure Policy のトラブルシューティングに関する記事の Kubernetes のセクションを参照してください。

Arc 拡張機能用の Azure Policy 拡張機能に関連する問題については、以下を参照してください。

Azure Policy に関連する問題については、以下を参照してください。

アドオンを削除する

AKS からアドオンを削除する

AKS クラスターから Azure Policy アドオンを削除するには、Azure portal または Azure CLI のいずれかを使用します。

  • Azure portal

    1. Azure portal で [すべてのサービス] を選択し、 [Kubernetes サービス] を検索して選択することで AKS サービスを起動します。

    2. Azure Policy アドオンを無効にする AKS クラスターを選択します。

    3. [Kubernetes サービス] ページの左側の [ポリシー] を選択します。

    4. メイン ページで、 [アドオンを無効にする] ボタンを選択します。

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

Azure Arc 対応 Kubernetes からアドオンを削除する

Note

Azure Policy アドオン Helm モデルは非推奨になりました。 代わりに、Azure Arc 対応 Kubernetes 用の Azure Policy 拡張機能を選んでください。

Azure Policy アドオンと Gatekeeper を Azure Arc 対応 Kubernetes クラスターから削除するには、次の Helm コマンドを実行します。

helm uninstall azure-policy-addon

AKS エンジンからアドオンを削除する

注意

Azure パブリック クラウドのお客様に対して、AKS エンジン製品は非推奨となりました。 マネージド Kubernetes には Azure Kubernetes Service (AKS) を使用すること、セルフマネージド Kubernetes にはクラスター API プロバイダー Azure を使用することを検討してください。 新しい機能は計画されていません。このプロジェクトは CVE および類似のものに対してのみ更新され、Kubernetes 1.24 が更新プログラムを受け取る最終バージョンとなります。

AKS エンジン クラスターから Azure Policy アドオンと Gatekeeper を削除するには、アドオンのインストール方法に合わせたメソッドを使用します。

  • AKS エンジンのクラスター定義で addons プロパティを設定してインストールした場合:

    azure-policyaddons プロパティを false に変更した後で、クラスター定義を AKS エンジンに再デプロイします。

    "addons": [{
        "name": "azure-policy",
        "enabled": false
    }]
    

    詳細については、AKS エンジン - Azure Policy アドオンの無効化に関するページを参照してください。

  • Helm Chart を使用してインストールした場合は、次の Helm コマンドを実行します。

    helm uninstall azure-policy-addon
    

Azure Policy アドオンによって収集される診断データ

Kubernetes の Azure Policy アドオンを使うと、制限されたクラスター診断データが収集されます。 この診断データは、ソフトウェアとパフォーマンスに関連する重要な技術データです。 これは、次の方法で使用されます。

  • Azure Policy アドオンを最新の状態に維持する
  • Azure Policy アドオンをセキュリティで保護し、信頼性が高く、パフォーマンスに優れた状態に維持する
  • アドオンの使用の集計分析を通じて Azure Policy アドオンを改善する

アドオンによって収集された情報は、個人データではありません。 現在、次の詳細情報が収集されています。

  • Azure Policy アドオン エージェントのバージョン
  • クラスターの種類
  • クラスターのリージョン
  • クラスターのリソース グループ
  • クラスターのリソース ID
  • クラスターのサブスクリプション ID
  • クラスターの OS (例:Linux)
  • クラスターの市区町村 (例:シアトル)
  • クラスターの州または都道府県 (例:ワシントン)
  • クラスターの国または地域 (例:米国)
  • ポリシー評価でのエージェントのインストール中に Azure Policy アドオンによって発生した例外/エラー
  • Azure Policy アドオンによってインストールされていない Gatekeeper ポリシー定義の数

次のステップ