Я хочу прикрепить политику IAM к подмножеству ролей IAM, а не ко всем.Это задокументировано ниже и интересно, возможно ли использовать встроенный ресурс для цикла?Работающий поставщик AWS в Terraform v11.13.
Полный список
variable "full_list" {
description = "List of the roles to be created"
default = ["put_log_a","put_log_b","put_log_c","put_log_d","put_log_e"]
}
Подсписок
variable "sub_list" {
description = "Sub list of the roles"
default = ["put_log_c","put_log_e"]
}
Сначала создайте список ролей IAM.
resource "aws_iam_role" "iam_roles" {
count = "${length(var.full_list)}"
name = "${var.role_list[count.index]}_${var.environment}"
assume_role_policy = "${data.template_file.iam_role_trust_policy.rendered}"
force_detach_policies = "true"
tags = "${var.full_list_tags}"
}
Затем создайте политику IAM.
resource "aws_iam_policy" "s3_permissions_policy" {
name = "S3_Policy_${var.environment}"
description = "S3 policy ${var.environment}"
policy = "${file("${path.module}/files/policies/${var.environment}/s3_policy.json")}"
}
Затем присоедините политику к подмножеству списка ролей IAM.
Пример -
resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
count = "${length(var.sub_list)}"
role = "${aws_iam_role.iam_roles.*.name[count.index]}"
policy_arn = "${aws_iam_policy.s3_permissions_policy.arn}"
}
генерирует неправильный результат, sub_list имеет 2 элемента, расположенных в 2 и 4 в full_list.Вместо того, чтобы выбирать их правильные позиции индекса в full_list, он занимает первые две позиции индекса в full_list.Другими словами, он прикрепляет политику к ролям «put_log_a» и «put_log_b», а не «put_log_c» и «put_log_e».
Возможно ли сделать что-то вроде -
resource "aws_iam_role_policy_attachment" "s3_policy_attachment" {
for i "${sub_list}"
if i in "${full_list}"
then
sub_list_item_index_in_full_list = "${full_list[i]}"
role = "${aws_iam_role.iam_roles.*.name[sub_list_item_index_in_full_list]}"
policy_arn = "${aws_iam_policy.s3_permissions_policy.arn}"
}