为IAM用户配置访问角色:解决S3 Java客户端sts:AssumeRole权限报错
解决AWS STS AssumeRole 403 AccessDenied权限问题
错误信息
Caused by: com.amazonaws.services.securitytoken.model.AWSSecurityTokenServiceException: User: arn:aws:iam::123456789:user/test-key is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789:user/test-key (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 3b9b4bd4-48d1-40dc-a7d-f33d1cfffbb5; Proxy: null)
关键前置检查
错误信息里的资源是IAM用户ARN,但sts:AssumeRole操作的目标必须是IAM角色ARN,先确认代码中awsArn变量是否配置错误,确保传入的是角色ARN而非用户ARN。
IAM控制台权限配置步骤
1. 为test-key用户添加AssumeRole权限
- 登录AWS管理控制台,进入IAM服务
- 左侧导航栏选择「用户」,找到
test-key用户并进入详情页 - 切换到「权限」标签,点击「添加权限」→「创建内联策略」
- 选择「JSON」编辑模式,粘贴以下策略(替换为实际目标角色ARN):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::123456789:role/你的目标角色名称" } ] }
- 为策略命名(如
AllowAssumeTargetRole),完成创建
2. 配置目标角色的信任关系
仅用户有权限还不够,目标角色必须明确允许该用户扮演它:
- 进入目标IAM角色的详情页,切换到「信任关系」标签
- 点击「编辑信任策略」,添加允许
test-key用户的语句:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789:user/test-key" }, "Action": "sts:AssumeRole" } ] }
- 保存修改后的信任策略
3. 代码验证
确认代码中AssumeRoleRequest.withRoleArn(awsArn)传入的是正确的IAM角色ARN,而非用户ARN。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

