2014-06-10 23 views
16

Próbuję uzyskać dostęp do wiadra i cały swój obiekt za pomocą AWS SDK ale podczas działania kodu otrzymuję błąd jako wyjątek w wątku „main” 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 Java SDK - Odmowa dostępu

Uprzejmie zasugerować, gdzie jestem brakuje i dlatego odmowa dostępu błąd występuje chociaż muszę podjąć wszystkie następujące uprawnienia do wiadra:

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

Kod jest następujący:

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

Odpowiedz

5

Problem został rozwiązany. Wystąpił następujący problem w kodzie:

  1. Punkt końcowy nie był poprawny, powinien być poprawny punkt końcowy.
  2. Nie było wystarczającej zgody na wiadro. Przed użyciem zasobnika w pakiecie AWS SDK należy uzyskać pełną listę uprawnień.

Poniżej jest poprawny kod

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

Przepraszamy za stary wpis, ale nadal nie wiemy, dlaczego działało z przeglądarką S3, ale nie działa w pakiecie AWS SDK? – powerfade917

+0

Czy możesz wyjaśnić dokładny punkt problemu związany z kodem? Powinien działać dobrze, jeśli wszystko zrobiłeś poprawnie. – gkbstar

+1

Mogę uzyskać dostęp do folderu wewnątrz wiadra przy użyciu przeglądarki S3 Browser lub CyberDuck, ale kiedy używam aws sdk php do listy kluczy z prefiksem, otrzymuję Uncaught Aws \ S3 \ Exception \ AccessDeniedException: AWS Error Code: AccessDenied, Status Code: 403 – powerfade917

20

G o do IAM i sprawdź, czy użytkownik [Klucz dostępu & Tajny klucz], który jest używany dla interfejsu API, ma previliges do korzystania z API opartego na S3.

Załączono Politykę S3 do określonego Użytkownika - spróbuj z S3 Full Access; możesz precyzyjnie ustawić dostęp, gdy to zadziała. Aby uzyskać więcej informacji, sprawdź ten link [Managing IAM Policies]

+0

Cześć jestem w stanie połączyć się przy użyciu tego samego wiadra dysk smok i przeglądarkę s3 ale nie poprzez kod. – gkbstar

+0

Czy możesz ponownie sprawdzić, czy używasz tej samej pary [Klucz dostępu, klucz tajny] dla kodu i dysku Dragon? Sprawdź także zasady dotyczące kubełków i właściciela łyżki; Coz. odgrywają bardzo istotną rolę, szczególnie w scenariuszu z odmową dostępu. –

+0

Cześć dziękuję, Teraz jestem w stanie pracować faktycznie problem polegał na tym, że nie miałem pełnej listy uprawnień do wiadra, teraz mam wszystkie uprawnienia do AWS SDK i działa dobrze. – gkbstar

Powiązane problemy