Как наследовать учетные данные aws от terraform в local-exec Provider - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть ресурс в terraform, для которого мне нужно запустить команду AWS после ее создания. Но я хочу, чтобы он работал с теми же учетными данными AWS, которые использует terraform. Поставщик AWS использует профиль, который затем использует для принятия роли:

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

Я надеялся, что terraform предоставит необходимые переменные среды, но, похоже, это не так. Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 06 ноября 2019

Не могли бы вы использовать допущение роли через конфигурацию AWS? Документ: Использование роли IAM в CLI AWS

~ / .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"
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...