制限的な PSS プロファイル
最後に、最も厳しく制限された現在のポッドのセキュリティベストプラクティスに従ったポリシーである制限的なプロファイルを見てみましょう。pss 名前空間に制限的な PSS プロファイルのすべての PSA モードを有効にするラベルを追加します:
- Kustomize Patch
- Namespace/pss
- Diff
apiVersion: v1
kind: Namespace
metadata:
name: pss
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
apiVersion: v1
kind: Namespace
metadata:
labels:
app.kubernetes.io/created-by: eks-workshop
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: restricted
name: pss
kind: Namespace
metadata:
labels:
app.kubernetes.io/created-by: eks-workshop
+ pod-security.kubernetes.io/audit: restricted
+ pod-security.kubernetes.io/enforce: restricted
+ pod-security.kubernetes.io/warn: restricted
name: pss
Kustomize を実行してこの変更を適用し、pss 名前空間にラベルを追加します:
Warning: existing pods in namespace "pss" violate the new PodSecurity enforce level "restricted:latest"
Warning: pss-d59d88b99-flkgp: allowPrivilegeEscalation != false, runAsNonRoot != true, seccompProfile
namespace/pss configured
deployment.apps/pss unchanged
ベースラインプロファイルと同様に、pss デプロイメントが制限的なプロファイルに違反しているという警告が表示されます。
pod "pss-d59d88b99-flkgp" deleted
ポッドは再作成されません:
No resources found in pss namespace.
上記の出力は、ポッドのセキュリティ設定が制限的な PSS プロファイルに違反しているため、PSA が pss 名前空間内のポッドの作成を許可しなかったことを示しています。この動作は、前のセクションで見たものと同じです。
制限的なプロファイルの場合、実際にプロファイルを満たすためにセキュリティ設定を事前にロックダウンする必要があります。pss 名前空間に設定された特権的な PSS プロファイルに準拠す るようにポッド設定にいくつかのセキュリティコントロールを追加しましょう:
- Kustomize Patch
- Deployment/pss
- Diff
apiVersion: apps/v1
kind: Deployment
metadata:
name: pss
spec:
template:
spec:
containers:
- name: pss
securityContext:
capabilities:
drop:
- ALL
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
seccompProfile:
type: RuntimeDefault
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/created-by: eks-workshop
name: pss
namespace: pss
spec:
replicas: 1
selector:
matchLabels:
app: pss
template:
metadata:
labels:
app: pss
app.kubernetes.io/created-by: eks-workshop
spec:
containers:
- image: public.ecr.aws/aws-containers/retail-store-sample-catalog:1.2.1
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 3
name: pss
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /health
port: 8080
periodSeconds: 5
successThreshold: 3
resources:
limits:
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: false
runAsNonRoot: true
runAsUser: 1000
seccompProfile:
type: RuntimeDefault
requests:
cpu: 250m
memory: 512Mi
securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ drop:
+ - ALL
readOnlyRootFilesystem: false
+ runAsNonRoot: true
+ runAsUser: 1000
+ seccompProfile:
+ type: RuntimeDefault
Kustomize を実行してこれらの変更を適用し、デプロイメントを再作成します:
namespace/pss unchanged
deployment.apps/pss configured
次に、以下のコマンドを実行して、PSA が上記の変更を持つ pss 名前空間内のデプロイメントとポッドの作成を許可するかどうかを確認します:
NAME READY STATUS RESTARTS AGE
pss-8dd6fc8c6-9kptf 1/1 Running 0 3m6s
上記の出力は、ポッドのセキュリティ設定が制限的な PSS プロファイルに適合しているため、PSA が許可したことを示しています。
上記のセキュリティ権限は、制限的な PSS プロファイルで許可されているコントロールの包括的なリストではないことに注意してください。各 PSS プロファイルで許可/禁止されている詳細なセキュリティコントロールについては、ドキュメントを参照してください。