Container Service for Kubernetes (ACK) のポリシーガバナンス機能は、Kubernetes 環境向けのセキュリティポリシーを提供します。このドキュメントでは、ACK クラスターでこのポリシーを有効にする方法と、その効果について説明します。
背景情報
ポリシーガバナンス
PodSecurityPolicy (PSP) は Kubernetes 1.21 で非推奨になりました。これに対応して、Container Service for Kubernetes (ACK) は、元の PSP ベースのポリシー管理機能をアップグレードしました。ACK は、Open Policy Agent (OPA) ポリシーに基づく Gatekeeper アドミッションコントローラーを使用して機能を拡張しました。これらの拡張には、ポリシー管理ステータスの統計、ログのレポートと取得が含まれます。ACK はまた、より広範な Kubernetes アプリケーションシナリオに対応する、豊富な組み込みのポリシー管理ルールライブラリを提供します。コンソールのシンプルなインターフェイスを使用してルールを設定できます。これにより、ポリシー管理機能を使用するための障壁が低くなります。
ポリシータイプは次のように分類されます。
infra: インフラストラクチャ層リソースに関連するポリシー。
compliance: Kubernetes 向け Alibaba Cloud セキュリティ強化など、Kubernetes コンプライアンス仕様に基づいてカスタマイズされたポリシー。
psp: PSP の機能を置き換えるポリシー。
k8s-general: セキュリティのベストプラクティスに基づいて Kubernetes リソース構成にセキュリティ強化の制約を適用する一般ポリシー。
サイドカーインジェクション
アプリケーションのコンテナから機能を抽出し、サイドカープロキシにまとめることができます。このプロキシは、同じ Pod 内の別のコンテナとして実行されます。これらの機能を最大限に活用するには、アプリケーション内の各サービスが、その Pod 内でサイドカープロキシを実行する必要があります。サイドカープロキシは、サービスのすべてのインバウンドおよびアウトバウンド TCP トラフィックをインターセプトし、Service Mesh のコントロールプレーンと通信します。
前提条件
クラスターのバージョンが 1.16 以降であること。クラスターをアップグレードするには、「ACK クラスターを手動でアップグレードする」をご参照ください。
RAM (Resource Access Management) ユーザーを使用してポリシーを管理する場合、RAM ユーザーに次の権限があることを確認してください:
cs:DescribePolicies: ポリシー管理ルールライブラリをリストします。cs:DescribePolicyDetails: ポリシールールテンプレートの詳細を取得します。cs:DescribePolicyGovernanceInCluster: クラスターのポリシー管理詳細を取得します。cs:DescribePolicyInstances: クラスターにデプロイされているポリシーインスタンスのリストを取得します。cs:DescribePolicyInstancesStatus: クラスター内の異なるポリシータイプのインスタンスのデプロイメントステータスを取得します。cs:DeployPolicyInstance: 指定されたクラスターにポリシールールインスタンスをデプロイします。cs:DeletePolicyInstance: 指定されたクラスターのポリシールールインスタンスを削除します。cs:ModifyPolicyInstance: 指定されたクラスターのポリシールールインスタンスを変更します。
カスタム RAM ポリシーの作成方法の詳細については、「RAM を使用してクラスターとクラウドリソースへのアクセス権限を付与する」をご参照ください。
操作手順
このポリシーを有効にすると、指定した名前空間で Pod を作成しようとしても失敗するか、高リスクのセキュリティ警告と違反監査ログが生成されます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
ポリシーのガバナンス ページで、プロンプトが表示された場合はコンポーネントをインストールまたはアップグレードします。次に、以下のいずれかの方法でポリシーを有効にします。
-
セキュリティポリシー一覧からインジェクションを強制するポリシーを有効にする。
-
マイポリシー タブをクリックして、クラスターにデプロイ可能なすべてのポリシーを表示します。
-
ポリシーリストで ASMSidecarInjectionEnforced ポリシーを探し、[操作] 列の 有効化 をクリックします。
-
次の表に従ってポリシーを設定し、作成 をクリックします。
パラメーター
説明
[操作]
アクションを選択します。
-
Block:ポリシーのルールに違反する指定されたリソースのデプロイをブロックします。
-
Alert:ポリシーのルールに違反する指定されたリソースのデプロイを許可しますが、対応する違反監査アラートログを生成します。
[適用範囲]
ポリシーインスタンスを適用するクラスター内の名前空間を指定します。すべての名前空間にポリシーを適用することもできますが、これは推奨しません。
[パラメーター]
このフィールドは空のままにします。
-
-
-
ポリシーインスタンスを直接作成する。
マイポリシー タブをクリックし、ポリシーインスタンスの作成 をクリックします。ポリシーインスタンスの作成 ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
[ポリシータイプ]
infra ポリシータイプを選択します。詳細については、「ACK の事前定義済みセキュリティポリシー」をご参照ください。
[ポリシー名]
「ポリシー名」ドロップダウンリストから、ASMSidecarInjectionEnforced ポリシーテンプレートを選択します。
[操作]
アクションを選択します。
-
Block:ポリシーのルールに違反する指定されたリソースのデプロイをブロックします。
-
Alert:ポリシーのルールに違反する指定されたリソースのデプロイを許可しますが、対応する違反監査アラートログを生成します。
[適用範囲]
ポリシーインスタンスを適用するクラスター内の名前空間を指定します。すべての名前空間にポリシーを適用することもできますが、これは推奨しません。
[パラメーター]
このフィールドは空のままにします。
-
-
-
ポリシーを検証します。
-
このテストは、
default名前空間で自動インジェクションが有効になっていないこと、および強制インジェクションポリシーが有効で 操作 が ブロック に設定されていることを前提としています。-
ワークロードを確認します。
Pod の作成に失敗します。
httpbin Deployment のレプリカステータスは 0/1 と表示され、次のエラーメッセージが表示されます:
admission webhook "validation.gatekeeper.sh" denied the request: Pod must contain at least one container or initContainer named 'istio-proxy'。 -
概要 タブをクリックします。過去 7 日間の操作 リストにブロックレコードが表示されます。
レコードには、ポリシータイプが infra、ポリシー名が ASMSidecarInjectionEnforced、ポリシーの説明が「Requires ASM sidecar injection for pods」と表示されます。詳細には、メッセージ
Pod must contain at least one container or initContainer named 'istio-proxy'が表示されます。
-
ポリシーを編集し、操作 を Warning に変更します。
-
httpbin アプリケーションを再デプロイします。
-
ワークロードを確認します。
アプリケーションは正常にデプロイされます。
[Stateless] ページでは、 httpbin アプリケーションの Pod ステータスが 1/1 になり、アプリケーションは正常に実行されています。
-
概要 タブをクリックします。過去 7 日間の操作 リストにアラートレコードが表示されます。
アラートレコードには、ポリシータイプが infra、ポリシー名が ASMSidecarInjectionEnforced、ポリシーの説明が「Requires ASM sidecar injection for pods」、アクションが [Alert] と表示され、詳細にはメッセージ
Pod must contain at least one container or initContainer named 'istio-proxy'が表示されます。
-
-