Kubernetes データ プレーンのセキュリティ強化を保護する
[アーティクル] 2024/08/15
9 人の共同作成者
フィードバック
この記事の内容
ワークロード保護を設定する
前提条件
Kubernetes データ プレーンのセキュリティ強化を有効にする
推奨事項のバンドルを表示して構成する
正常なデプロイのサンプル.yaml ファイル
異常なデプロイのサンプル.yaml ファイル
次の手順
さらに 3 個を表示
このページでは、Kubernetes データ プレーンのセキュリティ強化に特化した、Microsoft Defender for Cloud のセキュリティの推奨事項を使用する方法について説明します。
ヒント
表示される可能性がある、Kubernetes クラスターおよびノードに関するセキュリティの推奨事項の一覧については、コンテナーの推奨事項 に関する記事をご覧ください。
Microsoft Defender for Cloud には、Kubernetes 用の Azure Policy のインストールを完了すると使用可能になる推奨事項のバンドルが含まれています。
Kubernetes データ プレーンのセキュリティ強化を有効にする
Kubernetes 用の Azure Policy は、次の 2 つの方法のいずれかで有効にすることができます:
プラン/コネクタ設定を使用し、現在および将来のすべてのクラスターに対して Azure Policy for Kubernetes を有効にする
注意
この設定を有効にすると、Kubernetes 用のAzure Policy のポッドがクラスターにインストールされます。 そうすることで、ポッドが使用する CPU とメモリの量の割り当てが少なくなります。 この割り当てが最大容量に達する可能性はありますが、リソースの残りの CPU とメモリには影響しません。
注意
クラスター管理者がクラスター自体に新しい IAM ロールの権限を追加する必要がある EKS における制限のため、コネクタを介した AWS に対する有効化はサポートされていません。
Azure サブスクリプションまたはオンプレミスに対して有効にする
Microsoft Defender for Containers を有効にすると、Azure Kubernetes Service と、関連するサブスクリプション内の Azure Arc 対応 Kubernetes クラスターに対して、既定で "Kubernetes 用の Azure Policy" 設定が有効になります。 初期構成で設定を無効にした場合でも、後で手動で有効にすることができます。
コンテナー プランで "Azure Policy for Kubernetes" 設定を無効にした場合は、以下の手順に従って、サブスクリプション内のすべてのクラスターで有効にすることができます。
Azure portal にサインインします。
[Microsoft Defender for Cloud] >[Environment settings](環境設定) に移動します。
関連するサブスクリプションを選択します。
[Defender プラン] ページで、[コンテナー] が [オン] に切り替えられていることを確認します。
[設定] を選択します。
[設定と監視] ページで、''Azure Policy for Kubernetes'' を [オン] に切り替えます。
GCP コネクタで Microsoft Defender for Containers を有効にすると、関連するプロジェクトの Google Compute Engine に対して "Azure Policy Extension for Azure Arc" 設定が既定で有効になります。 初期構成で設定を無効にした場合でも、後で手動で有効にすることができます。
GCP コネクタで "Azure Policy Extension for Azure Arc" 設定を無効にした場合は、以下の手順に従って GCP コネクタで有効 にすることができます。
既存のクラスターに Azure Policy for Kubernetes をデプロイする
[推奨事項] ページから、既存の Kubernetes クラスターで Azure Policy for Kubernetes を手動構成できます。 有効にすると、堅牢化に関する推奨事項が使用可能になります (一部の推奨事項では、堅牢化に別の構成が必要です)。
Azure Policy for Kubernetes を指定したクラスターにデプロイするには :
推奨事項ページで、次の関連する推奨事項を検索します。
Azure - "Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
GCP - "GKE clusters should have the Azure Policy extension"
.
AWS とオンプレミス - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed"
.
ヒント
この推奨事項は異なるセキュリティ コントロールに含まれていますが、次の手順ではどれを選択してもかまいません。
いずれかのセキュリティ コントロールから、推奨事項を選択して、アドオンをインストールできるリソースを確認します。
関連するクラスターを選択し、[修復] を選択します。
Azure Policy for Kubernetes のインストールが完了してから約 30 分後、Defender for Cloud は、図に示すように関連するセキュリティ コントロールで、それぞれ以下の推奨事項に関するクラスターの正常性状態を表示します:
注意
Azure Policy for Kubernetes を初めてインストールしている場合、これらの推奨事項は、推奨事項の一覧に新しく追加されたものとして表示されます。
ヒント
一部の推奨事項にはパラメーターが含まれており、それらを効果的に使用するために、Azure Policy を使用してカスタマイズする必要があります。 たとえば、コンテナー イメージは信頼されたレジストリからのみデプロイする必要があります というレコメンデーションのメリットを得るには、信頼されたレジストリを定義する必要があります。 構成を必要とする推奨事項に必要なパラメーターを入力していない場合、ワークロードは異常と表示されます。
注意
Defender センサーや Azure Monitor エージェント (AMA) などの Microsoft コンポーネントは、既定で kube-system 名前空間にデプロイされます。 このセットアップにより、それらがデータ プレーンの推奨事項内で非準拠としてマークされなくなります。 しかし、別の名前空間にインストールされているサード パーティ ベンダー ツールは、非準拠としてフラグが設定される場合があります。 これらの推奨事項からサード パーティ ベンダーを除外するには、それらの名前空間を除外リストに追加します。
テーブルを展開する
推奨事項の名前
セキュリティ制御
構成が必要
コンテナーの CPU とメモリの制限を強制する必要がある
DDoS 攻撃からのアプリケーションの保護
はい
コンテナー イメージは信頼されたレジストリからのみデプロイする必要がある
脆弱性の修復
はい
コンテナーで最小限の特権を持つ Linux 機能を適用する必要がある
アクセスおよびアクセス許可の管理
はい
コンテナーでは、許可されている AppArmor プロファイルのみを使用する
セキュリティ構成の修復
はい
サービスは許可されたポートでのみリッスンする必要がある
承認されていないネットワーク アクセスの制限
はい
ホスト ネットワークとポートの使用を制限する必要がある
承認されていないネットワーク アクセスの制限
はい
ポッド HostPath ボリューム マウントの使用は既知のリストに制限する必要がある
アクセスおよびアクセス許可の管理
はい
特権エスカレーションを含むコンテナーは避ける必要がある
アクセスおよびアクセス許可の管理
No
機密性の高いホストの名前空間を共有するコンテナーは避ける必要がある
アクセスおよびアクセス許可の管理
No
コンテナーで不変 (読み取り専用) のルート ファイル システムを適用する必要がある
アクセスおよびアクセス許可の管理
No
Kubernetes クラスターは HTTPS 経由でのみアクセス可能である必要がある
転送中のデータを暗号化する
No
Kubernetes クラスターで API 資格情報の自動マウントを無効にする必要がある
アクセスおよびアクセス許可の管理
No
Kubernetes クラスターでは既定の名前空間を使用しない
セキュリティのベストプラクティスを実装する
No
Kubernetes クラスターでは CAPSYSADMIN セキュリティ機能を許可しない
アクセスおよびアクセス許可の管理
No
特権コンテナーの使用を避ける
アクセスおよびアクセス許可の管理
No
コンテナーをルート ユーザーとして実行しない
アクセスおよびアクセス許可の管理
No
カスタマイズする必要があるパラメーターが含まれた推奨事項では、次のようにパラメーターを設定する必要があります。
パラメーターを設定するには :
Azure portal にサインインします。
[Microsoft Defender for Cloud] >[Environment settings](環境設定) に移動します。
関連するサブスクリプションを選択します。
Defender for Cloud のメニューから、[セキュリティ ポリシー] を選択します 。
関連する割り当てを選択します。 既定の割り当ては ASC default
です。
[パラメーター] タブを開き、必要に応じて値を変更します。
[確認と保存] を選択します。
[保存] を選択します。
推奨事項を適用するには :
推奨事項の詳細ページを開き、 [拒否] を選択します。
スコープを設定するペインが開きます。
スコープを設定して [拒否に変更] を選択します。
クラスターに適用される推奨事項を確認するには :
Defender for Cloud の資産インベントリ ページを開き、リソースの種類フィルターを [Kubernetes サービス] に設定します。
調査するクラスターを選択し、クラスターで利用可能な推奨事項を確認します。
ワークロード保護セットからの推奨事項を表示すると、影響を受けるポッド ("Kubernetes components") の数がクラスターの横に表示されます。 特定のポッドの一覧を表示するには、クラスターを選択し、 [アクションの実行] を選択します。
適用をテストするには、次の 2 つの Kubernetes デプロイを使用します 。
例の .yaml ファイルをそのままデプロイするか、これらを参照として使用して自分のワークロードを修復します。
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: 100 m
memory: 250 Mi
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
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:
path: /tmp
---
apiVersion: v1
kind: Service
metadata:
name: redis-unhealthy-service
spec:
type: LoadBalancer
selector:
app: redis
ports:
- port: 6001
targetPort: 9001
この記事では、Kubernetes データ プレーンのセキュリティ強化を構成する方法について説明しました。
関連資料については、次のページを参照してください。