Terraform Vault provider指定aws_role_arn未按预期生效问题咨询
关于Terraform Vault Provider中
auth_login_aws的aws_role_arn参数理解疑问 我正在使用Terraform Vault Provider的auth_login_aws功能,配置片段如下:
provider "vault" { address = "http://127.0.0.1:8200" skip_child_token = true auth_login_aws { role = "dev-role-corey-iam" header_value = "vault.example.com" aws_role_arn = "arn:aws:iam::1234567890:role/SomeRole" aws_role_session_name = "corey-test-session" aws_region = "us-east-1" } }
尽管我指定了aws_role_arn,Terraform Vault Provider仍尝试使用~/.aws/credentials文件中的凭证(当前我登录的是可扮演SomeRole的PrimaryRole)。我的期望是Terraform通过SomeRole这个IAM角色从本地Vault实例拉取密钥,且该角色已绑定到Vault的dev-role-corey-iam认证角色,但执行terraform plan时,provider还是用PrimaryRole而非指定的SomeRole。
请问我是否误解了aws_role_arn的作用?
解答
你确实误解了aws_role_arn参数的作用:
aws_role_arn是告诉Vault服务:你要以这个角色的身份完成认证,Vault会验证你提交的AWS凭证是否属于该角色,以及该角色是否关联到指定的Vault认证角色(即dev-role-corey-iam)。- 它并不会让Terraform自动切换到指定的SomeRole去获取AWS凭证,Terraform默认还是会使用本地环境的默认AWS凭证(也就是你当前的PrimaryRole)来调用Vault的认证接口。
要实现用SomeRole的凭证去认证Vault,你需要先让Terraform获取到SomeRole的临时凭证,再传递给Vault Provider:
- 可以通过配置AWS Provider来扮演SomeRole,生成临时凭证后,将
access_key、secret_key、session_token填入auth_login_aws块中 - 或者手动切换本地AWS环境到SomeRole(比如通过
aws sts assume-role生成临时凭证并设置环境变量) - 也可以在
~/.aws/credentials中配置SomeRole的临时凭证,并指定Terraform使用该配置文件的profile
只有当Terraform用SomeRole的凭证去调用Vault的AWS认证接口时,aws_role_arn的校验逻辑才会生效,完成预期的认证流程。
内容的提问来源于stack exchange,提问作者Corey Hornbeck
相关产品推荐
相关产品推荐

