【发布时间】:2022-08-19 05:41:18
【问题描述】:
我一直在尝试在没有/非常有限的互联网设置中设置我的 Terragrunt EC2 环境。
当前设置:
- AWS 网络防火墙将域列入白名单以允许流量,并且除了少数域外,大多数 Internet 流量都被阻止。
- 我运行 terragrunt 代码的 EC2 实例,它有一个实例配置文件,可以承担
providers中的角色 - 为 sts、s3、dynamodb、codeartifact 等设置 VPC 端点
- 所有凭据(假定的角色等)都有效并且已经过验证
远程状态和提供者文件
remote_state {
backend = \"s3\"
generate = {
path = \"backend.tf\"
if_exists = \"overwrite_terragrunt\"
}
config = {
bucket = \"***\"
key = \"${path_relative_to_include()}/terraform.tfstate\"
region = \"ap-southeast-1\"
encrypt = true
dynamodb_table = \"***\"
}
}
# Dynamically changes the role depending on which account is being modified
generate \"providers\" {
path = \"providers.tf\"
if_exists = \"overwrite\"
contents = <<EOF
provider \"aws\" {
region = \"${local.env_vars.locals.aws_region}\"
assume_role {
role_arn = \"arn:aws:iam::$***\"
endpoints {
sts = \"https://sts.ap-southeast-1.amazonaws.com\"
s3 = \"https://s3.ap-southeast-1.amazonaws.com\"
dynamodb = \"https://dynamodb.ap-southeast-1.amazonaws.com\"
}
}
EOF
}
使用 Internet(关闭防火墙):
- 我能够运行所有 terragrunt 命令
没有互联网
- 我只要允许“registry.terraform.io”通过防火墙
- 我可以通过 aws sts 假设角色承担
providers中列出的角色,并且可以列出 dynamodb 中的表和 s3 存储桶中的文件 - 我可以使用实例配置文件在我的 EC2 实例上运行
terragrunt init,我认为 terragrunt 确实使用了正确的 sts_endpoint - 但是,当我运行
terragrunt apply时,它会挂在`DEBU[0022] 运行命令:terraform plan prefix=[***] 阶段 - 在我的 CloudTrail 中,我确实看到 Terragrunt 为事件
GetCallerIdentity假定了用户名aws-go-sdk-1660077597688447480,所以我认为提供者能够承担在providers块中声明的角色 - 我尝试为
sts、s3和dynamodb添加自定义端点,但它仍然挂起。
我怀疑 terraform 在进行 AWS SDK 调用时仍在尝试使用互联网,这导致terragrunt apply 被卡住。
- 是否有我需要自定义添加的端点的完整列表,或者我应该将域列表列入白名单才能运行
terragrunt apply?
-
我猜 Terraform 仍在尝试访问公共端点。您可以在 AWS 提供商配置中定义服务端点:registry.terraform.io/providers/hashicorp/aws/latest/docs/…。
-
我确实尝试通过将端点添加到提供程序块中`端点 { sts = \"sts.ap-southeast-1.amazonaws.com\" s3 = \"s3.ap-southeast-1.amazonaws.com\" dynamodb = \"dynamodb.ap-southeast-1.amazonaws.com\" }` 但我怀疑端点是还不够,所以想知道人们是否知道需要哪些完整的端点列表,或者是否需要添加其他标志
-
您是仅使用
terragrunt apply,还是添加了一些开关,例如run-all? -
我正在使用
terragrunt apply,运行run-all 应该是相同的,因为它循环了terragrunt apply否? -
好吧,我在 CI/CD 管道中遇到了
run-all的问题,因此我提出了问题。
标签: terraform terraform-provider-aws terragrunt