阿里云OSS 临时授权用户访问参考

阿里云OSS 临时授权用户访问参考,第1张

阿里云OSS 临时授权用户访问参考

首先登入:阿里云-上云就上阿里云

登入阿里云之后点击如下:

下一个鼠标放在右上角头像:

点击访问控制:进入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 为自定义返回类型

请求成功返回结果

获取临时访问授权到此结束,参数可供前端上传等使用。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5681140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存