我想使用带有Terraform Cloud/Enterprise的AWS假设角色
在Terraform Open Source中,您通常只需要执行一个假定角色,利用CLI上的.aws/Credential配置文件(这是初始身份验证(,并执行假定角色:
provider "aws" {
assume_role {
role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
session_name = "SESSION_NAME"
external_id = "EXTERNAL_ID"
}
}
问题是,对于Terraform Enterprise或Cloud,您不能引用配置文件,因为不可变的基础设施的目录中不会有该文件
Terraform Cloud/Enterprise需要将访问密钥ID和秘密访问密钥设置为变量,以便其基础设施可以通过其管道执行Terraform RUN,并向您想要在其中提供的任何AWS帐户进行身份验证。
所以问题是:我如何利用AWS帐户的访问密钥ID和秘密访问密钥,通过"操作":"sts:AssumeRole",策略来执行AWS假定角色?
我认为,下面的方法会起作用,但Terraform正在通过AWS凭据配置文件信用对具有sts:AsseumeRole策略的帐户进行初始身份验证
Terraform是否可以查看access_key和secret_key,以确定在尝试担任该角色时使用哪个AWS帐户,而不是使用AWS凭据配置文件
provider "aws" {
region = var.aws_region
access_key = var.access_key_id
secret_key = var.secret_access_key
assume_role {
role_arn = "arn:aws:iam::566264069176:role/RemoteAdmin"
#role_arn = "arn:aws:iam::<awsaccount>:role/<rolename>" # Do a replace in "file_update_automation.ps1"
session_name = "RemoteAdminRole"
}
}
为了允许Terraform Cloud/Enterprise获得新的假定角色会话令牌,它需要使用Access_key和Secret_key来告诉它什么AWS帐户具有sts:assembly角色,链接到要提供的成员AWS帐户,而不是AWS Creds Profile
谢谢
如果您启用了业务计划并在基础设施中实现了自托管地形代理,那么这是可以实现的。请参阅视频。
我使用了完全相同的提供程序配置,但没有显式添加acces键。访问密钥作为环境变量添加到Terraform Cloud工作空间中。
如果您的TFE基础设施也托管在AWS中,并且实例配置文件受到您试图承担的角色的信任,那么Terraform Enterprise(TFE(肯定可以做到这一点。
对于Terraform Cloud(TFC(来说,这是一个不同的故事,今天没有办法在TFC和IAM角色之间建立信任,但我们可以利用AWS SDK从环境变量中获取凭据的能力。您有两个选项:
- 在工作区上创建一个
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
环境变量并对它们进行设置(记住将秘密访问密钥标记为敏感(。提供商将在env中提取这些,并与您本地的工作方式相同 - 如果所有工作空间都需要使用相同的访问密钥和密钥,则可以在变量集上设置env变量,该变量集将应用于所有工作空间
现在可以通过OpenID Connect提供程序使用动态凭据。这是他们今年早些时候(2023年2月(推出的一项相对较新的功能。
请参阅公告和官方文档:AWS提供商的动态凭据