如何为IAM用户分配角色?解决S3接口权限拒绝问题
解决IAM用户David假定角色并执行S3操作的问题
核心问题
你直接用David的访问密钥执行aws s3 ls时触发权限错误,原因有两个:一是David本身没有S3操作权限,二是David未被授权调用sts:AssumeRole来获取目标角色的临时凭证——只有拿到角色的临时凭证,才能用角色的权限执行S3操作。
具体解决步骤
1. 给David添加假定角色的权限
给IAM用户David附加一条策略,允许他调用sts:AssumeRole到目标角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::你的实际账号ID:role/你的目标角色名称" } ] }
替换其中的你的实际账号ID和你的目标角色名称为真实值。
2. 通过CLI获取角色临时凭证
用David的访问密钥执行以下命令,获取目标角色的临时身份凭证:
aws sts assume-role --role-arn "arn:aws:iam::你的实际账号ID:role/你的目标角色名称" --role-session-name "David-S3-Session"
执行后会返回包含AccessKeyId、SecretAccessKey、SessionToken的临时凭证数据。
3. 使用临时凭证执行S3操作
有两种便捷方式使用临时凭证:
方式一:设置环境变量
export AWS_ACCESS_KEY_ID="返回的临时AccessKeyId" export AWS_SECRET_ACCESS_KEY="返回的临时SecretAccessKey" export AWS_SESSION_TOKEN="返回的临时SessionToken"之后直接执行
aws s3 ls即可。方式二:CLI命令直接指定凭证
aws s3 ls --access-key "返回的临时AccessKeyId" --secret-key "返回的临时SecretAccessKey" --session-token "返回的临时SessionToken"
4. 可选:配置CLI角色快捷配置文件
为了避免每次手动输入临时凭证,可在~/.aws/config(Linux/macOS)或C:\Users\你的用户名\.aws\config(Windows)中添加如下配置:
[profile david-s3-role] role_arn = arn:aws:iam::你的实际账号ID:role/你的目标角色名称 source_profile = david
其中source_profile是你之前用aws configure配置的David的配置文件名称。之后直接用以下命令执行操作:
aws s3 ls --profile david-s3-role
关键验证点
- 确认角色信任策略中
Principal的ARN已替换Account-ID为真实AWS账号ID - 确认David的权限策略中
Resource指向的角色ARN完全正确 - 假定角色时的
role-arn必须和信任策略中的角色ARN完全一致
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

