阿里云访问控制简要说明
阿里云访问控制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>
阿里云访问控制简要说明相关推荐
- 朕亦甚想你——从后宫管理看阿里云访问控制(上)
相关文章:"朕亦甚想你"--从后宫管理看阿里云访问控制(下) 由后宫开始 后宫是一个江湖,这里有锦衣玉食的生活.汉宫秋月的孤寂.生杀予夺的权势.鸡犬升天的恩宠.后宫是皇上的私人 ...
- 阿里云 访问控制RAM
https://help.aliyun.com/product/28625.html 为用户分配最小权限 别名主要用于 RAM 用户登录以及成功登录后的显示名. 强烈建议您给主账号绑定多因素认证. 设 ...
- SAP与阿里云的深度合作 为企业提供领先的SaaS 服务
云栖号案例库:[点击查看更多上云案例] 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 什么是企业IT治理? 企业IT治理是对企业中IT资源的合理规划和分配,以期 ...
- thinkphp引入阿里云视频点播
1.需要用到的sdk文件:阿里云视频点播接口+php技术-PHP文档类资源-CSDN下载 2.方法:将解压的压缩包放到extend文件夹下面 3.可以写个公共方法放到common.php 4.引入sd ...
- 阿里云 vs Azure-监控与管理
1. 监控服务 Alibaba CloudMonitor是一款针对阿里云资源和物联网应用进行监控的服务.可用于收集获取阿里云资源的监控指标或用户自定义的监控指标,探测服务可用性,以及针对指标设置警报. ...
- 获取阿里云临时授权访问STStoken
欢迎访问我的博客shammgodyoung 阿里云官方文档 相关SDK RAM 和 STS 介绍 阿里云权限管理机制包括访问控制(Resource Access Management,简称 RAM)和 ...
- 阿里云-邮件推送 java 代码 ,测试邮件推送服务,阿里云邮件推送,java
阿里云-邮件推送Java 测试代码 1.阿里云-邮件推送 配置 购买域名 配置域名 2.创建 Access Key 2.1登录 Access Key 管理控制台. 2.2单击页面右上角按钮 创建 Ac ...
- java阿里云邮件推送接口API使用
最近公司在使用阿里云的邮箱验证功能,网上信息乱七八糟,弄了一下午才试验成功,记录一下 你需要有的: [发信地址,域名,AccessKey ID,AccessKey Secret] 1.阿里云-邮件推送 ...
- 阿里云视频点播获取视频播放信息nodejs版
语言:nodejs 参考文档:https://help.aliyun.com/document_detail/101416.html 操作步骤: 首先:搭建nodejs运行环境: 先在本地创建一个no ...
- 关于阿里云OSS资源STS访问控制
目前还在看 什么是STS AssumeRole RAM角色和STS Token常见问题 RAM Policy常见示例 使用TST临时访问凭证访问OSS 大佬的博文1 大佬的博文2 做一下记录,稍后来补 ...
最新文章
- 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
- insert批量插入500ms_如何快速安全的插入千万条数据
- HTML系列(七):多媒体
- ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API
- java 递归改非递归_使用Java ThreadLocals的意外递归保护
- can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?
- (转帖)C#--web services之wsdl文件生成cs
- C# WinForm禁止改变大小 最大化最小化隐藏 最大化最小化隐藏
- 弹簧优化设计MATLAB,基于MATLAB的弹簧优化设计.pdf
- 职称计算机和英语保留时间,职称计算机考试成绩_职称计算机应用能力考试成绩保留时间是多长?...
- [ORA-01033: ORACLE正在初始化或关闭]问题解决方案
- 小米手机开发者选项在哪?小米手机怎么打开开发者选项
- word总页数不包含封面_word目录不包含封面 word 目录 不含封面
- 边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
- SLF4J: Class path contains multiple SLF4J bindings(log4j与logback冲突了)
- 小程序高级电商前端第1周走进Web全栈工程师<二>
- 命令行实现URL编解码
- 最近很火的ChatGPT和GPT4
- PPT中正文和标题字体的选择技巧
- Gensim错误'Word2Vec' object has no attribute 'vocab'