问题描述
请求被STS Token Policy所拒绝。
问题原因
该报错是获取STS Token代码中的Policy参数的授权问题导致。
问题示例
比如下面Java获取Token的Demo代码所示,其中的Policy设置代表Token的Policy权限设置,最终的Token权限是用户角色的授权和代码中Policy权限的交集:
String roleSessionName = "<session-name>";
String policy = "{\n" +
" \"Version\": \"1\", \n" +
" \"Statement\": [\n" +
" {\n" +
" \"Action\": [\n" +
" \"oss:*\"\n" +
" ], \n" +
" \"Resource\": [\n" +
" \"acs:oss:*:*:*\" \n" +
" ], \n" +
" \"Effect\": \"Allow\"\n" +
" }\n" +
" ]\n" +
"}";
try {
// 添加endpoint (直接使用STS endpoint, 前两个参数留空, 无需添加region ID)
DefaultProfile.addEndpoint("", "", "Sts", endpoint);
// 构造default profile (参数留空, 无需添加region ID)
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// 用profile构造client
DefaultAcsClient client = new DefaultAcsClient(profile);
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setMethod(MethodType.POST);
request.setRoleArn(roleArn);
request.setRoleSessionName(roleSessionName);
request.setPolicy(policy); // 若policy为空,则用户将获得该角色下所有权限
request.setDurationSeconds(1000L); // 设置凭证有效时间解决方案
请结合您调用的OSS接口,检查您代码中Policy参数的授权策略,排查Policy中的授权是否正确。更多信息,请参见使用STS临时访问凭证访问OSS。其中临时访问凭证最终获取的权限是步骤四:为角色授予上传文件的权限设置的角色权限和步骤五:获取临时访问凭证中Policy设置权限的交集。请通过以下示例检查您在这两个步骤中设置的权限交集。
示例一
步骤四设置的角色权限为
AliyunOSSFullAccess系统权限,步骤五Policy中设置了oss:PutObject权限,则临时访问凭证最终获取的权限为oss:PutObject,即仅支持执行向指定Bucket上传文件的操作。示例二
步骤四设置的角色权限为
oss:PutObject系统权限,步骤五Policy中设置了oss:GetObject权限,则临时访问凭证最终未获取任何权限,即无法向指定Bucket执行任何操作。
该文章对您有帮助吗?