簡體   English   中英

使用s3復制失敗,訪問被拒絕

[英]using s3 copy failed with access denied

我正在嘗試將文件從s3存儲桶中的一個文件夾復制到另一個文件夾。 我使用aws jdk復制文件。我檢查了其他問題,但大多數情況下使用的是其他sdk。 我使用了本文中提到的相同方法( AWS S3復制對象源鍵和目標鍵 ),只是我的鍵包含文件夾結構。

我正在使用以下代碼。

public CopyObjectResult copyToAFolder(String sourceBucketName,
        String sourceKeyName, String destinationBucketName,
        String destinationKeyName) {
    LOG.info(
            "Archiving the file Source:{},SourceKey:{},Destination:{},DestinationKey:{}",
            new Object[] { sourceBucketName, sourceKeyName, destinationBucketName,
                    destinationKeyName });
    CopyObjectRequest copyObjRequest = new CopyObjectRequest(sourceBucketName,
            sourceKeyName, destinationBucketName, destinationKeyName);
    return amazonS3Client.copyObject(copyObjRequest);
}

我正在傳遞這樣的參數。我通過使用列表服務獲得了密鑰名稱,因此密鑰名稱是正確的。

 sourceBucketName: myTestBucket
 sourceKeyName:testing/movement/sample.txt
 destinationBucketName:myTestBucket
 destinationKeyName:testing/movement2/sample.txt(I have tried with /testing/movement2/ also)

由於accessDenied異常而失敗。 我對該存儲桶具有完全訪問權限,可以使用S3Client從該存儲桶中刪除文件。 拒絕的訪問特定於單獨復制。 知道為什么會這樣。

錯誤。

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXXXXXX)
        at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1343) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:961) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:738) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:489) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:448) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:397) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:378) ~[aws-java-sdk-core-1.11.37.jar:na]
        at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4039) ~[aws-java-sdk-s3-1.11.37.jar:na]
        at com.amazonaws.services.s3.AmazonS3Client.copyObject(AmazonS3Client.java:1714) ~[aws-java-sdk-s3-1.11.37.jar:na]

我遇到了類似的問題,我的訪問被拒絕了。

原來是因為我沒有使用元數據復制對象,而是添加了加密算法。

    ObjectMetadata metadatum = new ObjectMetadata();
    metadatum.setSSEAlgorithm(AES);
    request.setNewObjectMetadata(metadatum);

解決方案可以是

  • 您需要在Java代碼中提及正確的AWS S3端點。
  • 在Internet Explorer中比在Chrome上嘗試一下。 因為Chrome僅使用文件名而不是整個文件路徑。
  • 如果您嘗試從EC2實例訪問S3,則實例應具有S3 IAM角色並具有必要的權限。
  • 如果您在本地計算機上工作,請確保訪問密鑰和秘密訪問密鑰均正確且有效。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM