ランタイムセキュリティは、実行中のコンテナーをアクティブに保護します。 実行中のコンテナでの悪意のあるアクティビティを検出して防止し、コンテナ化アプリケーションのセキュリティを強化します。
seccompを使用してコンテナ化されたアプリケーションがカーネルにsyscallsを作成するのを制限する
seccompプロファイルを使用するコンテナまたはポッドの設定
Linuxオペレーティングシステムは数百のsyscallsを提供しますが、ほとんどのsyscallsはコンテナーを実行する必要はありません。 seccompを開始するには、straceを使用してスタックトレースを生成し、アプリケーションが作成しているシステムコールを確認します。 次に、syscall2seccompなどのツールを使用して、トレースから収集されたデータからseccompプロファイルを作成します。 詳細については、「strace」および「syscall2seccomp」をご参照ください。
SELinuxとは異なり、seccompはコンテナを分離するように設計されていません。 ただし、seccompはホストカーネルを不正なsyscallsから保護できます。 seccompはsyscallsをインターセプトし、ホワイトリストに含まれるsyscallsのみを許可します。 Dockerにはデフォルトのseccompプロファイルがあり、ほとんどの汎用ワークロードに適しています。 Containerdには、デフォルトのseccompプロファイルも含まれます。 詳細については、「デフォルトのseccompプロファイル」をご参照ください。
コンテナまたはポッドの仕様に次のアノテーションを追加することで、デフォルトのseccompプロファイルを使用するようにコンテナまたはポッドを構成できます。
Kubernetes 1.19より前のバージョン:
annotations: seccomp.security.alpha.kubernetes.io/pod: "runtime/default"
Kubernetes 1.19以降のバージョン:
securityContext: seccompProfile: type: RuntimeDefault
RuntimeDefault機能の有効化
1.22以降のKubernetesバージョンのみがこの機能をサポートしています。 SeccompDefaultは、オープンソースバージョン1.22でAlphaステージに入り、オープンソースバージョン1.27で一般公開 (GA) になりました。 本番環境でこの機能を有効にして使用する前に、クラスターのKubernetesバージョンを確認してください。 この機能を有効にするには、次の方法を使用します。
1.24 1.22のKubernetesバージョンでは、SeccompDefault機能はデフォルトで無効になっています。 ノードのkubelet構成ファイルで
-- feature-gates
パラメーターを追加し、true
に設定してフィーチャゲートを有効にすることができます。ノードのkubelet構成ファイルに
-- seccomp-default
パラメーターを追加して、RuntimeDefault機能を有効にします。機能を有効にするには、kubeletを再起動します。
この機能を有効にすると、ノードにデプロイされたポッドは、ノードランタイムによって提供されるデフォルトのseccompプロファイルを自動的に使用します。 デフォルトのプロファイルホワイトリストにないSyscallsは使用できません。 本番クラスターで使用する前に、この機能をテストする必要があります。
サードパーティのソリューションを使用してseccompおよびAppArmorプロファイルを維持する
ランタイムが提供するデフォルトのseccompプロファイルがビジネス要件を満たさない場合は、カスタムseccompプロファイルを使用できます。 Linuxセキュリティに精通していない場合、seccompおよびAppArmorプロファイルの作成と管理は困難な場合があります。 自分でseccompおよびAppArmorプロファイルを維持できない場合は、サードパーティが提供する商用ソリューションを使用することを選択できます。 これらのサードパーティソリューションは、機械学習を使用して異常なアクティビティをブロックまたは警告します。これは、Apparmorやseccompなどの静的プロファイルよりも安全です。
seccompポリシーを設定する前にLinux機能を追加または削除する
機能には、syscallsを介して到達可能なカーネル関数のさまざまなチェックが含まれます。 ほとんどの場合、カーネル関数がチェックに失敗した場合、syscallはエラーを返します。 チェックは、特定のシステムコールの開始時に、または特定の特権ファイルへの書き込みなど、異なるシステムコールを介して到達可能なカーネルの領域で実行できます。 Seccompはsyscallフィルタでもあり、syscallsが実行される前にすべてのsyscallsに適用されます。 プロセスはフィルターを設定できます。これにより、seccompは特定のsyscallsまたは特定のsyscallsの特定の引数を実行する権限を取り消すことができます。
seccompを始める前に、Linux機能を追加または削除することでアプリケーションを制御できるかどうかを検討する必要があります。 詳細については、「コンテナーの機能の設定」をご参照ください。
検査機能を使用してワークロードのセキュリティリスクを検出する
Container Service for Kubernetes (ACK) クラスターは、ワークロードのセキュリティリスクをリアルタイムで検出するのに役立つ検査機能を提供します。 セキュリティO&Mエンジニアに検査レポートを提供できます。 検査が完了したら、検査レポートで失敗した検査項目と提案を表示できます。 これにより、ワークロードのセキュリティが向上します。
Alibaba Cloudセキュリティセンターの使用
Security Centerを使用して、クラウドネイティブアプリケーションのランタイムで脅威を検出およびブロックできます。 これにより、各ポッドのランタイムが確保されます。 Security Centerは、クラウドネイティブアプリケーションの脅威に関する情報を自動的に取得し、その情報を使用して脅威の分析、脅威の発生源の特定、適切な応答の生成、および脅威の処理を行うことができます。 また、Security Centerは、さまざまな種類のログを関連付け、コンテキストを分析し、悪意のあるコードやコマンドの実行、SQLインジェクション、データ侵害などのリスクをリアルタイムで検出します。 これにより、ビジネスシステムの侵入を防ぎ、脆弱性を特定できます。 Security Centerは、Kubernetesログと操作ログに基づいて、アクションを監査し、リスクをリアルタイムで特定できます。 これにより、ACKやその他のオーケストレーションプラットフォームでのコンテナエスケープ、AccessKey違反、不正アクセスのリスクを軽減できます。 詳しくは、「Security Center の概要」をご参照ください。