阿里云访问控制STS模式简要说明

API参考

  • 访问控制API参考
  • STS API 参考

参考代码

AliyunStsProperties.java
@Data
@Configuration
@ConfigurationProperties(prefix = "aliyun.sts")
public class AliyunStsProperties {private String stsAccessKeyId;private String stsAccessKeySecret;private String roleArn;private Long durationSeconds;private String regionId;private String endpoint;
}
AliyunSts.java
/**** 调用阿里云STS获取令牌*/
public interface AliyunSts {/*** STS获取令牌方法* @param bucketTypeEnum 桶的类型* @param roleSessionName 自定义role session 名称* @return STSToken* @throws ClientException 调用阿里云API出现的异常*/STSToken getToken(BucketTypeEnum bucketTypeEnum, String roleSessionName) throws ClientException;/*** 自定义权限策略* @return Policy*/default Policy generatePolicy() {return null;}
}
AliyunStsImpl.java
/*** 阿里云的STS 获取令牌模式实现** @author * @date 2021-06-30 13:06*/
@Slf4j
@Component
public class AliyunStsImpl implements AliyunSts {@Resourceprivate AliyunStsProperties aliyunStsProperties;@Resourceprivate AliyunOssProperties aliyunOssProperties;/*** 获取STS Token** @param bucketTypeEnum  bucket类型* @param roleSessionName roleSessionName 自定义* @return 封装后的StsToken* @throws RuntimeException ClientException*/@Overridepublic STSToken getToken(BucketTypeEnum bucketTypeEnum,String roleSessionName) throws ClientException {DefaultProfile profile = DefaultProfile.getProfile(aliyunStsProperties.getRegionId(),aliyunStsProperties.getStsAccessKeyId(),aliyunStsProperties.getStsAccessKeySecret());IAcsClient client = new DefaultAcsClient(profile);AssumeRoleRequest request = getAssumeRoleRequest(bucketTypeEnum, roleSessionName);AssumeRoleResponse response;try {response = client.getAcsResponse(request);return convertResponseToSTSToken(bucketTypeEnum, response);} catch (ClientException e) {log.error("get STS token occurs exception: ", e);throw e;}}/*** 将调用STS Token获得的接口对象 {@link AssumeRoleResponse} 转换成 {@link STSToken}** @param bucketTypeEnum bucket的类型* @param response       调用STS TOKEN接口响应对象* @return STSToken*/private STSToken convertResponseToSTSToken(BucketTypeEnum bucketTypeEnum,AssumeRoleResponse response) {STSToken stsToken = new STSToken();stsToken.setSecurityToken(response.getCredentials().getSecurityToken());stsToken.setAccessKeyId(response.getCredentials().getAccessKeyId());stsToken.setAccessKeySecret(response.getCredentials().getAccessKeySecret());stsToken.setExpiration(response.getCredentials().getExpiration());stsToken.setRegion(aliyunStsProperties.getRegionId());stsToken.setPathPrefix(aliyunStsProperties.getRegionId());stsToken.setBucketName(getBucketName(bucketTypeEnum));stsToken.setPathPrefix(aliyunOssProperties.getEnvDeploy());return stsToken;}/*** 根据桶的类型获取桶的名称** @param bucketTypeEnum 桶的类型* @return 桶的名称*/private String getBucketName(BucketTypeEnum bucketTypeEnum) {switch (bucketTypeEnum) {case FILE:return aliyunOssProperties.getFileUrl().split("\\.")[0];case IMAGE:return aliyunOssProperties.getImageUrl().split("\\.")[0];case VIDEO:return aliyunOssProperties.getVideoUrl().split("\\.")[0];case AUDIO:return aliyunOssProperties.getAudioUrl().split("\\.")[0];}return null;}/*** 构造获取STS Token的请求对象 AssumeRoleRequest** @param roleSessionName 此参数用来区分不同的令牌,可用于用户级别的访问审计。* @return*/private AssumeRoleRequest getAssumeRoleRequest(BucketTypeEnum bucketTypeEnum, String roleSessionName) {AssumeRoleRequest request = new AssumeRoleRequest();request.setDurationSeconds(aliyunStsProperties.getDurationSeconds());request.setRoleArn(aliyunStsProperties.getRoleArn());request.setPolicy(convertPolicyToString(generatePolicy()));request.setRegionId(aliyunStsProperties.getRegionId());request.setRoleSessionName(roleSessionName);request.setEndpoint(aliyunStsProperties.getEndpoint());return request;}/*** 将Policy转换成String** @param policy 信任策略* @return json序列化之后的字符串*/private String convertPolicyToString(Policy policy) {if (policy != null) {return JSONObject.toJSONString(policy);}return null;}}
STSToken.java
/*** 调用阿里云STS模式获取临时令牌的结果封装类** @author * @date 2021-06-30 16:06*/
@ApiModel(description = "STS token对象")
@Data
@Accessors(chain = true)
public class STSToken implements Serializable {private static final long serialVersionUID = -5528203060804656549L;@ApiModelProperty(value = "当前Bucket所处在的区域")private String region;@ApiModelProperty(value = "临时的Key")private String accessKeyId;@ApiModelProperty(value = "临时的KeySecret")private String accessKeySecret;@ApiModelProperty(value = "临时的Token")private String securityToken;@ApiModelProperty(value = "过期时间")private String expiration;@ApiModelProperty(value = "bucket名称")private String bucketName;@ApiModelProperty(value = "路径前缀,用于拼接上传")private String pathPrefix;
}
Policy.java
/*** 自定义STS的Policy* 这样申请的临时权限是所扮演角色的权限与Policy指定的权限的交集** @author * @date 2021-06-30 14:59*/@ApiModel(description = "用户的授权策略对象")
@Data
@Accessors(chain = true)
public class Policy {@ApiModelProperty(value = "版本号")private String version;@ApiModelProperty(value = "表达式")private Statement statement;@ApiModel(description = "授权策略对象表达式对象")@Data@Accessors(chain = true)public static class Statement {@ApiModelProperty(value = "行为列表")private List<String> actionList;@ApiModelProperty(value = "资源列表")private List<String> resourceList;@ApiModelProperty(value = "允许策略")private String effect;}
}
pom所需依赖
  <properties><jaxb.version>2.3.0</jaxb.version><javax.activation.version>1.1.1</javax.activation.version></properties><dependencies><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>${jaxb.version}</version></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>${jaxb.version}</version></dependency><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>${jaxb.version}</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>${javax.activation.version}</version></dependency></dependencies>

阿里云访问控制简要说明相关推荐

  1. 朕亦甚想你——从后宫管理看阿里云访问控制(上)

    相关文章:"朕亦甚想你"--从后宫管理看阿里云访问控制(下) 由后宫开始   后宫是一个江湖,这里有锦衣玉食的生活.汉宫秋月的孤寂.生杀予夺的权势.鸡犬升天的恩宠.后宫是皇上的私人 ...

  2. 阿里云 访问控制RAM

    https://help.aliyun.com/product/28625.html 为用户分配最小权限 别名主要用于 RAM 用户登录以及成功登录后的显示名. 强烈建议您给主账号绑定多因素认证. 设 ...

  3. SAP与阿里云的深度合作 为企业提供领先的SaaS 服务

    云栖号案例库:[点击查看更多上云案例] 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 什么是企业IT治理? 企业IT治理是对企业中IT资源的合理规划和分配,以期 ...

  4. thinkphp引入阿里云视频点播

    1.需要用到的sdk文件:阿里云视频点播接口+php技术-PHP文档类资源-CSDN下载 2.方法:将解压的压缩包放到extend文件夹下面 3.可以写个公共方法放到common.php 4.引入sd ...

  5. 阿里云 vs Azure-监控与管理

    1. 监控服务 Alibaba CloudMonitor是一款针对阿里云资源和物联网应用进行监控的服务.可用于收集获取阿里云资源的监控指标或用户自定义的监控指标,探测服务可用性,以及针对指标设置警报. ...

  6. 获取阿里云临时授权访问STStoken

    欢迎访问我的博客shammgodyoung 阿里云官方文档 相关SDK RAM 和 STS 介绍 阿里云权限管理机制包括访问控制(Resource Access Management,简称 RAM)和 ...

  7. 阿里云-邮件推送 java 代码 ,测试邮件推送服务,阿里云邮件推送,java

    阿里云-邮件推送Java 测试代码 1.阿里云-邮件推送 配置 购买域名 配置域名 2.创建 Access Key 2.1登录 Access Key 管理控制台. 2.2单击页面右上角按钮 创建 Ac ...

  8. java阿里云邮件推送接口API使用

    最近公司在使用阿里云的邮箱验证功能,网上信息乱七八糟,弄了一下午才试验成功,记录一下 你需要有的: [发信地址,域名,AccessKey ID,AccessKey Secret] 1.阿里云-邮件推送 ...

  9. 阿里云视频点播获取视频播放信息nodejs版

    语言:nodejs 参考文档:https://help.aliyun.com/document_detail/101416.html 操作步骤: 首先:搭建nodejs运行环境: 先在本地创建一个no ...

  10. 关于阿里云OSS资源STS访问控制

    目前还在看 什么是STS AssumeRole RAM角色和STS Token常见问题 RAM Policy常见示例 使用TST临时访问凭证访问OSS 大佬的博文1 大佬的博文2 做一下记录,稍后来补 ...

最新文章

  1. 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
  2. insert批量插入500ms_如何快速安全的插入千万条数据
  3. HTML系列(七):多媒体
  4. ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API
  5. java 递归改非递归_使用Java ThreadLocals的意外递归保护
  6. can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?
  7. (转帖)C#--web services之wsdl文件生成cs
  8. C# WinForm禁止改变大小 最大化最小化隐藏 最大化最小化隐藏
  9. 弹簧优化设计MATLAB,基于MATLAB的弹簧优化设计.pdf
  10. 职称计算机和英语保留时间,职称计算机考试成绩_职称计算机应用能力考试成绩保留时间是多长?...
  11. [ORA-01033: ORACLE正在初始化或关闭]问题解决方案
  12. 小米手机开发者选项在哪?小米手机怎么打开开发者选项
  13. word总页数不包含封面_word目录不包含封面 word 目录 不含封面
  14. 边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
  15. SLF4J: Class path contains multiple SLF4J bindings(log4j与logback冲突了)
  16. 小程序高级电商前端第1周走进Web全栈工程师<二>
  17. 命令行实现URL编解码
  18. 最近很火的ChatGPT和GPT4
  19. PPT中正文和标题字体的选择技巧
  20. Gensim错误'Word2Vec' object has no attribute 'vocab'

热门文章

  1. VS2015基础开发流程
  2. 未来10年的11个机会
  3. CryEngine架构概览
  4. 神威太湖之光计算机的知识点,神威太湖之光计算机系统.PDF
  5. 超级计算机计算峰值,世界运算最快计算机,中国神威·太湖之光(其峰值计算速度达每秒1...
  6. GNS3基础路由技术实验
  7. pdf加页码java_Java 添加页码到PDF文档
  8. 应用之星破除行业门槛 零成本开发手机应用
  9. ECCV 2022 | 基于去遮挡和移除的3D交互双手姿态估计
  10. 天津美术学院2021级专升本新生报到前后相关要求