转载

STS临时授权访问OSS文件-java实现

www.alibabacloud.com/help/zh/doc…

主要包含三个步骤:

1.创建用户

2.创建权限策略

3.创建RAM角色并授权

上述步骤皆在阿里云文档可以完成

2.导包

mavan导阿里云的sts 及 oss的依赖

<!-- aliyun sts begin-->
    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>2.8.3</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-sts</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>4.4.6</version>
    </dependency>
    <!-- aliyun sts end-->
复制代码

3.通过AK SK URN获取STS

//调用部分
Map<String,Object> stsMap = getSTS(ALIYUN__AK,ALIYUN__SK,role);
            getFileToLocal(stsMap,bucket);
            upload(stsMap,bucket);


    private Map<String,Object> getSTS(String aliyunAk, String aliyunSk, String aliyunUrn) {
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("success", false);
        try {
            IClientProfile profile = DefaultProfile.getProfile("", aliyunAk, aliyunSk);
            // 用 profile 构造 client
            DefaultAcsClient client = new DefaultAcsClient(profile);
            final AssumeRoleRequest request = new AssumeRoleRequest();
            request.setSysMethod(MethodType.POST);
            request.setRoleArn(aliyunUrn);
            request.setRoleSessionName(ALIYUN_LINGXU_SESSIONNAME);
            request.setSysEndpoint(ALIYUN_LINGXU_ENDPOINT);
            //request.setDurationSeconds(3600L);
            final AssumeRoleResponse response = client.getAcsResponse(request);
            jsonMap.put("success", true);
            jsonMap.put("Expiration", response.getCredentials().getExpiration());
            jsonMap.put("Access Key Id", response.getCredentials().getAccessKeyId());
            jsonMap.put("Access Key Secret", response.getCredentials().getAccessKeySecret());
            jsonMap.put("Security Token", response.getCredentials().getSecurityToken());
            jsonMap.put("RequestId", response.getRequestId());

        } catch (ClientException e) {
            jsonMap.put("message", e.getErrMsg());
            jsonMap.put("RequestId", e.getRequestId());
        }
        return jsonMap;
    }
}

复制代码

4.根据STS,及bucket测试上传文件和下载文件

//上传
   private void upload(Map<String, Object> stsMap, String bucketName) {
        String filename = "E://road_status.sql";
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = stsMap.get("Access Key Id").toString();
        String accessKeySecret = stsMap.get("Access Key Secret").toString();
        String securityToken = stsMap.get("Security Token").toString();
        String objectName = "1126ywwtest2";

        // 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。
        // 创建OSSClient实例。
       // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, securityToken);
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);
        ossClient.putObject(bucketName, objectName, new File(filename));
        ossClient.shutdown();
    }

//下载
  private void getFileToLocal(Map<String, Object> stsMap, String bucket) {
        String filename = "student_data.csv";
    // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = stsMap.get("Access Key Id").toString();
        String accessKeySecret = stsMap.get("Access Key Secret").toString();
        String securityToken = stsMap.get("Security Token").toString();
        String bucketName = bucket;
        String objectName = filename;

        // 用户拿到STS临时凭证后,通过其中的安全令牌(SecurityToken)和临时访问密钥(AccessKeyId和AccessKeySecret)生成OSSClient。
     // 创建OSSClient实例。
        //OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, securityToken);
        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);

        // OSS相关操作。例如上传、下载文件等。
        // 上传文件。
        // ossClient.putObject(putObjectRequest);

        // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
        ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("F://1126.csv"));

        // 关闭OSSClient。
         ossClient.shutdown();
    }

复制代码

参考

  • github.com/aliyun/aliy…
  • help.aliyun.com/document_de…
  • www.alibabacloud.com/help/zh/doc…
原文  https://juejin.im/post/5ddc9a236fb9a07a97004644
正文到此结束
Loading...