📖

managed_policy_arns is deprecatedの解決方法

に公開

概要


上記のようなIAMロールのリソース内でエラーが出ていたがうざいなと思いつつ
時間がなかったので放置していたが我慢の限界が来たので調べて見た

解決方法

単純にIAMロールの中にIAMポリシーを記述することが非推奨になったみたいです

一つのリソースに複数のリソースの定義を含むのがダメになった感じですね

一つ一つリソースごとに定義して書くとコードが分離されて可読性が上がるから変わったのでしょう

まぁでも個人的に非推奨の方が見やすい...

非推奨

resource "aws_iam_role" "hoge_role" {
  name               = "hoge-dev-role"
  assume_role_policy = jsonencode({
    Version   = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      },
    ]
  })
  managed_policy_arns = [
    "arn:aws:iam::aws:policy/CloudWatchFullAccess"
  ]
}

推奨

resource "aws_iam_role" "hoge_role" {
  name               = "hoge-dev-role"
  assume_role_policy = jsonencode({
    Version   = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      },
    ]
  })
-  managed_policy_arns = [
-    "arn:aws:iam::aws:policy/CloudWatchFullAccess"
-  ]
}

+resource "aws_iam_role_policy_attachment"  "cloudwatch_full_access" { 
+  role = aws_iam_role.hoge_role.name 
+  policy_arn = "arn:aws:iam::aws:policy/CloudWatchFullAccess"
+ }

Discussion