我正在尝试将多个值传递给数据资源“ aws_iam_policy_document”中的主要标识符。出现以下错误
属性“标识符”的值不合适:元素0:需要字符串。
s3_values变量定义为type = any并将值设置为 ....
s3_values:
bucket: bucketname1 s3_arns: - arn:aws:iam::1234567890:root - arn:aws:iam::2345678901:role/s3-read-role
数据“ aws_iam_policy_document”“ s3_policy” {
count = length(var.s3_arns)
statement {
sid = "1"
effect = "Allow"
principals {
type = "AWS"
identifiers = ["${var.s3_values[count.index]["s3_arns"]}"]
}
actions = ["s3:PutObject"]
resources = ["arn:aws:s3:::${var.s3_values[count.index]["bucket"]}/*"]
}
}
我收到以下错误
属性“标识符”的值不合适:元素0:需要字符串。
当仅传递一个值时,它起作用,但是当我们将多个值传递给变量s3_arns时,它不起作用。
答案 0 :(得分:0)
您似乎正在尝试为单个S3存储桶创建多个策略文档。最好使用创建可以访问所传递的每个ARN的单个策略文档,而不是使用count创建多个文档。
当前它适用于一个ARN,因为identifiers
字段传递了一个字符串,并创建了一个包含一个字符串元素的列表。当您传递ARN列表时,identifiers
字段将创建一个列表,该列表的列表元素包含ARN字符串。
我将通过使s3_arns
字段始终为字符串列表,并删除数据资源上的count
字段来解决此问题。完成后,您可以将行标识符更改为identifiers = var.s3_values.s3_arns
,将资源行更改为resources = ["arn:aws:s3:::${var.s3_values.bucket}/*"]