Динамический документ политики AWS IAM с участниками

#amazon-s3 #module #terraform

Вопрос:

Я создаю динамический документ политики AWS IAM «ОТ» статического «до» динамического», но в части «принципалы» приводится «аргумент с именем «принципалы» здесь не ожидается»

Если я удалю «участников» из документа aws_iam_policy_document, это сработает. Любое предложение было бы полезно.

От

 data "aws_iam_policy_document" "bucket_policy" {
  statement {
    principals {
      type        = "AWS"
      identifiers = [
        "arn:aws:iam::sdfsdfsdeploy",
        "arn:aws:iam::sdfsdfsdeploy/OrganizationAccountAccessRole"
      ]
    }

    actions = [
      "s3:GetObject",
      "s3:PutObject"
    ]

    resources = formatlist("arn:aws:s3:::%s/*", var.bucket_name)
  }
  
}
 

Для
this code in source = "../../modules/s3/main.tf"

 data "aws_iam_policy_document" "bucket_policy" {
  dynamic "statement" {
    for_each = var.policies_list
    iterator = role
    content {
      effect = lookup(role.value, "effect", null)
      principals = lookup(role.value, "principals", null)
      actions = lookup(role.value, "actions", null)
      resources = lookup(role.value, "resources", null)
    }
  }
}
 
 module "s3_test" {
  source = "../../modules/s3"  

  region                                    = var.region
  
  policies_list = [
    {
      effect = "Allow"
      principals = {
        type        = "AWS"
        identifiers = [
          "arn:aws:iam::3ssdfsdfy",
          "arn:aws:iam::3ssdfsdfy:role/OrganizationAccountAccessRole"
        ]
      }
      actions = [
        "s3:GetObject",
        "s3:PutObject"
      ]
      resources = formatlist("arn:aws:s3:::%s/*", "teskjkjsdkfkjskdjhkjfhkjhskjdf")
    }
  ]

}
 

Комментарии:

1. Что такое ../../modules/s3 код?

2. источник = «terraform-aws-модули/s3-ведро/aws» это может быть что угодно.

Ответ №1:

Нашел его.

 variable "policies_list" {
  description = "nested block: s3_aws_iam_policy_document"
  type = set(object(
    {
      actions =  list(string)
      effect =  string
      principals = set(object(
        {
          type                        = string
          identifiers                 = list(string)
        }
      ))
      resources  =  list(string)
    }
  ))
  default = []
}
 
 data "aws_iam_policy_document" "bucket_policy" {
  dynamic "statement" {
    for_each = var. policies_list
    iterator = role
    content {
      effect = lookup(role.value, "effect", null)
      actions = lookup(role.value, "actions", null)
      dynamic "principals" {
        for_each = role.value.principals
        content {
          type = principals.value["type"]
          identifiers = principals.value["identifiers"]
        }
      }
      resources = lookup(role.value, "resources", null)
    }
  }
}
 

на основе
https://github.com/niveklabs/tfwriter/blob/1ea629ed386bbe6a8f21617a430dae19ba536a98/google-beta/r/google_storage_bucket.md