未找到Terraform AWS凭证文件

时间:2016-05-02 19:35:11

标签: amazon-web-services terraform

在阅读Terraform上的文档时,它表示有3个选项可用于查找AWS信用:

  1. 静态凭证(嵌入在源文件中)
  2. 环境变量。
  3. 来自AWS凭证文件
  4. 我正在尝试让我的设置只使用凭证文件。我检查过环境变量是否已清除,并且我将Terraform中的相关变量留空了。

    当我这样做并运行Terraform Plan'我收到错误:

      

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

    我甚至尝试将我的凭据文件的位置添加到我的提供程序块中,但这并没有帮助:

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

    我是否缺少让Terraform读取此文件而不需要环境变量的东西?

4 个答案:

答案 0 :(得分:1)

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

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

1.从提供商处删除2个profile标记。

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 = *****

答案 1 :(得分:1)

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

aws_access_key_id 

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

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

从技术上讲,你甚至不需要aws_access_key,因为看起来id版本是底层aws cli需要的。也许是我,但在我阅读的文件中从未明确过。

答案 2 :(得分: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
output = table
region = us-east-1

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

[account]
output = table
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
output = table
region = us-east-1

[default]
output = table
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正确读取凭据。

答案 3 :(得分:0)

(Terraform v0.14.2,macOS 11.0.1)

我需要这样做:

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

这对我来说很奇怪,因为我的〜/ .aws和我的.tf-s一样。 ¯_(ツ)_ /¯