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

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

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

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

  • terraform init - требуется доступ к удаленному состоянию серверной части S3
  • terraform plan/apply - requires access to specific environment + remote state
    • Non-functional (a single set of credentials doesn't have access to both the env + remote state)
  • kitchen converge - requires access to test environment + remote state
    • Non-functional (same reason as above)
  • kitchen verify - требуется доступ к тестовой среде.

Идеи

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

person XeonFibre    schedule 20.10.2020    source источник


Ответы (1)


Вам понадобится основная учетная запись, чтобы иметь возможность взять на себя роль в каждой учетной записи env для выполнения изменений, в то время как удаленная основная учетная запись будет сохранять все состояния. Это хороший способ работы с рабочими пространствами terraform. Предполагая, что у вас есть два рабочих пространства, 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]
}
person Stargazer    schedule 20.10.2020
comment
Спасибо, я видел, что это рекомендовано и в другом месте. Это будет частью решения. Мне просто нужно выяснить, как работать с Kitchen, поскольку он использует либо переменные окружения AWS, либо ~ / .aws / credentials. - person XeonFibre; 20.10.2020
comment
@XeonFibre вы можете передать shared_credentials_profile в конфигурации кухни, чтобы указать профиль, который вы хотите использовать. - person Stargazer; 20.10.2020