【发布时间】:2021-10-22 12:04:14
【问题描述】:
我正在创建一个 AWS IAM 策略,该策略将资源访问权限授予多个远程账户。我在一个列表中列出了这些帐户 - 都很好。但是,当 TF 检查后续 plan 的当前状态时,它会以不同的顺序返回,并且 TF 认为必须对其进行更正。如何忽略列表顺序?
这是我的资源:
resource "aws_ecr_repository_policy" "repo" {
policy = jsonencode({
Statement = [
{
Principal = {
AWS = [
"arn:aws:iam::123456789012:root",
"arn:aws:iam::567890123456:root",
"arn:aws:iam::987654321098:root",
]
...
现在在随后的 terraform plan 运行中,我得到了一些变化:
~ {
~ Principal = {
~ AWS = [
+ "arn:aws:iam::987654321098:root", <<< swapped order
"arn:aws:iam::123456789012:root",
"arn:aws:iam::567890123456:root",
- "arn:aws:iam::987654321098:root", <<< and here
]
}
AWS 的返回顺序是不可预测的,每次都会改变。我可以以某种方式忽略订单吗?理想情况下,不要忽略带有生命周期/ignore_changes 的整个 policy 块。
【问题讨论】:
-
或许可以使用ignore_changes 排除所有原则,但不会仅限于对订单的更改。
-
@Marcin 我该怎么做,因为校长在
jsonencode()里面? -
这让我很困惑。我有一个 ECR 政策,它也明确地允许我们组织中的某些帐户,就像您在这里一样,但我们没有看到重新排序帐户时出现任何差异流失。我看到的唯一区别是我们的只是一个静态列出帐户 ID 的heredoc,而不是使用
jsonencode(它早于jsonencode的一系列修复/添加,允许这样做)。相反,如果您修改策略以使用aws_iam_policy_documentdata source 是否有效? -
同
aws_iam_policy_document
标签: amazon-web-services terraform terraform-provider-aws