2014-06-10 1 views
16

Je suis en train d'accéder à un seau et tout son objet en utilisant AWS SDK, mais tout en exécutant le code que je reçois une erreur Exception dans le thread « principal » 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 Java - Access Denied

Veuillez suggérer, où Je manque et pourquoi erreur d'accès refusé se produit bien que j'ai pris toutes les autorisations suivantes dans le seau:

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

est la suivante:

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

Répondre

5

Le problème est maintenant résolu. Il y avait problème suivant au code:

  1. Le point final n'était pas correct, il devrait y avoir un point final correct.
  2. Il n'y avait pas assez de permission donnée au seau. Une liste d'autorisations complètes doit être prise avant d'utiliser le compartiment dans AWS SDK.

est Ci-dessous le code correct

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

Désolé de faire apparaître l'ancien message, mais ne comprends toujours pas pourquoi cela a fonctionné avec le navigateur S3, mais ne fonctionne pas dans AWS SDK? – powerfade917

+0

Pouvez-vous expliquer le point exact du problème avec votre code? Cela devrait fonctionner correctement si vous avez tout fait correctement. – gkbstar

+1

Je peux accéder à un dossier à l'intérieur de seau en utilisant S3 Browser ou CyberDuck mais quand j'utilise aws sdk php pour lister les clés avec le préfixe, je reçois Aws \ S3 \ Exception \ AccessDeniedException: Code d'erreur AWS: AccessDenied, Code d'état: 403 – powerfade917

20

G o à IAM et vérifiez si l'utilisateur [Clé d'accès & Clé secrète] qui est utilisé pour l'API a le privilège d'utiliser l'API S3.

Stratégie S3 attachée à l'utilisateur spécifié - essayez avec S3 Full Access; vous pouvez affiner l'accès une fois que cela fonctionne. Pour plus d'informations Vérifiez ce lien [Managing IAM Policies]

+0

Salut suis capable de connecter le même seau à l'aide de disque dragon et le navigateur s3, mais pas par le code. – gkbstar

+0

pouvez-vous revérifier si vous utilisez la même paire [clé d'accès, clé secrète] pour le code et le disque dragon? Vérifiez également la stratégie de compartiment et le propriétaire du compartiment; Coz. ils jouent un rôle très important surtout dans le scénario de refus d'accès. –

+0

Salut merci, Maintenant, je suis capable de travailler problème en réalité était que je n'avais pas la liste complète des autorisations pour le seau maintenant j'ai pris toutes les autorisations pour AWS SDK et son fonctionnement bien. – gkbstar