ランタイムセキュリティ - Amazon EKS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ランタイムセキュリティ

ランタイムセキュリティは、コンテナの実行中にコンテナをアクティブに保護します。このアイデアは、コンテナ内で悪意のあるアクティビティが発生しないように検出および/または防止することです。これは、Linux 機能、セキュアコンピューティング (seccomp)、AppArmor、SELinux など、Kubernetes と統合された Linux カーネルまたはカーネル拡張機能のさまざまなメカニズムで実現できます。また、Linux カーネルメカニズムの手動設定を少なくして、ベースラインの確立や異常なアクティビティの検出に役立つ Amazon GuardDuty やサードパーティーツールなどのオプションもあります。

重要

Kubernetes は現在、seccomp、AppArmor、または SELinux プロファイルを Nodes にロードするためのネイティブメカニズムを提供していません。手動でロードするか、ブートストラップ時にノードにインストールする必要があります。これは、スケジューラがプロファイルを持つノードを認識しないため、ポッドでそれらを参照する前に実行する必要があります。Security Profiles Operator などのツールが、ノードへのプロファイルのプロビジョニングを自動化する方法を以下に示します。

セキュリティコンテキストと組み込み Kubernetes コントロール

多くの Linux ランタイムセキュリティメカニズムは Kubernetes と緊密に統合されており、Kubernetes セキュリティコンテキストを介して設定できます。このようなオプションの 1 つは privilegedフラグです。これはfalseデフォルトで、有効になっている場合、ホストのルートと基本的に同等です。本番環境のワークロードで特権モードを有効にすることはほぼ常に適切ではありませんが、必要に応じてコンテナに詳細な権限を提供できるコントロールが他にも多数あります。

Linux の機能

Linux 機能を使用すると、ルートユーザーのすべての機能を提供することなく、特定の機能を Pod またはコンテナに付与できます。例としてはCAP_NET_ADMIN、ネットワークインターフェイスまたはファイアウォールの設定を許可する や、システムクロックの操作CAP_SYS_TIMEを許可する などがあります。

Seccomp

セキュアコンピューティング (seccomp) を使用すると、コンテナ化されたアプリケーションが基盤となるホストオペレーティングシステムのカーネルに対して特定の syscall を行うことを防ぐことができます。Linux オペレーティングシステムには数百のシステムコールがありますが、コンテナを実行するために lion が共有する必要はありません。コンテナによって実行できる syscall を制限することで、アプリケーションのアタックサーフェスを効果的に減らすことができます。

Seccomp は、syscalls を傍受し、許可リストに登録されているもののみを通過できるようにすることで機能します。Docker には、ほとんどの汎用ワークロードに適したデフォルトの seccomp プロファイルがあり、containerd などの他のコンテナランタイムは同等のデフォルトを提供します。以下を Pod 仕様の securityContextセクションに追加することで、コンテナランタイムのデフォルトの seccomp プロファイルを使用するようにコンテナまたは Pod を設定できます。

securityContext: seccompProfile: type: RuntimeDefault

1.22 以降 (アルファでは 1.27 以降安定)、上記RuntimeDefault単一の kubelet フラグ を使用してノード上のすべての Pod に使用できます--seccomp-default。次に、 で指定されたプロファイルsecurityContextは、他のプロファイルにのみ必要です。

追加の権限を必要とするモノに対して独自のプロファイルを作成することもできます。これは手動で行うと非常に面倒ですが、Inspektor Gadget (ネットワークポリシーを生成するためのネットワークセキュリティセクションでも推奨) や Security Profiles Operator などのツールがあり、eBPF や ログなどのツールを使用してベースライン特権要件を seccomp プロファイルとして記録できます。Security Profiles Operator では、ポッドとコンテナで使用できるように、記録されたプロファイルのノードへのデプロイを自動化できます。

AppArmor と SELinux

AppArmor と SELinux は、必須アクセスコントロールまたは MAC システムと呼ばれます。概念は seccomp に似ていますが、APIs や機能が異なるため、 特定のファイルシステムパスやネットワークポートなどのアクセスコントロールが可能になります。これらのツールのサポートは Linux ディストリビューションに依存し、Debian/Ubuntu は AppArmor をサポートし、RHEL/CentOS/Bottlerocket/Amazon Linux 2023 は SELinux をサポートします。SELinux の詳細については、「インフラストラクチャセキュリティ」セクションも参照してください。

AppArmor と SELinux はどちらも Kubernetes と統合されていますが、Kubernetes 1.28 以降の AppArmor プロファイルは注釈で指定する必要があります。SELinux ラベルはセキュリティコンテキストの SELinuxOptions フィールドから直接設定できます。

seccomp プロファイルと同様に、上記の Security Profiles Operator は、クラスター内のノードへのプロファイルのデプロイに役立ちます。(将来、プロジェクトは seccomp の場合と同様に AppArmor と SELinux のプロファイルを生成することも目標としています)。

推奨事項

Amazon GuardDuty を使用したランタイムのモニタリングと EKS 環境への脅威の検出

現在、EKS ランタイムを継続的にモニタリングし、EKS 監査ログを分析し、マルウェアやその他の疑わしいアクティビティをスキャンするソリューションがない場合、Amazon では、AWS 環境を保護するためのシンプルで高速、安全、スケーラブル、および費用対効果の高いワンクリック方法を必要とするお客様に Amazon GuardDuty を使用することを強くお勧めします。Amazon GuardDuty は、AWS CloudTrail 管理イベント、AWS CloudTrail イベントログ、VPC フローログ (Amazon EC2 インスタンスから)、Kubernetes 監査ログ、DNS ログなどの基本的なデータソースを分析して処理するセキュリティモニタリングサービスです。また、EKS ランタイムモニタリングも含まれています。悪意のある IP アドレスやドメインのリストなどの脅威インテリジェンスフィードを継続的に更新し、機械学習を使用して、AWS 環境内の予期しないアクティビティ、不正なアクティビティ、悪意のあるアクティビティを特定します。これには、権限のエスカレーション、公開された認証情報の使用、悪意のある IP アドレス、ドメインとの通信、Amazon EC2 インスタンスと EKS コンテナワークロードでのマルウェアの存在、疑わしい API アクティビティの検出などの問題が含まれます。GuardDuty は、GuardDuty コンソールまたは Amazon EventBridge で表示できるセキュリティ検出結果を生成することで、AWS 環境のステータスを通知します。GuardDuty は、検出結果を Amazon Simple Storage Service (S3) バケットにエクスポートし、AWS Security Hub や Detective などの他のサービスと統合するためのサポートも提供します。

この AWS Online Tech Talk「Amazon GuardDuty で Amazon EKS の脅威検出を強化 - AWS Online Tech Talks」を見て、これらの追加の EKS セキュリティ機能を数分でstep-by-step有効にする方法を確認してください。

オプション: ランタイムモニタリングにサードパーティーソリューションを使用する

Linux セキュリティに慣れていない場合、seccomp プロファイルと Apparmor プロファイルの作成と管理は難しい場合があります。習熟する時間がない場合は、サードパーティーの商用ソリューションの使用を検討してください。その多くは Apparmor や seccomp などの静的プロファイルを超えて移動し、機械学習を使用して疑わしいアクティビティをブロックまたは警告し始めています。これらのソリューションのいくつかは、 ツールセクションで以下にあります。その他のオプションについては、AWS Marketplace for Containers を参照してください。

seccomp ポリシーを作成する前に Linux 機能の追加/削除を検討する

機能には、syscalls が到達可能なカーネル関数のさまざまなチェックが含まれます。チェックが失敗した場合、syscall は通常エラーを返します。チェックは、特定の syscall の最初、または複数の異なる syscall を通じて到達可能な領域 (特定の特権ファイルへの書き込みなど) でカーネルのより深い方で行うことができます。一方、Seccomp は、実行前にすべての syscall に適用される syscall フィルターです。プロセスは、特定の syscall を実行する権利、または特定の syscall の特定の引数を取り消すことができるフィルターを設定できます。

seccomp を使用する前に、Linux 機能を追加/削除すると、必要なコントロールが得られるかどうかを検討してください。詳細については、「 コンテナの機能の設定」を参照してください。

Pod セキュリティポリシー (PSPs) を使用して目標を達成できるかどうか確認する

Pod セキュリティポリシーは、過度に複雑になることなくセキュリティ体制を改善するさまざまな方法を提供します。seccomp プロファイルと Apparmor プロファイルを構築する前にPSPs で使用できるオプションを確認してください。

警告

Kubernetes 1.25 以降、PSPsは削除され、Pod Security Admission Controller に置き換えられています。既存のサードパーティーの代替手段には、OPA/Gatekeeper や Kyverno などがあります。PSPs で一般的に見られるポリシーを実装するための Gatekeeper 制約と制約テンプレートのコレクションは、GitHub の Gatekeeper ライブラリリポジトリから取得できます。またPSPsの多くの置き換えは、ポッドセキュリティ標準の完全なコレクションを含む Kyverno ポリシーライブラリにあります。

ツールとリソース