Springboot 适配STS临时授权访问OSS
1. 配置
1.1 创建子账号(阿里云主账号)
PS:创建子账号,后续授权子账号管理自己的OSS Bucket
1.2 创建自定义权限策略
登录主账号 --> 进入控制台首页 --> 访问控制 --> 权限管理 --> 权限策略管理 --> 创建权限策略(使用脚本配置)
PS:示例权限策略名称使用“MyCustomPermission”,允许访问OSS对象的脚本如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject"
],
"Resource": [
"acs:oss:*:*:*"
]
}
]
}
1.3 权限管理--新增授权
访问控制 --> 权限管理 --> 授权 --> 新增授权(为子账号添加权限)
PS:各选项配置如下
授权范围:使用‘云账号全部资源’
被授权主体:输入刚创建的子账号test名称,并选择子账号
选择权限:系统策略选择添加AliyunOSSFullAccess、AliyunSTSAssumeRoleAccess,自定义权限选择签名创建好的MyCustomPermission
1.4 创建RAM角色
访问控制 --> RAM角色管理 --> 创建RAM角色
1.5 RAM角色添加权限
PS:为刚创建的‘MyRamTest’角色添加权限
1.6 获取RAM角色的ARN信息
PS:复制ARN信息,后续Springboot中接入需使用该配置
2. Springboot适配STS临时授权访问OSS
2.1 pom配置
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.6.0</version>
</dependency>
2.1 代码实现
try {
DefaultProfile.addEndpoint("", "", "Sts", ConfigUtils.getEndpoint());
IClientProfile profile = DefaultProfile.getProfile("cn-shenzhen", ConfigUtils.getAccessKeyId(), ConfigUtils.getAccessKeySecret());
// 用profile构造client
DefaultAcsClient client = new DefaultAcsClient(profile);
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setMethod(MethodType.POST);
request.setRoleArn(ConfigUtils.getRoleArn());
request.setRoleSessionName("roleUser");
request.setPolicy(ConfigUtils.getPolicy());
request.setDurationSeconds(3600L);
final AssumeRoleResponse response = client.getAcsResponse(request);
AssumeRoleResponse.Credentials credentials = response.getCredentials();
log.info("{}, getCreditInfo: st = {}", mLogId, credentials.getSecurityToken());
} catch (ClientException e) {
log.error("{}, getCreditInfo: ClientException, {}", mLogId, e.getMessage());
}
PS:如有需要限制该STS仅支持下载某个名称开头或结尾的文件,则需配置policy,text配置文件内容如下,示例限制STS下载‘my_test_file_’开头的文件,‘my_test_file_’名称可以作为可变参数,在代码中自行组合
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject"
],
"Resource": [
"acs:oss:*:*:*/my_test_file_*"
]
}
]
}
3. 附录
阿里云官方指导文档
STS临时授权访问OSS:
https://www.alibabacloud.com/help/zh/doc-detail/100624.htm?spm=a2c63.p38356.b99.143.5dae2ead15aQw8
Android客户端对接STS:
IOS客户端对接STS:
https://help.aliyun.com/document_detail/32059.html?spm=a2c4g.11186623.6.1546.78153b4aYQC9H1