STS臨時受權訪問OSS文件-java實現

1.說明

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

主要包含三個步驟:
1.建立用戶
2.建立權限策略
3.建立RAM角色並受權java

上述步驟皆在阿里雲文檔能夠完成git

2.導包

mavan導阿里雲的sts 及 oss的依賴github

<!-- 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();
    }

複製代碼

參考

相關文章
相關標籤/搜索