

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

# ランタイムセキュリティ
<a name="runtime-security"></a>

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

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

## セキュリティコンテキストと組み込みの Kubernetes コントロール
<a name="_security_contexts_and_built_in_kubernetes_controls"></a>

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

### Linux の機能
<a name="_linux_capabilities"></a>

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

### Seccomp
<a name="_seccomp"></a>

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

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

```
securityContext:
  seccompProfile:
    type: RuntimeDefault
```

1.22 以降 (アルファでは 1.27 以降安定）、上記`RuntimeDefault`は[単一の kubelet フラグ](https://kubernetes.io/docs/tutorials/security/seccomp/#enable-the-use-of-runtimedefault-as-the-default-seccomp-profile-for-all-workloads) を使用してノード上のすべての Pod に使用できます`--seccomp-default`。次に、 で指定されたプロファイル`securityContext`は、他のプロファイルにのみ必要です。

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

### AppArmor と SELinux
<a name="_apparmor_and_selinux"></a>

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

AppArmor と SELinux はどちらも Kubernetes と統合されていますが、Kubernetes 1.28 以降では AppArmor プロファイルを[注釈](https://kubernetes.io/docs/tutorials/security/apparmor/#securing-a-pod)で指定する必要があります。SELinux ラベルはセキュリティコンテキストの [SELinuxOptions](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.28/#selinuxoptions-v1-core) フィールドから直接設定できます。

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

## 推奨事項
<a name="_recommendations"></a>

### Amazon GuardDuty を使用したランタイムのモニタリングと EKS 環境への脅威の検出
<a name="_use_amazon_guardduty_for_runtime_monitoring_and_detecting_threats_to_your_eks_environments"></a>

現在、EKS ランタイムを継続的にモニタリングし、EKS 監査ログを分析し、マルウェアやその他の疑わしいアクティビティをスキャンするソリューションがない場合、Amazon では、AWS 環境を保護するためのシンプルで高速、安全、スケーラブル、および費用対効果の高いワンクリック方法を必要とするお客様に [Amazon GuardDuty](https://aws.amazon.com/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 オンラインテックトーク[「Amazon GuardDuty で Amazon EKS の脅威検出を強化 - AWS オンラインテックトーク](https://www.youtube.com/watch?v=oNHGRRroJuE)」を見て、これらの追加の EKS セキュリティ機能を数分でstep-by-step有効にする方法を確認してください。

### オプション: ランタイムモニタリングにサードパーティーソリューションを使用する
<a name="_optionally_use_a_3rd_party_solution_for_runtime_monitoring"></a>

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

### seccomp ポリシーを作成する前に Linux 機能の追加/削除を検討する
<a name="_consider_adddropping_linux_capabilities_before_writing_seccomp_policies"></a>

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

seccomp を使用する前に、Linux 機能を追加/削除すると、必要なコントロールが得られるかどうかを検討してください。詳細については、「 [コンテナの機能の設定](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container)」を参照してください。

### Pod セキュリティポリシー (PSPs) を使用して目標を達成できるかどうか確認する
<a name="_see_whether_you_can_accomplish_your_aims_by_using_pod_security_policies_psps"></a>

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

**警告**  
Kubernetes 1.25 PSPsは削除され、[Pod Security Admission](https://kubernetes.io/docs/concepts/security/pod-security-admission/) Controller に置き換えられています。既存のサードパーティーの代替手段には、OPA/Gatekeeper や Kyverno などがあります。PSPs で一般的に見られるポリシーを実装するための Gatekeeper 制約と制約テンプレートのコレクションは、GitHub の [Gatekeeper ライブラリ](https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/pod-security-policy)リポジトリから取得できます。またPSPsの多くの置き換えは、[ポッドセキュリティ標準](https://kubernetes.io/docs/concepts/security/pod-security-standards/)の完全なコレクションを含む [Kyverno ポリシーライブラリ](https://main.kyverno.io/policies/)にあります。

## ツールとリソース
<a name="iam-tools"></a>
+  [開始する前に知っておくべき 7 つのこと](https://itnext.io/seccomp-in-kubernetes-part-i-7-things-you-should-know-before-you-even-start-97502ad6b6d6) 
+  [AppArmor ローダー](https://github.com/kubernetes/kubernetes/tree/master/test/images/apparmor-loader) 
+  [プロファイルを使用したノードのセットアップ](https://kubernetes.io/docs/tutorials/clusters/apparmor/#setting-up-nodes-with-profiles) 
+  [Security Profiles Operator](https://github.com/kubernetes-sigs/security-profiles-operator) は、ユーザーが Kubernetes クラスターで SELinux、seccomp、AppArmor を簡単に使用できるようにする Kubernetes の機能強化です。実行中のワークロードからプロファイルを生成し、Pod で使用する Kubernetes ノードにプロファイルをロードする機能の両方を提供します。
+  [Inspektor Gadget](https://github.com/inspektor-gadget/inspektor-gadget) を使用すると、Seccomp プロファイルの生成の支援など、Kubernetes でのランタイム動作のさまざまな側面を検査、トレース、プロファイリングできます。
+  [Aqua](https://www.aquasec.com/products/aqua-cloud-native-security-platform/) 
+  [クォーリス](https://www.qualys.com/apps/container-security/) 
+  [スタックロックス](https://www.stackrox.com/use-cases/threat-detection/) 
+  [Sysdig Secure](https://sysdig.com/products/kubernetes-security/) 
+  [プリズム](https://docs.paloaltonetworks.com/cn-series) 
+  [SUSE オープンソースのゼロトラストコンテナセキュリティプラットフォームによる NeuVector ](https://www.suse.com/neuvector/) は、プロセスプロファイルルールとファイルアクセスルールを提供します。