Terraform 无法使用 Parameter Store 中的数据创建策略
Terraform fails to create a policy using data from Parameter Store
我有一个以逗号分隔的 IP 地址列表,以字符串形式存储在 Parameter Store 中。在 Terraform 中,我试图将它们插入到 S3 存储桶策略的声明中。
Parameter Store 中的值:10.7.60.210/32, 10.3.113.172/32, 10.9.128.86/32, 10.7.33.40/29, 10.1.168.30/32
data "aws_ssm_parameter" "office_ips" {
name = "/ops/office/ips"
}
locals {
ip_list = ["${split(",", data.aws_ssm_parameter.office_ips.value)}"]
}
resource "aws_s3_bucket_policy" "internal" {
bucket = "${local.bucket_name}"
policy = <<POLICY
{
"Version": "2012-10-17",
"Id": "allowInternalAccess",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::${local.bucket_name}/app/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"${jsonencode(concat(formatlist("%s", local.ip_list)))}"
]
}
}
}
]
}
POLICY
}
当我 运行 terraform plan
我收到以下信息:
aws_s3_bucket_policy.internal-工具:"policy" 包含无效的 JSON:数组元素
后的无效字符“1”
问题是我在 Parameter Store 中将数据存储为 String
,而我本应将数据存储为 StringList
。
我有一个以逗号分隔的 IP 地址列表,以字符串形式存储在 Parameter Store 中。在 Terraform 中,我试图将它们插入到 S3 存储桶策略的声明中。
Parameter Store 中的值:10.7.60.210/32, 10.3.113.172/32, 10.9.128.86/32, 10.7.33.40/29, 10.1.168.30/32
data "aws_ssm_parameter" "office_ips" {
name = "/ops/office/ips"
}
locals {
ip_list = ["${split(",", data.aws_ssm_parameter.office_ips.value)}"]
}
resource "aws_s3_bucket_policy" "internal" {
bucket = "${local.bucket_name}"
policy = <<POLICY
{
"Version": "2012-10-17",
"Id": "allowInternalAccess",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::${local.bucket_name}/app/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"${jsonencode(concat(formatlist("%s", local.ip_list)))}"
]
}
}
}
]
}
POLICY
}
当我 运行 terraform plan
我收到以下信息:
aws_s3_bucket_policy.internal-工具:"policy" 包含无效的 JSON:数组元素
后的无效字符“1”问题是我在 Parameter Store 中将数据存储为 String
,而我本应将数据存储为 StringList
。