为什么我的 Amazon EC2 实例使用 IAM 用户凭证而不是角色凭证?

上次更新时间:2020 年 6 月 12 日

我已将 AWS Identity and Access Management (IAM) 角色附加到 Amazon Elastic Compute Cloud (Amazon EC2) 实例。但是,Amazon EC2 实例使用 IAM 用户而不是 IAM 角色进行 API 调用。

简短描述

AWS 命令行界面 (AWS CLI) 使用一组凭证提供程序来按顺序查找 AWS 凭证。使用的凭证取决于凭证提供程序的顺序和优先级。有关更多信息,请参阅配置设置和优先级

解决方法

按照说明查找 IAM 用户 ID 和 IAM 用户凭证的存储位置。然后,使用 AWS CLI 来管理 IAM 凭证并放弃更高优先级设置。

查找 IAM 用户 ID 并获取 IAM 用户凭证位置

1.    运行以下 get-caller-identity 命令以验证使用哪个 IAM 凭据进行 API 调用:

aws sts get-caller-identity

您会收到类似如下内容的输出:

{

    "Account": "123456789012", 

    "UserId": "AIDACKCEVSQ6C2EXAMPLE", 

    "Arn": "arn:aws:iam::123456789012:user/ExampleIAMuser"

}

在本示例输出中,使用的 IAM 凭证是 ExampleIAMuser

2.    使用 --debug 选项检查用户凭证的位置,类似于以下内容:

aws s3 ls --debug
2020-03-28 02:04:29,478 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

在本示例输出中,IAM 用户凭证存储在 .aws/credentials 文件中。由于这些凭证的优先级高于角色凭证,因此使用 IAM 用户凭证进行 API 调用。

用于管理 IAM 凭证并放弃更高优先级设置的 AWS CLI

请采用以下最佳实践:

  • 确保不要将 --profile 选项与 AWS CLI 一起使用。
  • 取消设置或删除所有环境变量
  • 对于 configure 命令,删除 .aws/credentials 文件夹中的凭证文件。然后,删除 .aws 文件夹以设置实例配置文件的默认凭证。
  • 对于在 .aws/config 文件中设置的配置文件,请删除该配置文件。然后,删除 .aws 文件夹。

删除 IAM 凭据的配置设置优先级后,请运行 get-caller-identity 命令以验证 IAM 角色凭证,类似于以下内容:

aws sts get-caller-identity

{
    "UserId": "AROACKCEVSQ6C2EXAMPLE:i-01773d4a8ed647342",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/ExampleInstanceRole/i-01773d4a8ed647342"
}

在本示例输出中,使用的 IAM 凭证是 IAM 角色 ExampleInstanceRole


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?