Terraform 配置 AWS 提供商后端问题时出错

问题描述 投票:0回答:4

我在 terraform 的后端配置中遇到了这个问题。我在运行 Terraform 计划时收到此错误。

错误:配置 Terraform AWS Provider 时出错:找不到 Terraform AWS Provider 的有效凭证源。 │ │ 请参阅 https://registry.terraform.io/providers/hashicorp/aws │ 了解有关提供凭据的更多信息。 │ │ 错误:刷新缓存凭证失败,未找到 EC2 IMDS 角色,操作错误 ec2imds:GetMetadata,请求发送失败,获取“http://169.254.169.254/latest/meta-data/iam/security-credentials/”:拨号tcp 169.254.169.254:80:i/o 超时

 with provider["registry.terraform.io/hashicorp/aws"].west,

│ 在providers.tf 第 5 行,提供商“aws”中: │ 5: 提供商“aws”{ │ ╵

这是代码,没有谷歌页面可以帮助解决此错误。我将不胜感激任何帮助,我将永远感激不已

terraform {
  `enter code here`backend "remote" {
organization = "Gnome2"

workspaces {
  name = "terraform-begin"
}

}

required_providers {
aws = {
  source  = "hashicorp/aws"
  version = "4.8.0"
}

} }

 provider "aws" {
  region = "us-east-1"
  }

  provider "aws" {
  alias  = "west"
  region = "us-west-1"
  }
  module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  providers = {
  aws = aws.west

}

  name = "my-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["us-east-1a", "us-east-1b", "us-east-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = true
  enable_vpn_gateway = true

  tags = {
      Terraform   = "true"
      Environment = "dev"
 }

}

terraform-provider-aws
4个回答
5
投票

您可以使用 AWS CLI 连接到您的 AWS 账户吗?比如列出您的 AWS s3 存储桶?根据错误,我认为您没有通过在 CLI 上执行

aws configure
来配置 AWS。这将要求您拥有用于设置的访问密钥 ID 和秘密。


4
投票

您必须在

Terraform Cloud
中配置 AWS 的凭证。在
Terraform Cloud
平台中,转到
Settings -> Variable Sets -> Create Variable Set
,输入一些“名称”,选中“应用到该组织中的所有工作区”,然后单击“添加变量”按钮。选择“环境变量”选项,并告知
key=AWS_ACCESS_KEY_ID
value="Access key ID"
。 “访问密钥 ID”是来自 AWS 凭证 (IAM) 的 ID。选中“敏感”复选框,然后单击“添加变量”按钮。因此,重试此过程以添加新的
Environment variable
key/value
AWS_SECRET_ACCESS_KEY/Secret access key of AWS credential
。最后,单击“创建变量集”按钮。重试
terraform plan
命令。查看更多信息 https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-remote#set-workspace-variables


0
投票

有一种安全的方法可以通过 AWS 对 Terraform Cloud 进行身份验证,从而完全避免机密:

  1. 创建 IAM 身份提供商
  2. 创建信任该提供商的 IAM 角色
  3. 向 Terraform Cloud 添加两个环境变量

1.创建 IAM 身份提供商:

2.创建信任该提供商的 IAM 角色:

  • 该角色包括如下所示的信任关系。将

    my-tfc-org
    替换为您在 Terraform 中的组织名称,并将
    <aws-account-id>
    替换为您的 aws 帐号。

  • 还将您的 terraform 所需的所有权限附加到角色。

  "Version": "2012-10-17",
  "Statement": [
    {
       "Effect": "Allow",
       "Principal": {
         "Federated": "arn:aws:iam::<aws-account-id>:oidc-provider/app.terraform.io"
       },
       "Action": "sts:AssumeRoleWithWebIdentity",
       "Condition": {
         "StringEquals": {
            "app.terraform.io:aud": "aws.workload.identity"
         },
         "StringLike": {
            "app.terraform.io:sub": "organization:my-tfc-org:project:*:workspace:*:run_phase:*"
         }
       }
    }
  ]
}

3.向 Terraform Cloud 添加两个环境变量:

TFC_AWS_RUN_ROLE_ARN 的值指向您上面创建的角色:

这个答案是 AWS 文档的复制品:

https://aws.amazon.com/blogs/apn/simplify-and-secure-terraform-workflows-on-aws-with-dynamic-provider-credentials/


0
投票

我也有类似的问题。

要解决此问题,请首先添加后端配置设置,如下例所示:

  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "org-example"

    workspaces {
      name = "my-aws-app"
    }
  }

然后在终端中执行:

terraform init -reconfigure

然后转到 Terraform Cloud,选择您的工作区,在我的示例中为 my-aws-app,然后在变量/工作区变量下选择添加变量并添加

AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
确保在顶部选择环境变量时选择环境变量.

然后您可以返回终端并执行

terraform plan

现在应该可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.