terraformを使ってecsでサービスを作ろうとしたのですが、「ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secrets from ssm: service call has been retried 1 time」というエラーが出ました。
ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secrets from ssm: service call has been retried 1 time
ResourceInitializationError: シークレットまたはレジストリ認証の取得ができません: 実行リソースの取得に失敗しました: ssmからシークレットを取得できません: サービスコールが1回再試行されました
どうやら、ecsからSSMのパラメータストアの値を取ってこれなかったようです。
目次
問題
ecsのiamはこのように定義していました。
これでは権限が足りませんでした。
####################################################
# ECS IAM Role
####################################################
resource "aws_iam_role" "ecs_task_execution_role" {
  name               = "ecs_task_execution_role"
  assume_role_policy = jsonencode({
    Version   = "2012-10-17"
    Statement = [
      {
        Effect    = "Allow"
        Principal = { Service = "ecs-tasks.amazonaws.com" }
        Action    = "sts:AssumeRole"
      }
    ]
  })
}解決方法
managed_policy_arnsを使って、ecsのiamに権限を追加します。
追加した権限は
- AmazonECSTaskExecutionRolePolicy
- AmazonSSMReadOnlyAccess
です。
####################################################
# ECS IAM Role
####################################################
resource "aws_iam_role" "ecs_task_execution_role" {
  name               = "ecs_task_execution_role"
  assume_role_policy = jsonencode({
    Version   = "2012-10-17"
    Statement = [
      {
        Effect    = "Allow"
        Principal = { Service = "ecs-tasks.amazonaws.com" }
        Action    = "sts:AssumeRole"
      }
    ]
  })
  managed_policy_arns = [
    "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy",
    "arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess"
  ]
}
 
	







コメント