在具有实例配置文件的 AWS EC2 实例上调用 get-caller-identity 时出现 InvalidClientTokenId

Dav*_*ave 8 amazon-ec2 amazon-web-services aws-sts

我们遇到一个问题,我们所在的 CentOS EC2 实例通过附加实例配置文件使用角色。当我们通过 SSH 连接进入控制台时,我们运行 pythonawscli命令行工具来获取我们的身份:

$ aws sts get-caller-identity
Run Code Online (Sandbox Code Playgroud)

我们得到

调用 GetCallerIdentity 操作时发生错误 (InvalidClientTokenId):请求中包含的安全令牌无效

其他命令,例如aws ec2 describe-instanceswork 和实例配置文件允许的命令。

从阅读AWS文档来看,获取调用者身份不需要任何权限,并且deny与实例关联的角色没有明确的设置。

我们检查后发现没有.aws/credentials文件,也没有env设置变量,因此访问应该完全通过 EC2 实例上的元数据服务进行管理。

我们的设置或调用中是否缺少某些内容awscli可能会导致权限失败?

Dav*_*ave 2

只是为遇到此问题的任何人记录修复程序。

对 的所有调用awscli可能都应该包含一个--region <region>参数。

例如

$ aws sts get-caller-identity --region us-east-2
Run Code Online (Sandbox Code Playgroud)

我们在通话中被提示输入该区域,aws ec2 describe-instances但在aws sts get-caller-identity通话中,它失败了。

此外,我们发现AWS_REGION环境变量似乎并不影响调用:我们仍然需要包含该--region <region>参数。