【发布时间】:2017-07-10 10:42:42
【问题描述】:
如何在“资源”部分转义包含 ${aws:username} 的 HCL 字符串?
我目前使用 Terraform 版本 0.9.9 通过以下方式在 main.tf 文件中创建 AWS 策略:
resource "aws_iam_group_policy" "AllowIndividualUserToSeeTheirAccountInformation" {
name = "AllowIndividualUserToSeeTheirAccountInformation"
group = "${aws_iam_group.pr_faas_developers.id}"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:ChangePassword",
"iam:CreateLoginProfile",
"iam:DeleteLoginProfile",
"iam:GetAccountPasswordPolicy",
"iam:GetAccountSummary",
"iam:GetLoginProfile",
"iam:UpdateLoginProfile"
],
"Effect": "Allow",
"Resource":
[
"arn:aws:iam::XXXXXXXXX:user/${aws:username}"
]
}
]
}
EOF
}
这样做时,Terraform 会尝试插入 ${aws:username} 并且 terraform 将失败,如下所示
terraform.exe plan
Failed to load root config module: Error loading D:\amazonaws-root-master\main.t
f: Error reading config for aws_iam_group_policy[AllowIndividualUserToSeeTheirAc
countInformation]: parse error at 17:51: expected "}" but found ":"
当我如下转义资源字符串时:
"Resource":
[
"arn:aws:iam::XXXXXXXXX:user/\\$\\{aws\\:username\\}"
]
"terraform plan" 和 "terraform apply" 可以正常工作,但 AWS 显示策略中的结果是:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:ChangePassword",
"iam:CreateLoginProfile",
"iam:DeleteLoginProfile",
"iam:GetAccountPasswordPolicy",
"iam:GetAccountSummary",
"iam:GetLoginProfile",
"iam:UpdateLoginProfile"
],
"Effect": "Allow",
"Resource":
[
"arn:aws:iam::XXXXXXXXX:user/\\$\\{aws:username\\}"
]
}
]
}
这与预期的结果不同:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:ChangePassword",
"iam:CreateLoginProfile",
"iam:DeleteLoginProfile",
"iam:GetAccountPasswordPolicy",
"iam:GetAccountSummary",
"iam:GetLoginProfile",
"iam:UpdateLoginProfile"
],
"Effect": "Allow",
"Resource":
[
"arn:aws:iam::XXXXXXXXX:user/${aws:username}"
]
}
]
}
是否有任何解决方案可以在 terraform main.tf 文件中转义 "arn:aws:iam::XXXXXXXXX:user/${aws:username}" 以获得所需的结果?
【问题讨论】:
标签: amazon-web-services terraform