首先登入:阿里云-上云就上阿里云
登入阿里云之后点击如下:
下一个鼠标放在右上角头像:
点击访问控制:进入RAM访问控制
注意!下面开始执行创建临时访问 *** 作:
第一步:
点击左侧菜单:身份管理-用户-创建用户
用户名称自定义,显示名称为备注:如:临时用户
勾选OpenApi调用访问设置
点击确认,填写手机验证码;
临时用户创建完成;
注意!
用户创建完成后,跳出的列表页面不要返回
先把AccessKey ID 与 AccessKey Secret 记录下来 这两个很重要
或者列表页面有个下载CSV的按钮,把这个临时用户数据下载下来,以备使用;
第二步:
点击用户组:创建用户组
用户名称自定义,按照提示格式填写
显示名称为自定义,如临时临时用户授权访问组
点击确认,用户组创建完成
第三步:
点击左侧:身份管理-角色-创建角色
选择阿里云账号,点击下一步
输入角色名称,如:roleTest
选择信任云账号:当前账号 (如果有其他账号则先择其他账号)
点击完成
返回角色列表,找到刚刚创建的角色,点击详情页面,记录ARN(重点)
第四步:
点击左侧权限管理-权限策略-创建权限策略-选择脚本编辑
4.1:临时访问角色权限策略
之前创建的角色记录的ARN 就派上用场了
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": "此处填写角色的ARN"
}
],
"Version": "1"
}
点击保存,输入自定义名称(如:TemporaryRoleAuthorization),输入显示名称
点击下一步,完成
4.2:临时访问权限策略(此处是创建开放访问权限策略)
继续点击创建权限策略-脚本编辑
{
"Version": "1",
"Statement": [
{
"Action": [
"rds:DescribeDBInstances",
"rds:DescribeDatabases",
"rds:DescribeAccounts",
"rds:DescribeDBInstanceNetInfo"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": "ram:ListRoles",
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "mns:ListTopic",
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"dhs:ListProject",
"dhs:ListTopic",
"dhs:GetTopic"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ots:ListInstance",
"ots:ListTable",
"ots:DescribeTable"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"log:ListShards",
"log:ListLogStores",
"log:ListProject"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
]
}
点击保存,输入自定义名称(如:RamTestPolicy),输入显示名称
点击下一步,完成
第五步:
5.1
点击用户组,找到刚刚创建的用户组,点击添加组成员,选择创建的临时用户,点击确认
5.2
点击用户组列表,添加权限
找到系统策略:AliyunSTSAssumeRoleAccess 添加
再点击自定义策略:搜索刚定义的:RamTestPolicy 策略 添加
点击确认,权限策略就绑定到用户组上了
第六步:
点击左侧身份管理-角色
在角色列表找到刚创建的角色:roleTest,点击右侧的添加权限
点击自定义策略 搜索:TemporaryRoleAuthorization 角色权限策略 选中添加
点击确认
目前为止,阿里云用户角色临时访问权限策略完成
最后一步,根据API 提供的获取临时令牌代码进行访问
此图创建桶,代码内有涉及到桶,例:OSS存储地址
代码访问使用到的参数有:
AccessKey ID,AccessKey Secret,roleARN,
@Value("${accessKeyId}") private String accessKeyId; @Value("${accessKeySecret}") private String accessKeySecret; @Value("${roleArn}") private String roleArn; @Value("${bucketName}") private String bucketName; @Value("${region}") private String region; public static final String REGION_CN_CHENGDU = "cn-chengdu"; public static final String STS_API_VERSION = "2015-04-01"; @ApiOperation(value = "阿里云角色临时授权") @RequestMapping(value = "/authorization",method = RequestMethod.GET) public oneDataResponse authorization(@LoginUser CurrentUser currentUser)throws com.aliyuncs.exceptions.ClientException { if(StringUtils.isEmpty(currentUser) || StringUtils.isEmpty(currentUser.getId())){ throw new CustomException("临时授权失败,用户不存在!"); } //定义临时访问权限 String policy ="{n" + " "Version": "1", n" + " "Statement": [n" + " {n" + " "Action": [n" + " "oss:GetBucket", n" + " "oss:PutObject", n" + " "oss:GetObject", n" + " "oss:ListParts" n" + " ], n" + " "Resource": [n" + " "acs:oss:*:*:*"n" + " ], n" + " "Effect": "Allow"n" + " }n" + " ]n" + "}"; String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //生成随机用户名称 String s = "oss-policy-" + RandomStringUtils.random(4, str); //此处3600L 是当前临时用户可访问的时长 AssumeRoleResponse response = assumeRole(accessKeyId,accessKeySecret, roleArn, s, policy, 3600L, STS_PROTOCOL_TYPE); ALiYunToolVO vo = new ALiYunToolVO(); vo.setBucketName(bucketName); //桶名称 对象存储OSS的Bucket列表 创建的Bucket的名称 vo.setRegion(region); //地区如:oss-cn-chengdu 每个地区不一样(替换chengdu即可) vo.setExpiration(response.getCredentials().getExpiration()); vo.setAccessKeyId(response.getCredentials().getAccessKeyId()); vo.setAccessKeySecret(response.getCredentials().getAccessKeySecret()); vo.setSecurityToken(response.getCredentials().getSecurityToken()); return new OneDataResponse<>(vo); } public static final ProtocolType STS_PROTOCOL_TYPE = ProtocolType.HTTPS; static AssumeRoleResponse assumeRole(String accessKeyId,String accessKeySecret, String roleArn, String roleSessionName) throws com.aliyuncs.exceptions.ClientException { return assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, null, 3600, STS_PROTOCOL_TYPE); } static AssumeRoleResponse assumeRole(String accessKeyId,String accessKeySecret, String roleArn, String roleSessionName, String policy) throws com.aliyuncs.exceptions.ClientException { return assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy, 3600, STS_PROTOCOL_TYPE); } static AssumeRoleResponse assumeRole(String accessKeyId,String accessKeySecret, String roleArn, String roleSessionName, String policy, long expired, ProtocolType protocolType) throws com.aliyuncs.exceptions.ClientException { // 创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求 IClientProfile profile = DefaultProfile.getProfile(REGION_CN_CHENGDU, accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); // 创建一个 AssumeRoleRequest 并设置请求参数 final AssumeRoleRequest request = new AssumeRoleRequest(); request.setVersion(STS_API_VERSION); request.setMethod(MethodType.POST); request.setProtocol(protocolType); request.setRoleArn(roleArn); request.setRoleSessionName(roleSessionName); request.setPolicy(policy); request.setDurationSeconds(expired); // 发起请求,并得到response return client.getAcsResponse(request); }
代码处:oneDataResponse 为自定义返回类型
请求成功返回结果
获取临时访问授权到此结束,参数可供前端上传等使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)