阿里云STS临时令牌操作OSS云存储(java)

您所在的位置:网站首页 安全令牌获取失败 阿里云STS临时令牌操作OSS云存储(java)

阿里云STS临时令牌操作OSS云存储(java)

2024-07-14 15:58:14| 来源: 网络整理| 查看: 265

使用STS临时访问凭证访问OSShttps://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.2.19.515649e8zOIom1#concept-xzh-nzk-2gb 一、 前置准备

您可以通过STS服务给其他用户颁发一个临时访问凭证。该用户可使用临时访问凭证在规定时间内访问您的OSS资源。临时访问凭证无需透露您的长期密钥,使您的OSS资源访问更加安全。

适用场景

假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。

使用STS授权用户直接访问OSS的流程如下:

App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。App客户端使用本地缓存的临时访问凭证去请求OSS API。OSS收到访问请求后,会通过STS服务来验证访问凭证,正确响应用户请求。 步骤一:创建RAM用户 登录RAM控制台。在左侧导航栏,选择身份管理 > 用户。单击创建用户。输入登录名称和显示名称。在访问方式区域下,选择Open API 调用访问,然后单击确定。单击复制,保存访问密钥(AccessKey ID 和 AccessKey Secret)。 步骤二:为RAM用户授予请求AssumeRole的权限 单击已创建RAM用户右侧对应的添加权限。在添加权限页面,选择AliyunSTSAssumeRoleAccess系统策略。

单击确定。 步骤三:创建用于获取临时访问凭证的角色 在左侧导航栏,选择身份管理 > 角色。单击创建角色,选择可信实体类型为阿里云账号,单击下一步。角色名称填写为RamOssTest,选择云账号为当前云账号。单击完成。角色创建完成后,单击关闭。在RAM角色管理页面,搜索框输入角色名称RamOssTest。单击复制,保存角色的ARN。

步骤四:为角色授予上传文件的权限 创建上传文件的自定义权限策略。 在左侧导航栏,选择权限管理 > 权限策略。单击创建权限策略。在创建权限策略页面,单击脚本编辑,然后在策略文档输入框中赋予角色向目标存储空间examplebucket下的目录exampledir上传文件的权限。具体配置示例如下。

警告 以下示例仅供参考。您需要根据实际需求配置更细粒度的授权策略,防止出现权限过大的风险。关于更细粒度的授权策略配置详情,请参见通过RAM或STS服务向其他用户授权。

{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:PutObject" ], "Resource": [ "acs:oss:*:*:examplebucket/exampledir", "acs:oss:*:*:examplebucket/exampledir/*" ] } ] } 策略配置完成后,单击下一步。在基本信息区域,填写策略名称为RamTestPolicy,然后单击确定。为RAM角色RamOssTest授予自定义权限策略。 在左侧导航栏,选择身份管理 > 角色。在角色页面,找到目标RAM角色RamOssTest。单击RAM角色RamOssTest右侧的添加权限。在添加权限页面下的自定义策略页签,选择已创建的自定义权限策略RamTestPolicy。单击确定。 二、引入依赖 com.aliyun.oss aliyun-sdk-oss 3.14.0 com.aliyun aliyun-java-sdk-sts 3.1.0 三、编写工具类

application.yaml配置文件统一配置,方便后期维护。

crm: #使用STS临时访问凭证访问OSS https://help.aliyun.com/document_detail/100624.html?spm=a2c4g.11186623.2.19.515649e8zOIom1#concept-xzh-nzk-2gb stsAccessKeyId: xxxxx stsAccessKeySecret: xxxxx stsRoleArn: acs:ram::xxxxx:role/xxxxx

 roleSessionName参数用于区分不同的sts令牌,根据需求填写。

import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest; import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.text.ParseException; @Slf4j @Service public class StsSampleUtil { @Value("${crm.stsAccessKeyId}") private String stsAccessKeyId; @Value("${crm.stsAccessKeySecret}") private String stsAccessKeySecret; @Value("${crm.stsRoleArn}") private String stsRoleArn; public AssumeRoleResponse.Credentials getStsMessage() throws IOException, ParseException { String endpoint = "sts.aliyuncs.com"; String accessKeyId = stsAccessKeyId; String accessKeySecret = stsAccessKeySecret; String roleArn = stsRoleArn; String roleSessionName = "xxx"; String policy = null; try { //构造default profile(参数留空,无需添加Region ID) IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret); //用profile构造client DefaultAcsClient client = new DefaultAcsClient(profile); final AssumeRoleRequest request = new AssumeRoleRequest(); request.setSysEndpoint(endpoint); request.setSysMethod(MethodType.POST); request.setRoleArn(roleArn); request.setRoleSessionName(roleSessionName); request.setDurationSeconds(60 * 60L); // 设置凭证有效时间 request.setPolicy(policy); final AssumeRoleResponse response = client.getAcsResponse(request); AssumeRoleResponse.Credentials credentials = response.getCredentials(); log.info("Access Key Id: " + credentials.getAccessKeyId()); log.info("Access Key Secret: " + credentials.getAccessKeySecret()); log.info("Security Token: " + credentials.getSecurityToken()); log.info("RequestId: " + response.getRequestId()); return credentials; } catch (ClientException e) { log.info("Failed:" + e.getStackTrace()); log.info("Error code: " + e.getErrCode()); log.info("Error message: " + e.getErrMsg()); log.info("RequestId: " + e.getRequestId()); return null; } } } 四、编写接口并测试 @Resource private StsSampleUtil stsSampleUtil; @PostMapping("/getStsMessage") @ApiOperation("获取临时访问凭证") public CommonResult getStsMessage() throws IOException, ParseException { AssumeRoleResponse.Credentials stsMessage = stsSampleUtil.getStsMessage(); return success(stsMessage); }



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭