Tengo infraestructura existente en Terraform y la he estado usando por un tiempo. Recientemente cambié las credenciales de AWS de mi computadora portátil local (los créditos almacenados ~/.aws/credentials
) y dejó de funcionar hasta que restablecí esas credenciales.
El problema es que estoy declarando los créditos en la fuente Terraform en sí, pero parece que no los está usando en absoluto.
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"
}
Los permisos de ID de acceso son 100% válidos. Estoy usando la misma ID de cuenta y clave secreta, tanto para la aws configure
configuración que entra ~/.aws/credentials
como en las declaraciones de variables de Terraform anteriores.
Todo funciona bien siempre y cuando las credenciales estén dentro, ~/.aws/credentials
pero tan pronto como desaparezcan las credenciales del nivel del sistema operativo (es decir rm ~/.aws/credentials
), obtengo lo siguiente cuando intento ejecutar operaciones de Terraform, como 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".
Si vuelvo a llenar el ~/.aws/credentials
archivo ejecutándolo aws configure
, funcionará bien nuevamente.
No entiendo: si mi provider
configuración declara explícitamente las credenciales para usar dentro del código fuente de Terraform, ¿por qué es importante mi configuración de AWS a nivel de sistema operativo?
¿Cómo puedo hacer que Terraform solo use los créditos definidos en mi configuración de Terraform e ignore lo que hay en mi perfil de usuario del sistema operativo?
Editar, es Terraform v0.11.7
Editar: tenga en cuenta que estoy tratando de resolver el problema de por qué los créditos declarados estáticamente no se utilizan en la declaración del proveedor. No busco métodos alternativos o soluciones alternativas. Gracias.
AWS_PROFILE
oAWS_DEFAULT_PROFILE
variables de entorno no se establecen como esas son una pista para el SDK de AWS que debe buscar en el archivo de credenciales.Respuestas:
Tu primera pregunta
El mensaje de error "Error al cargar el backend: el error al configurar el backend" s3 "" se refiere a la configuración de su Backend S3.
Mire el archivo
./.terraform/terraform.tfstate
y verá la configuración del backend S3.Terraform S3 Backend es diferente al proveedor Terraform AWS. El mensaje de error "No se encontraron fuentes de credenciales válidas para AWS Provider". es engañoso. Implica que se utiliza la configuración de AWS Provider, que es falsa. Las credenciales de backend S3 se configuran por separado y se almacenan en el
terraform.tfstate
archivo.La configuración de AWS a nivel de sistema operativo es importante porque si no se especifican las credenciales de backend S3, como se documenta aquí https://www.terraform.io/docs/backends/types/s3.html , Terraform usa de manera predeterminada lo siguiente, en orden:
No especificó ninguna credencial en su configuración de backend S3, por lo que terraform está predeterminado en el archivo de credenciales compartidas de AWS.
Su configuración de backend S3 no contiene credenciales.
Tu segunda pregunta
Primero, los backends no pueden contener interpolación, consulte https://www.terraform.io/docs/backends/config.html . Por lo tanto, no puede usar ninguna variable en la configuración de Backend. por ejemplo, esta configuración no es válida
Si desea especificar las credenciales de AWS al ejecutar
terraform init
, especifique la configuración de back-end como opciones.terraform init --backend-config="access_key=your_access_key" --backend-config="secret_key=your_secret_key"
Esto produce una configuración de backend S3 que se ve así, almacenada en el
./.terraform/terraform.tfstate
archivo:Nuevamente, las credenciales del backend S3 se configuran por separado de sus credenciales de proveedor de AWS.
Vuelva a ejecutar
terraform init
y especifique las credenciales en la línea de comando como--backend-config
opciones para corregir su error.fuente
shared_credentials_file
opción de que todos mis servidores y proveedores cosecharán y usarán. Parece estar funcionando bien y nada está bloqueado en las credenciales aws de la estación de trabajo del sistema operativo.El error que está obteniendo se refiere específicamente a la configuración del backend S3, que AFAIK no hereda la configuración de la configuración del proveedor de AWS; también lo tiene
access_key
ysecret_key
opciones de configuración que si usted no está utilizando~/.aws/credentials
tendrá que configurar de forma explícita.fuente
Es mejor configurar perfiles en sus
~/.aws/credentials
archivos comoLuego, en su proveedor puede decirle qué perfil usar
Mantendrá las claves fuera de sus archivos de terraformación, lo cual es bueno si alguna vez desea ponerlas en control de fuente.
fuente