AWS managed policyを作成したIAMroleに紐づける

自分で作成したIAMpoliciesであれば、datasource利用してPolicy document作成し、aws_iam_role_policy_attachmentで紐づければ良いけど、AWS managedの場合どうするのがよいか調べたのでメモ。

方法1 - 直接ARNを書く

例えば AmazonSSMManagedInstanceCore (arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore) ポリシをIAMrole (my-test-role)に付与したい場合は下記な感じ。

resource "aws_iam_role" "my_test_role" {
    name = "my-test-role"
    ....
}

resource "aws_iam_role_policy_attachment" "my_test_role_pol_attachment" {
    role            = aws_iam_role.my_test_role.name
    policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

方法2 - data source を利用する

方法1同様、 AmazonSSMManagedInstanceCore (arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore) ポリシをIAMroleに付与したい場合は下記のようになる。

resource "aws_iam_role" "my_test_role" {
    name = "my-test-role"
    ....
}

data "aws_iam_policy" "AmazonSSMManagedInstanceCore" {
    arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_role_policy_attachment" "my_test_role_pol_attachment" {
    role            = aws_iam_role.my_test_role.name
    policy_arn = data.aws_iam_policy.AmazonSSMManagedInstanceCore.arn
}

方法2の方がTerraform的な書き方ですかね。

参考

stackoverflow.com