Podレベルのセキュリティコンテキスト設定
Podレベルとコンテナレベルのセキュリティコンテキスト設定を検証します。securityContext、capabilities、読み取り専用ファイルシステムのベストプラクティスを学びます。
Security
詳細な説明
Pod Security Contextの解説
Kubernetesのセキュリティコンテキストは、Podレベルとコンテナレベルの2つのレベルで権限とアクセス制御を定義します。Podレベルの設定はすべてのコンテナに適用され、コンテナレベルの設定はオーバーライドまたは追加できます。
適切なセキュリティコンテキストの例
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
labels:
app: secure
spec:
replicas: 2
selector:
matchLabels:
app: secure
template:
metadata:
labels:
app: secure
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: myapp:2.1.0
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
セキュリティコンテキストフィールド
Podレベル(spec.securityContext):
| フィールド | 目的 |
|---|---|
runAsNonRoot |
コンテナのroot実行を防止 |
runAsUser / runAsGroup |
すべてのコンテナのUID/GIDを設定 |
fsGroup |
マウントされたボリュームのグループ所有権を設定 |
seccompProfile |
システムコールを制限 |
コンテナレベル(containers[].securityContext):
| フィールド | 目的 |
|---|---|
allowPrivilegeEscalation |
子プロセスの権限取得を防止 |
readOnlyRootFilesystem |
コンテナファイルシステムを読み取り専用に |
capabilities |
きめ細かいLinux capability制御 |
privileged |
完全なホストアクセスを付与(避けるべき!) |
推奨設定
ほとんどのワークロードでは、このベースラインを使用してください:
- Podレベルで
runAsNonRoot: true - コンテナレベルで
allowPrivilegeEscalation: false - 可能な場合は
readOnlyRootFilesystem: true capabilities.drop: ["ALL"]で必要なものだけ追加
ユースケース
RestrictedレベルのPod Security Standardsを満たす必要がある本番ワークロードのセキュリティコンテキスト設定。マルチテナントクラスターや規制環境に不可欠。