问题描述
正在设置他的 AWS CLI,以便访问 AWS 服务,如 EC2,他需要切换角色。他已经使用了命令 aws sts assume-role
,并获得了包含 Credentials
和 AssumedRoleUser
的 JSON 数据,其中包括一个会话令牌。现在问题是,他应该如何告诉 AWS CLI:“使用这个 JSON 进行角色身份验证”?
以下是他提供的 JSON 数据(已进行了隐私保护):
{
"Credentials": {
"AccessKeyId": "XXXXXXXXXXW5YABBKUXQ",
"SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXB2EFEUmCtuwbJPcMBF02",
"SessionToken": "XXXXXXXXXXsi6md6PTNHYjHUljav",
"Expiration": "2021-12-03T04:59:02+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "XXXXXXXXXX:dev",
"Arn": "arn:aws-us-gov:sts::999999999991:assumed-role/PROJADMIN/dev"
}
}
解决方案
请注意以下操作可能受到版本差异的影响,请确保在执行操作前备份好相关文件。
使用会话令牌进行身份验证
您可以使用 JSON 数据中的 SessionToken
来进行身份验证。有两种常用的方法可以实现这一点:将会话令牌添加到凭证文件的配置文件中,或将其导出为环境变量。
方法1:添加到凭证文件
- 打开 AWS CLI 的凭证文件,通常位于
~/.aws/credentials
(Linux/macOS)或C:\Users\<您的用户名>\.aws\credentials
(Windows)。 - 在适当的 AWS CLI 配置文件(通常是
default
或您自定义的配置文件)下,添加以下内容(将XXXXXXXXXXsi6md6PTNHYjHUljav
替换为您的实际会话令牌):
ini
[default]
aws_access_key_id = XXXXXXXXXXXXW5YABBKUXQ
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXB2EFEUmCtuwbJPcMBF02
aws_session_token = XXXXXXXXXXXXsi6md6PTNHYjHUljav
- 保存文件并关闭。
方法2:导出为环境变量
- 打开终端(Linux/macOS)或命令提示符(Windows)。
- 运行以下命令,将会话令牌导出为环境变量(将
XXXXXXXXXXsi6md6PTNHYjHUljav
替换为您的实际会话令牌):
bash
export AWS_ACCESS_KEY_ID=XXXXXXXXXXW5YABBKUXQ
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXB2EFEUmCtuwbJPcMBF02
export AWS_SESSION_TOKEN=XXXXXXXXXXsi6md6PTNHYjHUljav
或在 Windows 上:
bash
set AWS_ACCESS_KEY_ID=XXXXXXXXXXW5YABBKUXQ
set AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXB2EFEUmCtuwbJPcMBF02
set AWS_SESSION_TOKEN=XXXXXXXXXXsi6md6PTNHYjHUljav
使用会话令牌进行 AWS CLI 操作
一旦您将会话令牌添加到凭证文件或导出为环境变量,您就可以使用 AWS CLI 执行受角色保护的操作了。例如,您可以运行以下命令来列出您的 S3 存储桶:
aws s3 ls
AWS CLI 将自动使用您提供的凭证(包括会话令牌)进行身份验证,以便访问受保护的资源。
结论
通过将会话令牌添加到凭证文件的配置文件或导出为环境变量,您可以在 AWS CLI 中使用生成的 JSON 数据进行身份验证,从而访问受角色保护的 AWS 资源。这样,您就可以在执行 AWS CLI 命令时无需手动输入凭证信息,从而更加方便地管理和操作您的 AWS 资源。
请注意,将凭证信息写入文件或导出为环境变量都存在一定的安全风险,请确保妥善保护您的凭证信息,避免泄露给未授权的人员。如有需要,您还可以探索其他安全性更高的凭证管理方式,如使用 AWS 管理的角色权限等。
引用