OSS对接-STS认证模式接入参考文档

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 背景之前项目中用到文件上传的场景中,都是由服务端做转发到OSS,存在着性能损耗。我们在 高德文件直传能力建设 项目中需要探索使用客户端直连OSS的方式来做,了解到OSS提供了STS认证的方式,通过子账号生成的临时AK作为客户端短期访问OSS的凭证,也不同担心AK安全的问题。具体方案见官方文档:STS临时授权访问OSSOSS可以通过阿里云STS(Security Token Service)进行临时

背景

之前项目中用到文件上传的场景中,都是由服务端做转发到OSS,存在着性能损耗。我们在 高德文件直传能力建设 项目中需要探索使用客户端直连OSS的方式来做,了解到OSS提供了STS认证的方式,通过子账号生成的临时AK作为客户端短期访问OSS的凭证,也不同担心AK安全的问题。具体方案见官方文档:STS临时授权访问OSS

OSS可以通过阿里云STS(Security Token Service)进行临时授权访问。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。


根据STS的技术规范,我们需要申请子账号及对应的角色,才能完成STS的认证。具体接入代码见下图:

了解到集团对云资源的需求都统一走诺曼底申请,所以我们尝试在诺曼底申请。整个过程还挺费劲的。主要是STS认证的方式,集团基本没有团队接入,所以在诺曼底上没有子账号创建角色的入口。我们找到相关人聊了好久才解决。下面记录一下接入过程

接入过程

1.创建bucket

首先需要申请OSS云资源,操作路径为【云资源管理】/【云资源申请】,点击创建bucket。

申请完成后在云资源筛选里能看到刚才申请的bucket。

2.关联子账号

然后在云资源列表中找到bucket,点击【bucket授权】,关联子账号。

子账号授权有两种方式。

  •   选择已有RAM子账号  

  •   创建新的RAM子账号  

按自己实际情况选择 。目前代码中不允许明文AK存在,所以两种方式差别不大。

如果要获取明文AK可以选择【创建新的RAM子账号】,这种方式能直接看到AK、SK,不需要走审批流程;选择已有已有RAM子账号的方式需要走获取明文AK的审批流程;


操作完成后就关联上子账号了。

3.查看AK、SK

普通场景下不需要获取明文AK,直接使用集团的无AK化方案。

集团在推行无AK化方案,不需要明文获取AK了。具体接入文档见:

https://yuque.antfin-inc.com/docs/share/6e5423a2-61e2-486f-9980-3421cbdfa283?#

但是我们这种属于平台模式,无AK化方案不支持,需要拿到AK、由平台自己利用KC做加密存储

如何特殊场景需要获取到明文AK、SK,可以参考如下:

如果在关联子账号时选择了【创建新的RAM子账号】,需要走审批流程获取AK、SK。在【云账号管理】/ 【子账号管理】/【我管理的子账号】列表中找到对应账号,点击【操作列表】/【获取明文AK】走审批流程获取

如果选择了【选择已有RAM子账号】,在【云账号管理】/ 【子账号管理】/【我管理的子账号】中可以看到AK、SK,不需要申请了

4.申请角色

在【云账号管理】/【角色管理】下创建角色。填写角色名称、关联子账号就可以了。

创建完成就能再角色列表中看到了

如何拿到roleArn?

在进行STS认证时需要有roleArn参数,目前诺曼底上看不到,需要提需求解决。但是roleArn 有拼接规则,可以临时拼一下使用。

拼接规则为:

var roleArn = "acs:ram::${主账号uid}:role/${角色名}"

1647796581073291 这个是生产网vpc的主账号id

还有个办法,在角色列表页用浏览器查看HTTP请求,接口中已经返回了arn,拷贝出来直接使用~


5.为角色申请权限

【云账号管理】/【角色管理】

在角色列表点击【权限管理】,为角色申请bucket读写权限;诺曼底里有读写权限的模板,一般只申请读写权限就行了。也可以自定义语句申请。

申请通过后就能在权限信息里看到申请的权限了。

点击【查看策略】,可以查看具体的权限信息

6.给子账号申请assumeRole 权限

申请了这个权限子账号才可以进行STS认证流程


【云账号管理】/【子账号管理】

在我管理的子账号列表中找到子账号,点击权限管理,进行assumeRole 权限申请。会跳一个新页面,点击【申请新权限】.

这个权限没有现成的模板选择,选择自定义语句申请。确认提交后进入审批流程。这个要经过安全、sre等多层审批,流程较长

自定义语句可参考如下:

{
  "Statement":[
    {
      "Action":"sts:AssumeRole",
      "Effect":"Allow",
      "Resource":"acs:ram:*:1647796581073291:role/aos-read-role"
    }
  ],
  "Version":"1"
}

1647796581073291 是集团公共主账号ID,role 后面是角色名

Resource的写法也可参考:

https://help.aliyun.com/document_detail/93744.html?spm=a2c4g.11186623.6.705.3f674781h714Tq

审批通过后就能进行验证了

7.验证

调用STS认证接口验证。认证通过就没啥问题了。

8.常见问题

  1. 申请完权限后进行STS认证还是提示?

NoPermission : You are not authorized to do this action. 
You should be authorized by RAM.\r\nRequestId : 
419F92CB-17F3-4684-9E9E-E1EF8A58453C

检查assumeRole 是否申请给了角色而不是子账号。应该是给子账号申请assumeRole 权限

附录:https://yuque.antfin-inc.com/docs/share/c129be7f-e995-4767-94fe-c079c9cbbe75?#

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
2972 1
|
11月前
|
物联网 API 数据库
Chirpstack下载和部署
这篇文章介绍了如何在Alot平台上通过wget命令下载并安装ChirpStack的Docker组件,以便在智慧牧场项目中部署和使用LoRaWAN网络服务器。
505 2
|
存储 对象存储
【阿里云OSS】You have no right to access this object because of bucket acl.
【阿里云OSS】You have no right to access this object because of bucket acl.
17842 1
【阿里云OSS】You have no right to access this object because of bucket acl.
|
Java API 网络架构
Spring Boot与Spring Cloud Gateway的集成
Spring Boot与Spring Cloud Gateway的集成
|
存储 API 开发工具
对象存储oss使用问题之操作报错:The request signature we calculated does not match the signature you provide如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
4408 0
|
云安全 安全 Java
STS (Security Token Service)
阿里云STS(Security Token Service)是一种云安全服务,用于为阿里云RAM用户(或其他云账号)颁发临时的安全令牌,以便在一定时间内访问阿里云资源,从而实现安全授权和身份验证的目的。
5503 0
|
存储 对象存储 Python
Python中使用阿里云OSS存储实现文件上传和下载功能
Python中使用阿里云OSS存储实现文件上传和下载功能
2995 2
|
对象存储 数据安全/隐私保护 开发者
.net core 阿里云接口之获取临时访问凭证
假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。 使用STS授权用户直接访问OSS的流程如下: ![image.png](https://ucc.alicdn.com/pic/developer-ecology/j2ygdazy447va_7d767aa1db4047778a7b5c568b5d7c11.png) ## 1、关于秘钥等信息的申请见如下链接 [使用STS临时访问凭证访问OSS](https://help.aliyun.com/zh/oss/developer
375 0
|
存储 安全 Java
【案例实战】SpringBoot整合阿里云文件上传OSS
【案例实战】SpringBoot整合阿里云文件上传OSS
11921 2
【案例实战】SpringBoot整合阿里云文件上传OSS
|
小程序 JavaScript 前端开发
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
微信小程序:阿里云OSS直传实践-PHP实现服务端签名
1741 0
微信小程序:阿里云OSS直传实践-PHP实现服务端签名