ECSタスクのSecrets Managerアクセス権限エラー

ECSタスクのSecrets Managerアクセス権限エラー

ECSタスクがSecrets Managerから環境変数を取得できない権限エラーとその解決方法について。

AWS #AWS#権限#初学者向け

ECSタスクのSecrets Managerアクセス権限エラー

サムネイル

ECSタスクがSecrets Managerから環境変数を取得できない権限エラーとその解決方法について。

更新日: 8/15/2025

問題の概要

ISSUE - 課題

ECSタスクの起動時に以下のエラーが発生し、タスクが停止する問題が発生しました

ResourceInitializationError: unable to pull secrets or registry auth: 
execution resource retrieval failed: unable to retrieve secret from asm: 
api error AccessDeniedException: User: arn:aws:sts::************:assumed-role/***-ecs-execution-role/**************** 
is not authorized to perform: secretsmanager:GetSecretValue on resource: 
arn:aws:secretsmanager:region:************:secret:***-db-credentials-****** 
because no identity-based policy allows the secretsmanager:GetSecretValue action

原因

ECSタスクで主に使用される2つのIAMロールは、それぞれ異なるタイミングで使用されます

ロール 用途 実行タイミング 必要な権限
Task Execution Role タスク起動時の権限 コンテナ起動前 ECRプル、Secrets Manager読み取り、CloudWatch Logs作成
Task Role アプリケーション実行時の権限 コンテナ起動後 アプリケーションが使用するAWSサービス

Task Definitionのsecrets設定はTask Execution Roleの権限で実行されるため、Task RoleではなくTask Execution Roleに権限が必要です。

解決方法

1. Task Execution Roleへの権限追加

Task Execution Roleに以下のポリシーを追加します

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name-*"
    }
  ]
}

2. Terraformでの実装例

# Task Execution Role用のカスタムポリシー
resource "aws_iam_role_policy" "ecs_execution_secrets_policy" {
  name = "ecs-execution-secrets-policy"
  role = aws_iam_role.ecs_execution_role.id

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Action = [
          "secretsmanager:GetSecretValue"
        ]
        Resource = aws_secretsmanager_secret.your_secret.arn
      }
    ]
  })
}

3. AWS CLIでの権限追加

# ポリシードキュメントの作成
cat > secrets-policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name-*"
    }
  ]
}
EOF

# インラインポリシーの追加
aws iam put-role-policy \
  --role-name your-ecs-execution-role \
  --policy-name SecretsManagerAccess \
  --policy-document file://secrets-policy.json

動作確認

IAM権限の確認

# ロールのポリシー確認
aws iam list-role-policies --role-name your-ecs-execution-role

# ポリシー内容の確認
aws iam get-role-policy \
  --role-name your-ecs-execution-role \
  --policy-name SecretsManagerAccess

ECSサービスの更新

# サービスの強制更新
aws ecs update-service \
  --cluster your-cluster \
  --service your-service \
  --force-new-deployment

ベストプラクティス

権限は必要なリソースに限定します

{
  "Effect": "Allow",
  "Action": "secretsmanager:GetSecretValue",
  "Resource": [
    "arn:aws:secretsmanager:region:account-id:secret:db-credentials-*",
    "arn:aws:secretsmanager:region:account-id:secret:api-keys-*"
  ]
}

Task DefinitionでのSecrets設定例

{
  "containerDefinitions": [
    {
      "name": "app",
      "secrets": [
        {
          "name": "DB_PASSWORD",
          "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:db-credentials:password::"
        },
        {
          "name": "API_KEY",
          "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:api-keys:key::"
        }
      ]
    }
  ]
}

注意点

  • AWSマネージドポリシーAmazonECSTaskExecutionRolePolicyにはSecrets Managerアクセス権限が含まれていません
  • Task Execution RoleとTask Roleの役割を正しく理解し、適切なロールに権限を付与すること
  • Secrets Managerのリソースポリシーでもアクセス制御が可能ですが、IAMロールポリシーでの管理を推奨

検索

検索条件に一致する記事が見つかりませんでした