Hap*_*ppy 8 amazon-s3 terraform
这是我的s3_policy.json
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"mybucket",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":[
"arn:aws:s3:::${bucket_name}/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"10.xx.xxx.x",
"172.168.xx.x",
........,
.........,
..........,
...........,
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我有一个共同的回购,我用它来做不同的项目.这个通用仓库有一个yaml格式的CIDR IP列表.
我想将它拉入我的Terraform项目,以便我可以重新使用相同的文件而不是硬编码IP地址.
我无法找到一种自动化方法,而不是在此repo中硬编码IP地址.
您可以将 IP 地址用作数据源并使用它。
您的保单文件将如下所示:
resource "aws_iam_policy" "whitelist_ips" {
name = "whitelist_ips"
description = "${var.policy_description}"
policy = <<EOF
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"mybucket",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":[
"arn:aws:s3:::${bucket_name}/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": ["${data.external.ip_addresses.result}"]
}
}
}
]
}
EOF
}
Run Code Online (Sandbox Code Playgroud)
您需要创建一个可以运行的外部数据源,该数据源将从某个位置获取 IP 地址并将 IP 作为逗号分隔的字符串返回。
data "external" "ip_addresses" {
program = ["python", "${path.module}/get_ips.py"]
}
Run Code Online (Sandbox Code Playgroud)
哪里get_ips.py
可能看起来像这样:
#!/usr/bin/env python
from __future__ import print_function
import json
import re
yaml_string = """ - 1.2.3.4/32
- 1.2.3.5/32
- 1.3.0.0/16
"""
result = []
lines = yaml_string.split("\n")
for line in lines:
# Remove empty lines
if line != "":
result.append(re.sub('\s*-\s*', '', line))
print(json.dumps(','.join(result)))
Run Code Online (Sandbox Code Playgroud)
但显然您需要从 Github 获取 YAML 列表,而不是毫无意义地将其硬编码到该数据源中。
归档时间: |
|
查看次数: |
417 次 |
最近记录: |