- Published on
常用云原生的文件存储服务
1、阿里云 OSS 子账号配置STS
帮助链接:
- 进入阿里云OSS 控制台,找到RAM 管理中心
- 创建用户 (https://ram.console.aliyun.com/roles/xxxRole)
- 在权限管理里面选择权限策略管理,然后在创建权限策略
策略代码
{
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:xxx-bucket/*"
]
}
],
"Version": "1"
}
3.然后接着在权限管理里面选择授权,输入需要新建的用户这里进行授权 4.创建RAM 角色管理,在生成STS 的时候是需要到的
🔊🔊 注意:配置完成OSS 的一定要给用户配置又STS 的生成权限,不然是使用不了的, 可以将AliyunSTSAssumeRoleAccess 配置到自己定义的RAM 角色当中。
添加前端跨域规则:选择对应的桶--->设置---->跨域
2、 华为云 OBS 子账号配置 STS
2.1创建用户并且加入用户组
2.2 没有可以创建一个,新建权限,创建自己的策略
{
"Version": "1.1",
"Statement": [
{
"Action": [
"obs:object:*"
],
"Resource": [
"obs:*:*:object:xxx-bucket/*"
],
"Effect": "Allow"
}
]
}
2.3 用户组里面配置权限管理,需要生成私钥密钥使用。
2.4 获取账号、IAM用户、项目、用户组、区域、委托的名称和ID
注意:OBS 生成STS 临时凭证必须使用子账号的账号,密码和主账号的id
三, 腾讯云 COS 子账号配置STS
3.1 授权子账号访问cos
操作步骤
授权子账号访问 COS 分为三个步骤:创建子账号、对子账号授予权限、子账号访问 COS 资源。
步骤1:创建子账号
在 CAM 控制台可创建子账号,并配置授予子账号的访问权限。具体操作如下所示:
- 登录 CAM 控制台。
- 选择【用户】>【用户列表】>【新建用户】,进入新建用户页面。
- 单击【自定义创建】,选择可访问资源并接收消息类型,然后下一步。
- 按照要求填写用户相关信息。
- 用户名:输入子用户名称,例如 Sub_user。
- 邮箱:您需要为子用户添加邮箱来获取由腾讯云发出的绑定微信的邮件。
- 访问方式:选择编程访问和腾讯云控制台访问。
- 填写用户信息完毕后,单击【下一步】,进行身份验证。
- 身份验证完毕,设置子用户权限。根据系统提供的策略选择,可配置简单的策略,例如 COS 的存储桶列表的访问权限,只读权限等。如需配置更复杂的策略,可进行 步骤2:对子账号授予权限 。
- 确认输入的用户信息无误后,单击【完成】即可创建子账号。
- 注意:这里只要选择 QcloudCOSFullAccess 这个权限就可以了 使用默认的就可以了。
步骤2:对子账号授予权限
对子账号授予权限可通过 CAM,对子账号(用户)或用户组进行策略配置。
- 登录 CAM 控制台。
- 选择【策略】>【新建自定义策略】>【按策略语法创建】,进入策略创建页面。
- 可供选择的模版有空白模板和与 COS 相关联的预设策略模板,选择您需要授予子账号的策略模板,单击【下一步】。
4.输入便于您记忆的策略名称,若您选择空白模板,则需要输入您的策略语法,详情请参见 策略示例。您可将策略内容复制粘贴到【编辑策略内容】输入框内,单击【创建策略】。
5.创建完成后,将刚才已创建的策略关联到子账号。
步骤3:子账号访问 COS 资源
COS 访问(API 或 SDK)需要如下资源:APPID、SecretId、SecretKey。 当使用子账号访问 COS 资源时,需要使用主账号的 APPID,子账号的 SecretId 和 SecretKey,您可以在访问管理控制台生成子账号的 SecretId 和 SecretKey。
- 主账号登录 CAM 控制台 。
- 选择【用户列表】,进入用户列表页面。
- 单击子账号用户名称,进入子账号信息详情页。
- 单击【API 密钥】页签,并单击【新建密钥】为该子账号创建 SecretId 和 SecretKey。
注意 需要在下面桶配置权限才可以外网访问:
3、快速入门(基于spring-boot maven)
3.1 Maven Pom 文件配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 注意:这里是云存储组件需要的配置 csc-core 必须依赖
下面组件可以按需要依赖 也可以全部依赖 具体项目使用是通过yml 或者 properties 文件
1.csc-oss-adapter 阿里云存储依赖
2.csc-cos-adapter 腾讯云存储依赖
3.csc-obs-adapter 华为云存储依赖
-->
<dependency>
<groupId>com.csc.inf</groupId>
<artifactId>=csc-core</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.csc.inf</groupId>
<artifactId>csc-oss-adapter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.csc.inf</groupId>
<artifactId>csc-cos-adapter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.csc.inf</groupId>
<artifactId>csc-obs-adapter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
3.2 yml 或者 properties 配置
注意:如果是基于spring boot 可以自动将配置文件转换为对象
@Component
@ConfigurationProperties(prefix = "csc")
public class AppCscRequest extends CscRequest {
}
如果不是spring boot 项目 则可以实现 CscRequest 将参数通过set 方法设置进去
csc:
# 当前项目需要的存储组件
apply: obs
# 阿里云 OSS 需要的获取token 参数
oss:
endpoint: sts.cn-hangzhou.aliyuncs.com
accessKeyId: ak
accessKeySecret: sk
roleArn: acs:ram::1830033224756929:role/xxxrole
roleSessionName: xxxrole
durationSeconds: 1000
domain: https://xxx-bucket.oss-cn-guangzhou.aliyuncs.com
bucketName: xxx-bucket
# 不是必须
folderName:
region: oss-cn-guangzhou.aliyuncs.com
cos:
# 腾讯云 COS 需要的获取token 参数
bucket: xxx-bucket-1304902781
region: ap-guangzhou
SecretId: ak
SecretKey: sk
# 不是必须
allowPrefix:
durationSeconds: 1800
# 不是必须
folderName:
server: xxx-bucket-1304902781
domain: https://xxx-bucket-1304902781.cos.ap-guangzhou.myqcloud.com
obs:
# 华为云 OBS 需要的获取token 参数
endpoint: https://iam.cn-south-1.myhuaweicloud.com
accessKeyId: ak
accessKeySecret: sk
# 不是必须 如果生成STS就必须要
userName: 子账号
passWord: 子账号密码
domainName: 主账号id hw*****
durationSeconds: 900
domain: https://xxx-bucket.obs.cn-south-1.myhuaweicloud.com
bucketName: xxx-bucket
# 不是必须
folderName:
region: https://obs.cn-south-1.myhuaweicloud.com
3.4 前端获取STS 临时凭证
public class TestApi {
// 通过spring noot 自动配置注入属性
// 也可以通过GET SET 方法设置
@Autowired
AppCscRequest cscRequest;
// 获取 OSS STS token 统一封装
@GetMapping(value = "token")
public ResponseData<Object> token() throws IllegalAccessException {
// 获取配置指定的云存储厂商
String apply = cscRequest.getApply();
// 通过SPI 获取到具体的云存储厂商实例
HandleResourceApi resourceApi = HandleResourceFactory.build(apply);
// 将获取的实体对象转换成MAP 参数形式
Map<String, Object> map = ObjectMapUtils.objectToMap(cscRequest);
// 统一的参数配置转换
BaseConfig config = new BaseConfig(map);
// 返回云存储厂商生成的STS 临时凭证返回给前端
return resourceApi.getStsCredentials(config);
}
}
3.5 后端上传文件
public class TestApi {
@Autowired
AppCscRequest cscRequest;
// 后台上传文件
@PostMapping(value = "tokenUpload")
public ResponseData<Object> tokenUpload(@RequestParam("file") MultipartFile file) throws Exception {
String apply = cscRequest.getApply();
HandleResourceApi resourceApi = HandleResourceFactory.build(apply);
Map<String, Object> map = ObjectMapUtils.objectToMap(cscRequest);
BaseConfig config = new BaseConfig(map);
// 上传文件 folder 需要指定配置存储到云存储桶的位置
String uuid = UUID.randomUUID().toString();
String fileName = file.getOriginalFilename();
String folder = "file/" + uuid + "_" + fileName;
// 上传文件 folder 是指定存储object 的位置
CscUploadResponse response = resourceApi.simpleUpload(config, folder, file.getInputStream());
return new ResponseData<>(response);
}
}