Amazon web services Terraform pathexpand函数不支持';你不能在复杂的项目中工作吗?

Amazon web services Terraform pathexpand函数不支持';你不能在复杂的项目中工作吗?,amazon-web-services,terraform,infrastructure-as-code,Amazon Web Services,Terraform,Infrastructure As Code,我是terraform的新手,但我的任务是管理一个相当复杂的项目,其中涉及一些数量和环境,我们有很多tf文件,每个文件中有很多行。很明显,有一些事情在最佳实践中没有做到。例如,我们为提供程序提供了以下配置: provider "aws" { region = var.region access_key = "my-access-key" secret_key = "my-secret-key&quo

我是terraform的新手,但我的任务是管理一个相当复杂的项目,其中涉及一些数量和环境,我们有很多tf文件,每个文件中有很多行。很明显,有一些事情在最佳实践中没有做到。例如,我们为提供程序提供了以下配置:

   provider "aws" {
      region    = var.region
      access_key = "my-access-key"
      secret_key = "my-secret-key"
      assume_role {
        role_arn = "arn:aws:iam::xxxxxxxxxxx:role/aaaaaaaaaaaaa"
      }
    }
配置文件中有硬编码凭据!所以我决定我需要替换它,如下所示:

   provider "aws" {
      region    = var.region
      shared_credentials_file = "/home/jerry/.aws/credentials"
      assume_role {
        role_arn = "arn:aws:iam::xxxxxxxxxxx:role/aaaaaaaaaaaaa"
      }
    }
这很好用,没问题。因为我们有一个团队,所以我决定使用pathexpand,这样团队中的每个人都可以使用自己的凭据:

   provider "aws" {
      region    = var.region
      shared_credentials_file = pathexpand("~/.aws/credentials")
      assume_role {
        role_arn = "arn:aws:iam::xxxxxxxxxxx:role/aaaaaaaaaaaaa"
      }
    }
然而,这已经不起作用了。我得到了以下错误:

Error: The role "arn:aws:iam::xxxxxxxxxxx:role/aaaaaaaaaaaaa" cannot be assumed.

  There are a number of possible causes of this - the most common are:
    * The credentials used in order to assume the role are invalid
    * The credentials do not have appropriate permission to assume the role
    * The role ARN is not valid
我尝试使用非常简单的配置启动一个新的测试项目,它与pathexpand一起工作,没有问题。但它无法与我所负责的(大)项目协同工作

可能有一些配置禁止使用函数pathexpand?或者有一些环境变量改变了行为?我已经研究了一整天,一直没有找到答案


请帮助,任何见解都将不胜感激

您是否检查了
~/.aws/credentials
是否存在,以及是否允许用户担任此角色?如果您使用SDK的典型方式获取凭据,则根本不需要指定该方式,这样您就可以完全删除
共享凭据文件
参数,因为这是SDK的默认设置。要进一步调试,您应该尝试运行
aws sts get caller identity
,检查您是否通过凭据文件使用用户凭据,然后尝试使用
aws sts假设角色
来假设您的角色。然后,您应该编辑您的问题,以包括该问题的经过审查的输出。@rkm是的,当然可以使用/home/my_id/.aws/credentials,但不能使用~/.aws/credentials。@ydaetskcoR凭据在那里,并且可以使用aws sts ASSUPPE role命令。问题似乎是pathexpand(~/.aws/credentials)无法扩展到正确的路径,如何就地跟踪pathexpand(~/.aws/credentials)是否确实有效?我不明白为什么会失败,但正如前面提到的,这完全没有必要。您只需删除该行,然后依靠普通凭证链在
~/.aws/credentials
处查找凭证即可。