2014-06-10 2 views
16

내가 AWS SDK를 사용하여 양동이와 모든 개체에 액세스하려고 거부하지만 "주요"내가 스레드에서 예외 같은 오류가 발생하고 코드를 실행하는 동안 com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: X), S3 Extended Request ID: Y=AWS S3 자바 SDK는 - 액세스

친절 여기서 제안 내가 부족하고 그리고 난 양동이에 다음의 모든 권한을 촬영하고 있지만 액세스 거부 오류가 발생하는 이유 :

s3:GetObject 
s3:GetObjectVersion 
s3:GetObjectAcl 
s3:GetBucketAcl 
s3:GetBucketCORS 
s3:GetBucketLocation 
s3:GetBucketLogging 
s3:ListBucket 
s3:ListBucketVersions 
s3:ListBucketMultipartUploads 
s3:GetObjectTorrent 
s3:GetObjectVersionAcl 

코드는 다음과 같다 :

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); 
    ClientConfiguration clientConfig = new ClientConfiguration(); 
    clientConfig.setProtocol(Protocol.HTTP); 
    AmazonS3 conn = new AmazonS3Client(credentials, clientConfig); 
    conn.setEndpoint(bucketName); 
    Bucket bucket = conn.createBucket(bucketName); 
    ObjectListing objects = conn.listObjects(bucket.getName()); 
    do { 
      for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { 
        System.out.println(objectSummary.getKey() + "\t" + 
          objectSummary.getSize() + "\t" + 
          StringUtils.fromDate(objectSummary.getLastModified())); 
      } 
      objects = conn.listNextBatchOfObjects(objects); 
    } while (objects.isTruncated()); 

답변

5

이제 문제가 해결되었습니다. 코드에 다음과 같은 문제가 발생했습니다.

  1. 끝점이 잘못되었습니다. 올바른 끝점이 있어야합니다.
  2. 양동이에 대한 사용 권한이 충분하지 않았습니다. AWS SDK에서 버킷을 사용하기 전에 완전한 권한 목록을 가져와야합니다.

다음은 올바른 코드

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); 
ClientConfiguration clientConfig = new ClientConfiguration(); 
clientConfig.setProtocol(Protocol.HTTP); 
AmazonS3 conn = new AmazonS3Client(credentials, clientConfig); 
conn.setEndpoint("correct end point"); 
Bucket bucket = conn.createBucket(bucketName); 
ObjectListing objects = conn.listObjects(bucket.getName()); 
do { 
     for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) { 
       System.out.println(objectSummary.getKey() + "\t" + 
         objectSummary.getSize() + "\t" + 
         StringUtils.fromDate(objectSummary.getLastModified())); 
     } 
     objects = conn.listNextBatchOfObjects(objects); 
} while (objects.isTruncated()); 
+0

이전 게시물을 가져 와서 미안하지만 여전히 S3 브라우저에서 작동하지만 AWS SDK에서 작동하지 않는 이유는 무엇입니까? – powerfade917

+0

코드와 관련된 문제의 정확한 지점을 설명 할 수 있습니까? 모든 작업을 올바르게 수행하면 정상적으로 작동합니다. – gkbstar

+1

S3 Browser 또는 CyberDuck을 사용하여 버킷 내부의 폴더에 액세스 할 수 있지만 aws sdk php를 사용하여 접두어가있는 키를 나열하면 Aws \ S3 \ Exception \ AccessDeniedException가 발생합니다. AWS 오류 코드 : AccessDenied, 상태 코드 : 403 – powerfade917

20

G o를 IAM에 추가하고 API에 사용되는 사용자 [Access Key & Secret Key]가 S3 기반 API를 사용하기위한 우선 순위가 있는지 확인하십시오.

첨부 된 S3 지정한 사용자에게 정책 - 시도해보십시오 S3 전체 액세스; 이 작업이 완료되면 액세스를 미세하게 조정할 수 있습니다. 자세한 정보 확인이 링크 [Managing IAM Policies]

+0

안녕하세요 용 디스크 및 S3 브라우저가 아닌 코드를 사용하여 동일한 버킷을 연결 할 수 있어요에게 있습니다. – gkbstar

+0

코드 & 드래곤 디스크 모두에 대해 동일한 [액세스 키, 비밀 키] 쌍을 사용하고 있는지 다시 확인할 수 있습니까? 또한 버킷 정책과 Bucket Owner를 확인하십시오. Coz. 특히 액세스가 거부 된 시나리오에서 매우 중요한 역할을합니다. –

+0

안녕하세요, 고맙습니다. 이제 실제로 문제를 해결할 수있었습니다. 이제는 AWS SDK 및 해당 작업에 대한 모든 권한을 얻었으므로 버킷에 대한 사용 권한의 전체 목록이 없었습니다. – gkbstar