Kubernetes データ プレーンのセキュリティ強化は、特権コンテナーの制限、リソース制限の適用、ネットワーク アクセスの制限など、クラスターで実行されているワークロードにセキュリティで保護された構成を適用するのに役立ちます。
Microsoft Defender for Cloudでは、Azure Policy for Kubernetesを使ってこれらの構成を評価・強制することでデータプレーン強化が実装されています。 Azure Policyは、自動プロビジョニングが有効になっているときに、Defender for Containers の一部としてデプロイされます。
Defender for Containers プランの設定で Kubernetes のAzure Policyがオフになっている場合は、関連する推奨事項を修復することでデプロイできます。 また、Azure CLIを使ってDefender for Containersコンポーネントをデプロイしたり、Enablement時に自動プロビジョニングを無効にしたり特定のクラスタを自動プロビジョニングから除外した場合、HelmでDefender for Containersコンポーネントをデプロイすることで手動でAzure Policyをデプロイすることもできます。
Kubernetes のAzure Policyがデプロイされると、Defender for Cloudはクラスター構成に基づいてデータ プレーンのセキュリティ強化に関する推奨事項を生成します。 このページでは、これらの推奨事項を確認し、ポリシー パラメーターを構成し、クラスターに適用する方法を示します。
前提条件
開始するには、次の点を確認します。
Defender for Containers は、サブスクリプションで有効になっています。
Azure ポリシーの要求された FQDN/アプリケーション 規則を追加しました。
(AKS 以外のクラスターの場合)Kubernetes クラスターは
Azure Arc 。
推奨事項を修復して Kubernetes のAzure Policyを有効にする
もしAzure Policy for Kubernetesがデプロイされていないか、Defender for Containersのプラン設定でオフにされている場合、Defender for Cloudでクラスタタイプに合った推奨をリメディでインストールできます。
Azure portal にサインインする
Microsoft Defender for Cloud>Recommendations に移動します。
関連する推奨事項を検索します。
- Azure: Azure Kubernetes Service クラスターには、Kubernetes 用のAzure Policy アドオンがインストールされている必要があります
- GCP: GKE クラスターには、Azure Policy拡張機能がインストールされている必要があります
- AWS/Arc 対応 Kubernetes: Azure Arc 対応 Kubernetes クラスターには、Azure Policy拡張機能がインストールされている必要があります
レコメンデーションを選択します。
[ アクションの実行 ] タブで、[ 修正] を選択します。
選択したリソースを修復するには、[ 修正 ] を選択します。
推奨事項ごとに繰り返します。
データ プレーンのセキュリティ強化に関する推奨事項
Kubernetes のAzure Policyをデプロイした後、Defender for Cloudはクラスター構成を評価し、データ プレーンのセキュリティ強化に関する推奨事項を生成します。 このプロセスには最大 30 分かかることがあります。
注
Defender センサーなどのMicrosoftコンポーネントは、既定で kube-system 名前空間にデプロイされ、非準拠としてマークされません。 他の名前空間にインストールされているサード パーティ製コンポーネントにフラグが設定されている可能性があります。 特定の名前空間を除外するには、Azureポリシーの除外を構成します。
次の表に、一般的なデータ プレーンのセキュリティ強化に関する推奨事項を示します。
| 推奨事項の名前 | セキュリティ コントロール | 構成が必要 |
|---|---|---|
| コンテナーの CPU とメモリの制限を強制する必要がある | DDoS 攻撃からのアプリケーションの保護 | Yes |
| コンテナー イメージは信頼されたレジストリからのみデプロイする必要がある | 脆弱性の修復 | Yes |
| コンテナーで最小限の特権を持つ Linux 機能を適用する必要がある | アクセスおよびアクセス許可の管理 | Yes |
| コンテナーでは、許可されている AppArmor プロファイルのみを使用する | セキュリティ構成の修復 | Yes |
| サービスは許可されたポートでのみリッスンする必要がある | 承認されていないネットワーク アクセスの制限 | Yes |
| ホスト ネットワークとポートの使用を制限する必要がある | 承認されていないネットワーク アクセスの制限 | Yes |
| ポッド HostPath ボリューム マウントの使用は既知のリストに制限する必要がある | アクセスおよびアクセス許可の管理 | Yes |
| 特権エスカレーションを含むコンテナーは避ける必要がある | アクセスおよびアクセス許可の管理 | No |
| 機密性の高いホストの名前空間を共有するコンテナーは避ける必要がある | アクセスおよびアクセス許可の管理 | No |
| コンテナーで不変 (読み取り専用) のルート ファイル システムを適用する必要がある | アクセスおよびアクセス許可の管理 | No |
| Kubernetes クラスターは HTTPS 経由でのみアクセス可能である必要がある | 転送中のデータを暗号化する | No |
| Kubernetes クラスターで API 資格情報の自動マウントを無効にする必要がある | アクセスおよびアクセス許可の管理 | No |
| Kubernetes クラスターで既定の名前空間を使用しないでください | セキュリティのベストプラクティスを実装する | No |
| Kubernetes クラスターでCAP_SYS_ADMIN機能を付与しないでください | アクセスおよびアクセス許可の管理 | No |
| 特権コンテナーの使用を避ける | アクセスおよびアクセス許可の管理 | No |
| コンテナーをルート ユーザーとして実行しない | アクセスおよびアクセス許可の管理 | No |
クラスターの推奨事項を表示する
特定のクラスターのデータ プレーンのセキュリティ強化に関する推奨事項を表示するには:
Azure portal にサインインする
Defender for Cloud>Inventory に移動します。
リソースの種類のフィルターを Kubernetes サービス に設定し、[ 適用] を選択します。
関連するクラスターを選択します。
使用可能な推奨事項を確認します。 データ プレーンのセキュリティ強化に関する推奨事項には、影響を受ける Kubernetes コンポーネントの数が表示されます。
影響を受けるリソースを表示する推奨事項を選択します。
[ アクションの実行 ] タブを選択して、修復オプションを確認します。
ポリシー パラメーターを構成する
一部の推奨事項には、基盤となるAzure Policyで評価されるKubernetesリソースを制限するパラメータが含まれています。 例えば、コンテナには、excludedContainers、excludedImagesパラメータを含む不可excludedNamespacesです。 コンテナの除外はコンテナ名と一致します。 画像除外は、値が *で終わる場合(例: myregistry.azurecr.io/istio:*)で終わる接頭辞マッチングをサポートします。 信頼できないレジストリから画像を意図せず除外しないように、完全に限定された画像名を使用してください。
他の推奨事項では、パラメータ設定が効果的であることが求められます。 たとえば、コンテナーイメージは信頼できるレジストリからのみデプロイされるべきです。これは、信頼できるレジストリの一覧を定義する必要があることを意味します。
必要なパラメーターが構成されていない場合、リソースは異常として表示されます。
ポリシー パラメーターを構成するには:
Azure portal にサインインする
Microsoft Defender for Cloud>Environment settings に移動します。
関連するサブスクリプションを選択します。
[セキュリティ ポリシー] を選択します。
[標準] タブ で 、関連するセキュリティ標準を選択します。
関連するポリシーの割り当ての 3 ドット メニューを選択し、[ 効果とパラメーターの管理] を選択します。
必要なパラメーター値を更新します。
保存を選びます。
データ プレーンのセキュリティ強化ポリシーを適用する
既定では、ポリシーは監査モードでリソースを評価します。 ポリシーを適用するには、その効果を [拒否] に設定します。
推奨事項を適用するには:
Azure portal にサインインする
Microsoft Defender for Cloud>Recommendations に移動します。
関連するデータ プレーンのセキュリティ強化に関する推奨事項を検索して選択します。
[ アクションの実行 ] タブで、[ 拒否] を選択します。
スコープを設定します。
拒否に変更を選択します。
ポリシーの適用をテストする
テスト ワークロードをデプロイすることで、データ プレーンのセキュリティ強化ポリシーを検証できます。
- データプレーンの強化要件に準拠したデプロイメント
- 複数のポリシーに違反する非準拠の展開
ポリシーの適用設定に応じて、準拠しているワークロードが正常にデプロイされ、準拠していないワークロードにフラグが設定またはブロックされていることを確認するには、次の YAML ファイルの例をデプロイします。
準拠している展開の例
以下のデプロイでは、信頼されたコンテナレジストリを使用し、CPUおよびメモリの制限を適用し、権限のエスカレーションを無効化し非rootユーザーとして実行する制限的なセキュリティコンテキストを適用します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-healthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
container.apparmor.security.beta.kubernetes.io/redis: runtime/default
spec:
containers:
- name: redis
image: <customer-registry>.azurecr.io/redis:latest
ports:
- containerPort: 80
resources:
limits:
cpu: 100m
memory: 250Mi
securityContext:
privileged: false
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
name: redis-healthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 80
targetPort: 80
非準拠のデプロイの例
以下の展開は、特権コンテナをrootとして実行し、ホストネットワークや共有名前空間の有効化、ホストパスボリュームのマウントなど、複数のデータプレーン強化ポリシーを意図的に違反しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-unhealthy-deployment
labels:
app: redis
spec:
replicas: 3
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 9001
hostPort: 9001
securityContext:
privileged: true
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
runAsUser: 0
capabilities:
add:
- NET_ADMIN
volumeMounts:
- mountPath: /test-pd
name: test-volume
readOnly: true
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001
関連するコンテンツ
Azure CLI