14

在阅读 Terraform 的文档时,它说有 3 种查找 AWS 凭证的选项:

  1. 静态凭证(嵌入在源文件中)
  2. 环境变量。
  3. 从 AWS 凭证文件

我试图让我的设置只使用凭证文件。我已经检查了环境变量是否已清除,并且我已将 Terraform 中的相关变量留空。

当我这样做并运行“Terraform Plan”时,我得到了错误:

未找到 AWS Provider 的有效凭证源。

我什至尝试将凭据文件的位置添加到我的提供程序块中,但这也无济于事:

provider "aws" {
    region  = "${var.region}"
    profile = "${var.profile}"
    shared_credentials_file = "/Users/david/.aws/credentials"
    profile = "testing"
}

让 Terraform 读取此文件并且不需要环境变量,我是否缺少一些东西?

4

5 回答 5

10

我用它进行了测试Terraform v0.6.15并且工作正常。

问题必须与profile. 检查以下内容。

1.profile从您的提供商处删除 2 个标签。

provider "aws" {
  region  = "${var.region}"
  shared_credentials_file = "/Users/david/.aws/credentials"
  profile = "testing"
}

2.确保您的凭据文件/Users/david/.aws/credentials采用以下格式,您在testing哪里profile指定provider "aws"

[testing]
aws_access_key_id = *****
aws_secret_access_key = *****
于 2016-05-03T04:34:47.130 回答
2

要让多个配置文件与 Terraform 一起使用,请确保提供

aws_access_key_id 

加入您的个人资料声明。每个配置文件应如下所示:

[profile_name]
aws_access_key=*****
aws_secret_access_key****
aws_access_key_id=*****

从技术上讲,您甚至不需要 aws_access_key,因为 id 版本似乎是底层 aws cli 所需要的。也许是我,但在我阅读的文件中从来没有明确过。

于 2016-05-05T16:09:00.897 回答
0

我刚刚遇到了与 terraform aws provider (2.12.0) 相同的问题,这就是我解决它的方法。

在我的情况下,提供商无法处理我的默认配置文件$HOME/.aws/credentials没有我的访问密钥和秘密,但它有一个“source_profile”。terraform aws 提供商似乎无法处理此问题(但这适用于 Java SDK 和 AWS CLI,因为我已经进行了一段时间的设置)。

这是我没有工作的内容,请注意默认配置文件有一个 role_arn 和 source_profile:

[default]
role_arn = arn:aws:iam::<ACCT_ID>:role/readonly
source_profile = account
region = us-east-1

[other-profile]
role_arn = arn:aws:iam::<ACCT_ID>:role/other-role
source_profile = account
region = us-east-1

[account]
region = us-east-1
aws_access_key_id=****
aws_secret_access_key=****

我将其更改为以下内容,导致 aws 提供程序为我工作。请注意,我将两个配置文件合并到“默认”配置文件中:

[other-profile]
role_arn = arn:aws:iam::<ACCT_ID>:role/other-role
source_profile = default
region = us-east-1

[default]
region = us-east-1
aws_access_key_id=****
aws_secret_access_key=****
role_arn = arn:aws:iam::<ACCT_ID>:role/readonly
source_profile = default

这似乎适用于 AWS CLI(默认为只读角色并支持切换到“其他配置文件”)以及允许 terraform 正确读取凭证。

于 2019-05-29T15:50:38.900 回答
0

如果您只需要在不设置 Terraform 的情况下快速修复,
如评论中建议的那样,只需在终端中输入:

export AWS_ACCESS_KEY_ID="xxxxxxxxxxxxx" 
export AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxx" 
export AWS_DEFAULT_REGION="your-region-1"
于 2021-09-20T10:57:04.413 回答
0

(地形 v0.14.2,macOS 11.0.1)

我需要做:

AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... terraform plan

这对我来说很奇怪,因为我的 ~/.aws 是有序的,我的 .tf-s 也是如此。¯_(ツ)_/¯

于 2020-12-16T16:53:40.650 回答