ランタイムセキュリティは、コンテナが実行中の状態でアクティブな保護を提供します。これにより、コンテナ内部における悪意のある活動を検出し、阻止することで、コンテナ化アプリケーションのセキュリティを強化します。
Container Service for Kubernetes (ACK) では、ランタイムセキュリティを実現するための複数の Linux カーネル機構 — Linux キャパビリティ、seccomp、および AppArmor — をサポートしています。さらに、ACK の検査機能や Alibaba Cloud セキュリティセンターといったマネージド型検出ツールも併用可能です。以下の各セクションを参照し、ワークロードに最適な機構を選択・構成してください。
Kubernetes には、ノードへの AppArmor プロファイルのロードを実行する組み込み機構はありません。スケジューラは各ノードにどのプロファイルが適用済みかを認識しないため、Pod の仕様(spec)内でプロファイルを参照する前に、あらかじめ対象ノードへプロファイルをロードしておく必要があります。Pod レベルの設定を構成する前に、プロファイルの配布戦略を事前に計画してください。
seccomp を使用したシステムコールの制限
Secure computing mode(seccomp)は、Linux カーネルのシステムコールフィルターです。SELinux とは異なり、seccomp はコンテナを分離するものではなく、システムコールをインターセプトして許可リストに記載されたもののみを実行可能とすることで、ホストカーネルを保護します。
Docker および containerd には、一般的な用途向けに適したデフォルトの seccomp プロファイルが同梱されています。参考として、Docker のデフォルト seccomp プロファイルをご確認ください。
Linux キャパビリティと seccomp の選択判断
seccomp ポリシーを作成する前に、Linux キャパビリティの追加または削除によって必要な制御が得られるかどうかを確認してください。Linux キャパビリティは、システムコール経由で到達可能なカーネル関数に対してチェックを適用しますが、seccomp はシステムコール自体にフィルターを適用し、実行前に許可/拒否を判定します。キャパビリティは設定が比較的簡易であり、ほとんどのユースケースにおいて十分な制御が可能です。
キャパビリティのみでは必要な制限が達成できない場合、seccomp の構成に進んでください。詳細については、「コンテナに対するキャパビリティの設定」をご参照ください。
seccomp プロファイルの生成
アプリケーションが発行するシステムコールを特定するには、strace を使用してスタックトレースを取得し、その後 syscall2seccomp を用いてトレースデータから seccomp プロファイルを生成します。
Pod への seccomp プロファイルの適用
seccomp プロファイルの適用方法は、ご利用の Kubernetes バージョンによって異なります。
Kubernetes 1.19 以降(推奨)
Pod の Security Context に seccompProfile フィールドを追加します:
securityContext:
seccompProfile:
type: RuntimeDefaultKubernetes 1.19 より前のバージョン
Pod の仕様(spec)にアノテーションを使用します:
annotations:
seccomp.security.alpha.kubernetes.io/pod: "runtime/default"クラスター全体での RuntimeDefault の有効化
Kubernetes 1.27(GA)以降では、kubelet の単一フラグを設定することで、ノード上のすべての Pod に RuntimeDefault プロファイルを自動適用できます。これにより、Pod 単位での securityContext 設定が不要になります。Kubernetes 1.22~1.24(Alpha)では、SeccompDefault 機能はデフォルトで無効化されており、機能ゲートの有効化が必要です。
Kubernetes 1.22~1.24 の場合:各ノードの kubelet 構成ファイルに
--feature-gates=SeccompDefault=trueを追加し、機能ゲートを有効化します。各ノードの kubelet 構成ファイルに
--seccomp-defaultを追加します。kubelet を再起動します。
kubelet の再起動後、当該ノード上の Pod は自動的にノードのランタイムが提供するデフォルト seccomp プロファイルを使用するようになります。デフォルトの許可リストに含まれていないシステムコールは利用できなくなります。
本番ノードへの展開に先立ち、非本番環境でこの構成をテストしてください。--seccomp-default の有効化は、ノード上のすべての Pod に影響します。
サードパーティ製ソリューションによるプロファイル管理
デフォルトのランタイムプロファイルがセキュリティ要件を満たさない場合、カスタム seccomp プロファイルを使用します。カスタム seccomp プロファイルおよび AppArmor プロファイルの作成・保守には、Linux セキュリティに関する高度な知識が必要です。商用のサードパーティ製ソリューションでは、機械学習を活用して異常な活動を検出しブロックするため、静的なプロファイル単体よりも強固な保護を提供します。
ACK の検査機能の使用
Container Service for Kubernetes (ACK) クラスターには、ワークロードにおけるセキュリティリスクをリアルタイムで検出する検査機能が備わっています。検査レポートは、セキュリティ運用・保守エンジニア向けに設計されています。検査ごとに、レポートに記載された失敗した検査項目および推奨される是正措置を確認し、ワークロードのセキュリティ向上に役立ててください。
検査チェック項目および推奨事項の完全な一覧については、「検査の推奨事項」をご参照ください。
Alibaba Cloud セキュリティセンターの使用
セキュリティセンターは、クラウドネイティブアプリケーションのランタイムにおける脅威を検出しブロックすることで、各 Pod のランタイムを保護します。また、脅威インテリジェンスを自動収集・分析し、脅威の発生源を特定してインシデントに対応します。
セキュリティセンターは、以下の機能を提供します:
複数のソースからのログを相関分析し、悪意あるコードまたはコマンドの実行、SQL インジェクション、データ侵害などのリスクをリアルタイムで検出します。
Kubernetes ログおよび操作ログに基づく監査を行い、コンテナエスケープ、AccessKey の漏洩、ACK およびその他のオーケストレーションプラットフォームにおける不正アクセスなどのリスクを特定します。
セキュリティセンターの概要および開始手順については、「セキュリティセンターとは?」をご参照ください。