自分で作成した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的な書き方ですかね。