【问题标题】:How to define AWS IAM attribute-based access control in terraform如何在 terraform 中定义基于 AWS IAM 属性的访问控制
【发布时间】:2020-10-02 18:07:21
【问题描述】:

我正在我的 terraform 文件中为 AWS IAM 定义基于属性的访问控制 (ABAC)。示例政策是

resource "aws_iam_role_policy" "testS3" {
name = "testS3"

policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket"
        ],
        "Resource": "arn:aws:s3:::dev-${aws:PrincipalTag/team}*"
    }
]
}
EOF
}

如何在 terraform 中调用 ${block}? Terraform 将其转换为自己的变量。

【问题讨论】:

  • 这看起来不像是正确的 terraform 语法...您是否要转义该字符串上的 ${aws:PrincipalTag/team}
  • 是的,我想我需要添加额外的 $ 才能使其正常工作。它与$${aws:PrincipalTag/team} 合作
  • 可能值得在您的问题中链接到docs.aws.amazon.com/IAM/latest/UserGuide/…,以避免混淆可能不知道 IAM 变量使用与 Terraform 字符串模板插值相同的语法的 Terraform 人员。

标签: json variables terraform amazon-iam


【解决方案1】:

它与字符串中的额外 $ 一起使用。

resource "aws_iam_role_policy" "testS3" {
name = "testS3"

policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
   {
    "Effect": "Allow",
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::dev-$${aws:PrincipalTag/team}*"
   }
  ]
}
EOF
}

我也尝试使用variables.tf 文件并在 json 中引用了此处的变量。

variables.tf

variable "principaltag" {
default = "$${aws:PrincipalTag/tedteam}"
}

****

policy.tf

resource "aws_iam_role_policy" "testS3" {
name = "testS3"

policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
   {
    "Effect": "Allow",
    "Action": [
        "s3:ListBucket"
    ],
    "Resource": "arn:aws:s3:::dev-${var.principaltag}*"
   }
  ]
}
EOF
}

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多