Amazon ECSタスク定義で特権モードを指定している場合の設定修正手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、特権モードを指定しているコンテナ定義を1つでも含むAmazon ECSタスク定義について、そのリスクと対策を解説します。

ポリシーの説明
まず、AWS Security Hubによるポリシーの説明は以下の通りです。
[ECS.4] ECS コンテナは、非特権として実行する必要があります
Amazon ECS の Security Hub コントロール – AWS Security Hub
このコントロールは、Amazon ECS のタスク定義の、コンテナ定義の
privileged
パラメータがtrue
に設定されているかどうかをチェックします。このパラメータの値がtrue
である場合、このコントロールは失敗します。このコントロールは、Amazon ECS タスク定義の最新のアクティブなリビジョンのみを評価します。
リスクとしては、ホストシステムのリソースや操作に意図しないアクセスが可能となり、セキュリティ上のリスクが増大する可能性があります。
そのため、ECS のタスク定義において、コンテナ定義の privileged
パラメータを false
に設定し、昇格された特権を削除することが望ましいです。これにより、コンテナがホストシステム上で不要な特権を持たず、セキュリティリスクを低減できます。
修復方法
AWS CLIでの修復手順
Amazon ECSタスク定義の特権モード設定をチェックするスクリプトを作成します。
#!/bin/bash
# 色の定義
RED='\\\\033[0;31m'
GREEN='\\\\033[0;32m'
YELLOW='\\\\033[1;33m'
NC='\\\\033[0m' # No Color
echo "ECSタスク定義の特権モードチェックを開始します..."
echo "=============================================="
# リージョン一覧を取得
regions=$(aws ec2 describe-regions --query 'Regions[*].RegionName' --output text)
check_task_definition() {
local task_def_arn=$1
local region=$2
local has_privileged=false
# タスク定義の詳細を取得
task_def=$(aws ecs describe-task-definition \\\\
--task-definition "$task_def_arn" \\\\
--region "$region" 2>/dev/null)
if [ $? -ne 0 ]; then
echo -e "${YELLOW}警告: タスク定義の取得に失敗しました: $task_def_arn${NC}"
return
}
# タスク定義の基本情報を表示
family=$(echo "$task_def" | jq -r '.taskDefinition.family')
revision=$(echo "$task_def" | jq -r '.taskDefinition.revision')
echo "タスク定義ファミリー: $family"
echo "リビジョン: $revision"
# コンテナ定義をチェック
containers=$(echo "$task_def" | jq -r '.taskDefinition.containerDefinitions[]')
echo "$containers" | while read -r container; do
container_name=$(echo "$container" | jq -r '.name')
privileged=$(echo "$container" | jq -r '.privileged // false')
echo "コンテナ名: $container_name"
if [ "$privileged" = "true" ]; then
echo -e "${RED}警告: 特権モードが有効になっています${NC}"
has_privileged=true
# 修正のための推奨事項を表示
echo -e "${YELLOW}推奨される修正方法:${NC}"
echo "1. タスク定義を更新し、特権モードを無効化してください"
echo "以下は修正後のタスク定義の例です:"
cat << EOF
{
"family": "$family",
"containerDefinitions": [
{
"name": "$container_name",
"privileged": false,
// その他の必要な設定
}
]
}
EOF
else
echo -e "${GREEN}✓ 特権モードは無効です(推奨設定)${NC}"
fi
done
if [ "$has_privileged" = true ]; then
echo -e "\\\\n${YELLOW}セキュリティリスク:${NC}"
echo "- 特権モードが有効な場合、コンテナはホストインスタンス上で root 権限を持ちます"
echo "- これにより、コンテナがホストシステムのリソースに無制限にアクセスできる可能性があります"
echo "- 必要な場合を除き、特権モードは無効にすることを強く推奨します"
fi
echo "----------------------------------------"
}
# メイン処理
for region in $regions; do
echo "リージョン: $region のチェックを開始..."
# タスク定義の一覧を取得
task_families=$(aws ecs list-task-definition-families \\\\
--status ACTIVE \\\\
--region "$region" \\\\
--query 'families[]' \\\\
--output text)
if [ -n "$task_families" ]; then
for family in $task_families; do
# 最新のアクティブなタスク定義を取得
task_def=$(aws ecs describe-task-definition \\\\
--task-definition "$family" \\\\
--region "$region" \\\\
--query 'taskDefinition.taskDefinitionArn' \\\\
--output text)
if [ -n "$task_def" ]; then
check_task_definition "$task_def" "$region"
fi
done
else
echo "アクティブなタスク定義ファミリーは見つかりませんでした"
fi
echo "================================================"
done
echo "チェック完了"
このスクリプトの主な機能と使用方法を説明します:
主な機能:
- 全リージョンのECSタスク定義をチェック
- 各タスク定義の特権モード設定を確認
- セキュリティリスクの評価
- 修正のための推奨事項を提供
使用方法:
- スクリプトを実行可能にします:
chmod +x ecs-privileged-check.sh
2. スクリプトを実行:
./ecs-privileged-check.sh
チェック項目:
- 特権モード設定:
- privilegedパラメータの値
- コンテナごとの設定状態
- タスク定義の詳細:
- ファミリー名
- リビジョン番号
- コンテナ設定
出力の見方:
- 🟢 緑色:安全な設定(特権モード無効)
- 🔴 赤色:危険な設定(特権モード有効)
- 🟡 黄色:警告と推奨事項
修正例:
{
"family": "my-task-definition",
"containerDefinitions": [
{
"name": "my-container",
"privileged": false,
"image": "my-image",
// その他の必要な設定
}
]
}
セキュリティリスク:
- ホストシステムへの無制限アクセス
- コンテナのエスケープリスク
- システムリソースの乱用
このスクリプトを使用することで、環境内のECSタスク定義の特権モード設定を簡単にチェックし、必要な修正作業を特定できます。
最後に
今回は、Amazon ECS のタスク定義において privileged モードが有効になっている場合のリスクとその対策についてご紹介しました。 コンテナに不要な特権を付与すると、ホストシステムのリソースに意図しないアクセスが可能となり、セキュリティリスクが高まる可能性があります。 設定を確認し、privileged が有効になっていた場合は、本記事を参考に修正してみてください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。