Обработка учетных данных поставщика Terraform в распределенной среде с проверкой и удаленным состоянием

#amazon-web-services #amazon-s3 #terraform #test-kitchen #inspec

#amazon-веб-сервисы #amazon-s3 #terraform #тест-кухня #проверка

Вопрос:

Есть ли у кого-нибудь интересные идеи о том, как обрабатывать учетные данные поставщика Terraform для AWS с учетом этих вариантов использования:

  • Распределенные среды (prod / pre / qa / test / dev) с отдельными учетными записями AWS
  • Удаленное состояние серверной части S3 для всех сред в одной учетной записи AWS
  • Протестируйте кухню с помощью InSpec.

Мой текущий рабочий процесс требует изменения AWS_ACCESS_KEY и AWS_SECRET_KEY в зависимости от операции:

  • terraform init — требуется доступ к удаленному состоянию серверной части S3
  • terraform plan/apply — требуется доступ к определенной среде удаленное состояние
    • Нефункционально (один набор учетных данных не имеет доступа как к env, так и к удаленному состоянию)
  • kitchen converge — требуется доступ к тестовой среде удаленное состояние
    • Нефункционально (по той же причине, что и выше)
  • kitchen verify — требуется доступ к тестовой среде.

Идеи

  • Я хотел бы сохранить удаленное состояние S3 в соответствующих учетных записях среды, но переменные, похоже, не поддерживаются в конфигурации Terraform backend .

Ответ №1:

Вам понадобится основная учетная запись, чтобы иметь возможность выполнять роль в каждой учетной записи env для выполнения изменений, в то время как удаленная основная учетная запись сохранит все состояния. Это хороший способ работы с terraform worspaces Предполагая, что у вас есть два рабочих пространства, prod и dev, вы можете попробовать что-то вроде этого:

 variable "workspace_roles" {
  default = {
    dev  = "arn:aws:iam::<dev account id>:role/terra_role"
    prod = "arn:aws:iam::<prodaccount id>:role/terra_role"
  }
}

provider "aws" {
 assume_role = var.workspace_roles[terraform.workspace]
}
  

Комментарии:

1. Спасибо, я видел, что это рекомендовано и в других местах. Это будет частью решения. Мне просто нужно выяснить, как обращаться с Kitchen, поскольку он использует либо переменные AWS env, либо ~/.aws/credentials .

2. @XeonFibre вы можете передать shared_credentials_profile kitchen config, чтобы указать профиль, который вы хотите использовать.