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"
]
}
コメント