2016-11-03 20 views
0

s3バケット内の1つのフォルダから別のフォルダにファイルをコピーしようとしています。私はファイルをコピーするaws jdkを使用しています。他の質問を確認しましたが、主に他のsdkを使用しています。私はこのポスト(AWS S3 copy object source key and destination key)で言及された同じ方法を使用して、異なる私のキーはフォルダ構造を含んでいます。アクセスを拒否して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); 
} 

this.Iがリスティングサービスを使って、キー名を得たように私は、パラメータを渡していますので、キーの名前は右です。

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] 
+0

ファイルが権限を持っている確認しました、ファイルは、それが権限を持っているバケツ – kuhajeyan

+0

に加えて、独自の権限を有していてもよく、私はこのファイルを削除することができています。 – Harry

+0

あなたはIAMユーザーとしてリクエストしていますか、AWSはさまざまなコンテキストでアクセス許可を確認しています。http://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-auth-workflow-object-operation.html – kuhajeyan

答えて

0

ソリューションは、Javaコードで正しいAWS S3のエンドポイントを言及する必要があり、

  • することができます。
  • ChromeよりもInternet Explorerでお試しください。 Chromeはファイルパス全体ではなく、ファイルパス全体を使用するためです。
  • EC2インスタンスからS3にアクセスしようとする場合、インスタンスには必要な権限を持つS3 IAMロールが必要です。
  • ローカルコンピュータで作業している場合は、AccessキーとSecret Accessキーの両方が正しいことと有効であることを確認してください。

ありがとうございます。

1

私は

は、私は、メタデータを持つオブジェクトをコピーするため、暗号化アルゴリズムを追加していなかったので、それがあったが..私はアクセス拒否を得ていた同様の問題がありました。

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