如何让 Terraform 读取 AWS 凭证文件?

Sou*_*aul 4 amazon-s3 amazon-web-services terraform-provider-aws terraform-aws-modules aws-credentials

我正在尝试使用 terraform 创建一个 AWS S3 存储桶,这是我的代码:

provider "aws" {
  profile = "default"
  region  = "ap-south-1"
}

resource "aws_s3_bucket" "first_tf" {
  bucket = "svk-pl-2909202022"
  acl    = "private"
}
Run Code Online (Sandbox Code Playgroud)

我使用记事本手动创建了“凭据”文件,并使用 Powershell 删除了“.txt”扩展名并将该文件存储在C:\Users\terraform\.aws.

[default]
aws_access_key_id=**************
aws_secret_access_key=************
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行时terraform plan,我收到一个错误消息

错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源

然后,我还尝试通过安装 AWS CLI 创建“凭据”文件,我运行了命令

aws configure --profile terraform
Run Code Online (Sandbox Code Playgroud)

terraform我的用户名在哪里。所以,它要求我输入aws_access_key_idaws_secret_access_key。输入所有凭据后,我运行了命令terraform init,该命令运行成功,但是当我运行时terraform plan,它再次显示错误,内容为:

错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源

Der*_*dez 5

手动创建配置文件时

provider "aws" {
  region                  = "your region"
  shared_credentials_file = "path_file_credentials like C:\Users\terraform\.aws\credentials"
  profile                 = "profile_name"
}
Run Code Online (Sandbox Code Playgroud)

当您不想手动放置共享文件时

需要在这条路上 %USERPROFILE%.aws\credentials

provider "aws" {
  region                  = "your region"
  profile                 = "profile_name"
}
Run Code Online (Sandbox Code Playgroud)

如果你想把你的凭据放在一个 tf 文件中

provider "aws" {
  region     = "us-west-2"
  access_key = "my-access-key"
  secret_key = "my-secret-key"
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上没有理由写粗体全部大写文本,即使在答案中也是如此。 (2认同)
  • 自 AWS 提供商版本 4.0.0 起,指定凭证文件的参数称为“shared_credentials_files”(注意复数),并且需要一个列表。因此,它应该是`shared_credentials_files = ["path_to_credentials_file"]`。请参阅[此处](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-4-upgrade)。 (2认同)
  • 我建议不要在提供程序块中添加凭据的第三个选项,因为这可能会提交到存储库,并且以这种方式暴露您的凭据存在安全风险。 (2认同)

小智 5

我花了很多时间试图弄清楚如何让 Terraform 读取 ~/.aws/credentials。唯一对我有用的选项是指定 AWS_PROFILE 环境变量以将其指向凭证文件的特定部分。

AWS_PROFILE=prod terraform plan
Run Code Online (Sandbox Code Playgroud)

或者

export AWS_PROFILE=prod 
terraform plan
Run Code Online (Sandbox Code Playgroud)

提供程序部分中的shared_credentials_file和/或配置文件选项被忽略的事实对我来说似乎是一个错误。

  • 如果您的问题与状态文件的后端配置有关,我遇到过这个问题:https://github.com/hashicorp/terraform/issues/13589 ;运行 `terraform init -reconfigure` 为我解决了这个问题 (2认同)