説明
AppArmor は、Linux プロセスがアクセスできるファイルや一部のシステム機能を制限します。必要なプロファイルが適用されていないと、アプリケーションが侵害された際に実行できる操作の範囲が広がる場合があります。
annotation がないだけで AppArmor の保護がないとは判断できません。ノードの対応状況、ランタイムの既定値、実際に適用されたプロファイルを確認してください。
想定される影響
- 不要なファイルやシステム機能へのアクセスが許可されたままになる場合があります。
- 互換性がない、または未ロードのプロファイルは、Pod の起動や正常動作を妨げる場合があります。
対処方法
- 現在の Kubernetes では、対応する Pod またはコンテナーの securityContext.appArmorProfile で RuntimeDefault または必要な Localhost プロファイルを指定してください。
- AppArmor が有効なノードを使い、Pod の実行先に Localhost プロファイルを事前にロードしてください。通常の処理と拒否ログをテストし、他のセキュリティ設定も併せて管理してください。
例
既存の例は Kubernetes 1.30 より前の annotation 方式です。現在の構成では appArmorProfile を使ってください。変更後の localhost プロファイルはノードで別途定義・ロードする必要があります。実際のデプロイには保守されているイメージを使用してください。
変更前
yaml
resources:
pod:
type: kubernetes:core/v1:Pod
properties:
metadata:
annotations:
spec:
containers:
- image: nginx:1.14.2
name: nginx
変更後
yaml
resources:
pod:
type: kubernetes:core/v1:Pod
properties:
metadata:
annotations:
container.apparmor.security.beta.kubernetes.io/nginx: localhost/k8s-apparmor-example-allow-write
spec:
containers:
- image: nginx:1.14.2
name: nginx
補足:
- 変更前: 明示的な AppArmor annotation はありません。実際の保護はノードとランタイムの設定を確認する必要があります。
- 変更後: nginx コンテナーにローカルプロファイルを要求します。名前だけで制限内容や適用成功が保証されるわけではありません。