1. ホーム
  2. amazon-web-services

[解決済み] Terraform: AWSマネージドポリシーをロールにアタッチする正しい方法?

2022-11-09 23:15:23

質問

私は既存のAWSマネージドロールの1つをポリシーにアタッチしたいのですが、以下は私の現在のコードです。

resource "aws_iam_role_policy_attachment" "sto-readonly-role-policy-attach" {
  role       = "${aws_iam_role.sto-test-role.name}"
  policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}

ARN をハードコードする代わりに、管理されたポリシーをモデル化し、それを参照する良い方法はありますか? ARN/パスまたはこのような他のものをハードコードするときはいつも、より良い方法があったことを後で知ることになるような気がします。

Terraformにマネージドポリシーをモデル化するようなものは既に存在するのでしょうか? それとも、ARN をハードコードするのが正しい方法なのでしょうか?

どのように解決するのですか?

この IAM ポリシー データソース はこれに最適です。データリソースは、Terraformがアクティブに管理しないが、Terraformから参照されるデータやリソースを記述するために使用されます。

今回の例では、以下のように管理対象ポリシーのデータリソースを作成します。

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

データソースの名前です。 ReadOnlyAccess というデータソースの名前は、完全にあなた次第です。マネージドポリシーの場合、私は一貫性を保つためにポリシー名と同じ名前を使用しますが、同じように簡単に名前を付けることができます readonly という名前にすることもできます。

次に、次のようにIAMポリシーをロールに添付します。

resource "aws_iam_role_policy_attachment" "sto-readonly-role-policy-attach" {
  role       = "${aws_iam_role.sto-test-role.name}"
  policy_arn = "${data.aws_iam_policy.ReadOnlyAccess.arn}"
}