🧐

「AssumeRole policy may only specify STS AssumeRole actions」の解決策

2022/03/27に公開

TerraformでIAMロールを作るときにapplyすると以下のエラーが発生する。
Terraform Version 1.1.7
Provider version 4.5

Error: failed creating IAM Role (xxxxxxx-iam-role): MalformedPolicyDocument: AssumeRole policy may only specify STS AssumeRole actions.
│       status code: 400, request id: xxxxxxxxxxxxxxxxxxxxx
│ 
│   with aws_iam_role.app_iam_role,
│   on iam.tf line 20, in resource "aws_iam_role" "app_iam_role":
│   20: resource "aws_iam_role" "app_iam_role" {

原因

IAMロールの信頼ポリシーのdataブロックで、actions = ["sts:assumerole"]と書いていたのが原因。
actions = ["sts:AssumeRole"] のように、各単語の1文字目を大文字で書くcamel caseで書かないといけなかった。

data "aws_iam_policy_document" "ec2_assume_role" {
  statement {
    actions = ["sts:assumerole"] # ココが原因

    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }
}

AssumeRole policy may only specify STS AssumeRole actions. って言われるから、「いや、アクションしか書いてないけどな?」ってハマってたが、解決してみると単純すぎて脱力した。

Discussion