如何在本地exec provisioner中从terraform继承aws凭据

如何在本地exec provisioner中从terraform继承aws凭据,terraform,aws-cli,terraform-provider-aws,Terraform,Aws Cli,Terraform Provider Aws,我有一个terraform中的资源,我需要在它创建后运行AWS命令。但我希望它使用terraform使用的AWS凭据运行。AWS提供程序正在使用一个配置文件,然后使用该配置文件承担一个角色: provider "aws" { profile = "terraform" assume_role { role_arn = local.my_arn } } 我曾希望terraform能够暴露出必要的环境变量,但事实似乎并非如此。最好的方法是什么?您可以通过AWS配置使用角色假设吗

我有一个terraform中的资源,我需要在它创建后运行AWS命令。但我希望它使用terraform使用的AWS凭据运行。AWS提供程序正在使用一个配置文件,然后使用该配置文件承担一个角色:

provider "aws" {
  profile = "terraform"
  assume_role {
    role_arn = local.my_arn
  }
}

我曾希望terraform能够暴露出必要的环境变量,但事实似乎并非如此。最好的方法是什么?

您可以通过AWS配置使用角色假设吗?文件:

~/.aws/config:

main.tf:

如果你不能,这里有一个非常混乱的方法。我并不特别推荐这种方法,但它会起作用的。这依赖于jq,但您也可以使用其他工具来解析aws sts ASSUSPECT role命令的输出

main.tf:


创建AWS配置可能是可能的,但我真的希望避免它,因为1。我有很多角色需要这样配置2。多个用户需要配置这些配置文件,在不覆盖现有配置文件的情况下自动配置将是一件棘手的事情。
[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
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}"
  }
}
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"
  } 
}