У меня есть инфраструктура в Terraform, и я использую ее некоторое время. Недавно я поменял учетные данные AWS на своем локальном ноутбуке (хранящиеся в нем кредиты ~/.aws/credentials
), и он перестал работать, пока я не переустановил эти учетные данные обратно.
Проблема в том, что я объявляю кредиты в самом источнике Terraform, но, похоже, он их вообще не использует.
terraform {
backend "s3" {
bucket = "example_tf_states"
key = "global/vpc/us_east_1/example_state.tfstate"
encrypt = true
region = "us-east-1"
}
}
provider "aws" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
}
variable "access_key" {
default = "<hidden_for_stack_exchange_post>"
}
variable "secret_key" {
default = "<hidden_for_stack_exchange_post>"
}
variable "region" {
default = "us-east-1"
}
Разрешения ID доступа на 100% хороши. Я использую один и тот же идентификатор учетной записи и секретный ключ для обеих aws configure
настроек, которые используются в ~/.aws/credentials
описаниях переменных Terraform, указанных выше.
Все работает нормально, пока есть кредиты, ~/.aws/credentials
но как только учетные данные уровня ОС ушли (т.е. rm ~/.aws/credentials
), я получаю следующее при попытке запуска операций Terraform, например terraform plan
:
Failed to load backend:
Error configuring the backend "s3": No valid credential sources found for AWS Provider.
Please see https://terraform.io/docs/providers/aws/index.html for more information on
providing credentials for the AWS Provider
Please update the configuration in your Terraform files to fix this error.
If you'd like to update the configuration interactively without storing
the values in your configuration, run "terraform init".
Если я заново заполню ~/.aws/credentials
, запустив, aws configure
он снова будет работать нормально.
Я не понимаю - если мой provider
параметр явно объявляет учетные данные для использования внутри исходного кода Terraform, почему моя конфигурация AWS на уровне ОС вообще имеет значение?
Как я могу заставить Terraform использовать только кредиты, определенные в моей конфигурации Terraform, и игнорировать то, что находится в моем профиле пользователя ОС?
Изменить это Terraform v0.11.7
Изменить: Обратите внимание, что я пытаюсь решить вопрос о том, почему статически объявленные кредиты не используются в декларации поставщика. Не ищу альтернативных методов или обходных путей. Спасибо.
AWS_PROFILE
илиAWS_DEFAULT_PROFILE
переменные не заданы, поскольку они являются подсказкой для AWS SDK, которую он должен искать в файле учетных данных.Ответы:
Ваш первый вопрос
Сообщение об ошибке «Не удалось загрузить бэкэнд: ошибка при настройке бэкенда« s3 »» относится к вашей конфигурации бэкэнда S3.
Посмотрите в файл,
./.terraform/terraform.tfstate
и вы увидите конфигурацию S3 Backend.Сервер Terraform S3 отличается от поставщика Terraform AWS. Сообщение об ошибке «Не найдены действительные источники учетных данных для поставщика AWS». вводит в заблуждение. Это означает, что используется конфигурация провайдера AWS, что неверно. Учетные данные S3 Backend настраиваются отдельно и сохраняются в
terraform.tfstate
файле.Ваша конфигурация AWS на уровне операционной системы имеет значение, потому что, если не заданы учетные данные S3 Backend, как описано здесь https://www.terraform.io/docs/backends/types/s3.html , тогда Terraform по умолчанию использует следующее в следующем порядке:
Вы не указали никакие учетные данные в своей конфигурации S3 Backend, поэтому terraform по умолчанию использует файл общих учетных данных AWS.
Ваша конфигурация S3 Backend не содержит учетных данных.
Ваш второй вопрос,
Во-первых, внутренние интерфейсы не могут содержать интерполяцию, см. Https://www.terraform.io/docs/backends/config.html . Таким образом, вы не можете использовать какие-либо переменные в конфигурации Backend. например, этот конфиг недействителен
Если вы хотите указать учетные данные AWS при запуске,
terraform init
вы указываете конфигурацию бэкенда в качестве параметров.terraform init --backend-config="access_key=your_access_key" --backend-config="secret_key=your_secret_key"
Это создает конфигурацию S3 Backend, которая выглядит следующим образом и хранится в
./.terraform/terraform.tfstate
файле:Опять же, учетные данные S3 Backend настраиваются отдельно от учетных данных вашего провайдера AWS.
Перезапустите
terraform init
и укажите учетные данные в командной строке в качестве--backend-config
параметров, чтобы исправить ошибку.источник
shared_credentials_file
опцию, которую будут собирать и использовать все мои бэкэнды и провайдеры. Кажется, что работает хорошо, и ничто не заблокировано в учетных данных AWS рабочей станции ОС.Ошибка, которую вы получаете, конкретно относится к настройке бэкэнда S3, который AFAIK не наследует настройки от конфигурации провайдера AWS; он также имеет
access_key
&secret_key
параметры конфигурации, которые, если вы не используете,~/.aws/credentials
вам придется явно настроить.источник
Вам лучше настроить профили в ваших
~/.aws/credentials
файлах, какЗатем в вашем провайдере вы можете сказать, какой профиль использовать
Он будет хранить ключи в ваших файлах terraform, что очень хорошо, если вы когда-нибудь захотите поместить их в систему контроля версий.
источник