Amazon ECSタスク定義でホストプロセス名前空間共有の無効化設定について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、Amazon ECSタスク定義のホストプロセス名前空間共有の無効化について解説します。

ポリシーの説明
[ECS.3] ECS タスクの定義では、ホストのプロセス名前空間を共有しないでください
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/ecs-controls.html#ecs-3
このコントロールは、Amazon ECS のタスク定義が、ホストのプロセス名前空間をそのコンテナと共有するように設定されているかどうかをチェックします。タスク定義が、ホストのプロセス名前空間を、そこで実行されているコンテナと共有している場合、このコントロールは失敗します。このコントロールは、Amazon ECS タスク定義の最新のアクティブなリビジョンのみを評価します。
コンテナとホスト間でプロセスID (PID) 名前空間を共有することは、セキュリティ上のリスクがあるため推奨されません。
PID名前空間は、コンテナ内のプロセスとホストOS上のプロセスを分離するためのLinuxカーネル機能です。これにより、コンテナからは他のコンテナやホストOS自身のプロセスが見えないようになり、プロセスの隔離性が保たれセキュリティが向上します。
しかし、ホストとコンテナがPID名前空間を共有する設定(pidMode: host
)にすると、コンテナ内からホストOS上のすべてのプロセスが見えてしまい、コンテナ内のプロセスが(権限があれば)ホスト上の他のプロセスに影響を与えたり、ホストのシステム情報を不正に取得したりする可能性が生じます。これにより、プロセスの隔離が損なわれ、コンテナからの権限昇格やホストOSへの攻撃リスクが高まります。
そのため、コンテナとホストのPID名前空間は共有せず、適切に分離(pidMode
を未指定、または task
に設定)することで、システムの安全性を確保する必要があります。
修復方法
Task Definitionでの修復手順
ECSタスク定義のJSONファイルにおいて、pidMode
を "host"
に設定しないように修正します。具体的には、pidMode
パラメータ自体を削除するか、"task"
に設定します。(pidMode: "task"
は特定の条件下でのみサポートされます。通常はパラメータ自体を削除するのが最も互換性があります。)
# 修正前のタスク定義JSON (例)
{
"family": "secure-web-app",
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::ACCOUNT_ID:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::ACCOUNT_ID:role/ecsTaskRole",
"pidMode": "host", // ← 問題のある設定
// 以下省略 //
}
↓ 以下の通り修正
# 修正後のタスク定義JSON (例1: pidModeを削除)
{
"family": "secure-web-app",
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::ACCOUNT_ID:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::ACCOUNT_ID:role/ecsTaskRole",
"pidMode": "task", // ← "task" に修正 (Fargate v1.4.0以降などでサポート)
// 以下省略 //
}
修正したJSONを使用して、AWS CLI (aws ecs register-task-definition --cli-input-json file://your-task-def.json
) などで新しいリビジョンを登録し、ECSサービスを更新して新しいタスク定義を使用するようにします。
最後に
今回はホストのPID名前空間をコンテナと共有しておくことによるセキュリティリスクと対処方法についてご紹介しました。 ホストのPID名前空間がコンテナと共有されていると、コンテナからホスト上の全てのプロセスが見えてしまう状況となり、ホスト自体のプロセスに不正にアクセスされたり、情報が漏洩したりする危険性があります。そのため、特別な理由がない限り、コンテナとホストとのPID名前空間の共有 (pidMode: host
) は避けるように設定することをお勧めします。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。