如何在 local-exec 配置程序中从 terraform 继承 aws 凭据
Posted
技术标签:
【中文标题】如何在 local-exec 配置程序中从 terraform 继承 aws 凭据【英文标题】:How to inherit aws credentials from terraform in local-exec provisioner 【发布时间】:2020-03-02 10:00:47 【问题描述】:我有一个 terraform 资源,我需要在它创建后运行 AWS 命令。但我希望它使用 terraform 使用的相同 AWS 凭证运行。 AWS 提供商正在使用一个配置文件,然后它使用该配置文件来承担角色:
provider "aws"
profile = "terraform"
assume_role
role_arn = local.my_arn
我曾希望 terraform 会公开必要的环境变量,但似乎并非如此。最好的方法是什么?
【问题讨论】:
【参考方案1】:您能否通过 AWS 配置使用角色假设?文档:Using an IAM Role in the AWS CLI
~/.aws/config:
[user1]
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = SECRET_KEY
[test-assume]
role_arn = arn:aws:iam::123456789012:role/test-assume
source_profile = user1
main.tf:
provider "aws"
profile = var.aws_profile
version = "~> 2.0"
region = "us-east-1"
variable "aws_profile"
default = "test-assume"
resource "aws_instance" "instances"
ami = "ami-009d6802948d06e52"
instance_type = "t2.micro"
subnet_id = "subnet-002df68a36948517c"
provisioner "local-exec"
command = "aws sts get-caller-identity --profile $var.aws_profile"
如果你不能,这是一种非常混乱的方法。我不特别推荐这种方法,但它会起作用。这依赖于jq
,但您也可以使用其他东西来解析aws sts assume-role
命令的输出
main.tf:
provider "aws"
profile = var.aws_profile
version = "~> 2.0"
region = "us-east-1"
assume_role
role_arn = var.assume_role
variable "aws_profile"
default = "default"
variable "assume_role"
default = "arn:aws:iam::123456789012:role/test-assume"
resource "aws_instance" "instances"
ami = "ami-009d6802948d06e52"
instance_type = "t2.micro"
subnet_id = "subnet-002df68a36948517c"
provisioner "local-exec"
command = "aws sts assume-role --role-arn $var.assume_role --role-session-name Testing --profile $var.aws_profile --output json > test.json && export AWS_ACCESS_KEY_ID=`jq -r '.Credentials.AccessKeyId' test.json` && export AWS_SECRET_ACCESS_KEY=`jq -r '.Credentials.SecretAccessKey' test.json` && export AWS_SESSION_TOKEN=`jq -r '.Credentials.SessionToken' test.json` && aws sts get-caller-identity && rm test.json && unset AWS_ACCESS_KEY_ID && unset AWS_SECRET_ACCESS_KEY && unset AWS_SESSION_TOKEN"
【讨论】:
创建 AWS 配置可能是可能的,但我真的很想避免它,因为 1. 我有很多角色需要像这样配置 2. 多个用户需要拥有这些配置了配置文件,并且在不覆盖现有配置的情况下自动执行该配置会很棘手。以上是关于如何在 local-exec 配置程序中从 terraform 继承 aws 凭据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?
如何将区域变量传递到 vpc 模块内的 local-exec