在terraform中,可以按如下方式指定长按键:
resource "aws_iam_role_policy" "foo-policy" {
role = "${aws_iam_role.foo-role.name}"
name = "foo-policy"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}
EOF
}
这是IAM策略文档的常见模式。该方法记录为here,并且是AWS IAM role policy page on terraform中给出的示例。有没有办法从外部文件中读取文档?
这有很多好处:
答案 0 :(得分:9)
您可以使用terraform的template_file数据源。只需将策略写入您的terraform脚本可以访问的路径中的文件,然后创建引用它的template_file数据源。例如:
data "template_file" "policy" {
template = "${file("somepath/my-policy.json")}"
}
然后,在foo-policy中,你会像这样呈现它:
policy = "${data.template_file.policy.rendered}"
template_file的另一个好处是可以在引用的文件中插入变量。例如,您可以在策略中包含${IAMUser}
或${AWSAccountNumber}
等变量,并通过template_file vars选项传递它,这样您就可以重用策略文件。