在 VScode 中设置 AWS 凭证以使用 MFA 并能够通过 AWS Toolkit 承担命名配置文件角色的正确方法是什么?

What is the correct way to set up AWS credentials to work with MFA and be able to assume roles as named profiles via AWS Toolkit in VScode?

当在 Ubuntu Linux 上使用像这样的简单 AWS 凭据文件和凭据文件时:~/.aws/credentials

[leigh.m] # let's call this account ID: 1000 for simplicity
AWS_ACCESS_KEY_ID=some_access_key_id
AWS_SECRET_ACCESS_KEY=some_secret_access_key

VSCode 中的 AWS 工具包运行完美,我可以通过 VSCode.

访问 AWS 资源

但是我需要承担跨账户角色(使用源 'root' 配置文件控制通过角色访问其他账户),所有这些账户都设置了 MFA。

我的 ~/.aws/config 文件看起来像这样:

[profile my-assumed-role-1] # let's say this has account ID: 2000
role_arn=arn:aws:iam::2000:role/AdminRole
source_profile=leigh.m
role_session_name=my-assumed-role-1-session-name
mfa_serial=arn:aws:iam::1000:mfa/leigh.m
duration_seconds=3600

此设置现在运行良好,我可以通过 CLI 承担该角色,例如,我可以通过传递该配置文件来列出帐户 2000 中的存储桶,例如:aws s3api list-buckets --profile my-assumed-role-1

但是,当我在 VSCode 中尝试通过 AWS 工具包访问该命名配置文件时,我在 AWS 工具包日志中收到错误消息:

共享凭据配置文件leigh.m 无效。它不会被工具包使用。

无法连接“profile:my-assumed-role-1”:配置文件 leigh.m 不是有效的凭据配置文件:工具包不支持配置文件 leigh.m。

它似乎在寻找个人资料 'leigh.m',所以我尝试添加到 ~/.aws/config 这个部分:

[profile leigh.m]
mfa_serial=arn:aws:iam::1000:mfa/leigh.m
region=eu-west-1
output=json

我还尝试不使用配置文件并将所有内容都放在凭据文件中(正如此处建议的那样:https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/mfa-credentials.html

但还是一样的问题。我错过了什么吗?

(我确实查看了 S/O 上是否有关于为 AWS Toolkit 和 MFA 正确设置 AWS 凭证的任何问题(因为我的 AWS 凭证和配置文件可以正确满足所有其他要求),这是大约 5 年前的唯一问题: 但没有回答,也没有关于 AWS 工具包、MFA 和承担角色名称配置文件的问题/答案)

这是一个 VSCode AWS Toolkit 错误,正在为此发布修复程序:https://github.com/aws/aws-toolkit-vscode/issues/2394

总结:AWS Toolkit 仅适用于小写键,因此这将不起作用:

AWS_ACCESS_KEY_ID=some_access_key_id
AWS_SECRET_ACCESS_KEY=some_secret_access_key

修复发布后,它将支持大写和小写,当然短期内只需将凭据文件更改为:

aws_access_key_id=some_access_key_id
aws_secret_access_key=some_secret_access_key

它将按预期工作