【问题标题】:Running 'terragrunt apply' on an EC2 Instance housed in a No Internet Environment在无 Internet 环境中的 EC2 实例上运行“terragrunt apply”
【发布时间】: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 terraform-provider-aws terragrunt


【解决方案1】:

我将环境变量TF_LOG 设置为debug,除了registry.terraform.io 域之外,我还能够收集这些:

  • github.com
2022-08-18T15:33:03.106-0600 [DEBUG] using github.com/hashicorp/go-tfe v1.0.0
2022-08-18T15:33:03.106-0600 [DEBUG] using github.com/hashicorp/hcl/v2 v2.12.0
2022-08-18T15:33:03.106-0600 [DEBUG] using github.com/hashicorp/terraform-config-inspect v0.0.0-20210209133302-4fd17a0faac2
2022-08-18T15:33:03.106-0600 [DEBUG] using github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734
  • sts.region.amazonaws.com
  • resource.region.amazonaws.com

您需要在防火墙设置中将这些域添加到白名单中,*.region.amazonaws.com 之类的东西应该可以解决问题,当然,您可以更加严格,而不是使用通配符,您可以指定确切的资源。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2012-09-24
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2020-11-04
    • 2023-03-29
    • 2017-05-03
    • 2015-03-18
    相关资源
    最近更新 更多