web-dev-qa-db-fra.com

SDK Java AWS S3 - Accès refusé

J'essaie d'accéder à un compartiment et à tous ses objets à l'aide du kit SDK AWS, mais lors de l'exécution du code, une erreur est générée en tant qu'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=.

Veuillez suggérer, là où je manque et pourquoi l'accès refusé est une erreur alors que j'ai pris toutes les autorisations suivantes pour le panier:

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

Le code est le suivant:

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

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 des autorisations complètes doit être créée avant d'utiliser le compartiment dans AWS SDK.

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

Allez dans IAM et vérifiez si l’utilisateur [Clé d’accès et clé secrète] utilisé pour l’API dispose des capacités nécessaires pour utiliser une API S3.

Attachez la stratégie S3 à l'utilisateur spécifié - essayez avec S3 Full Access; vous pouvez affiner l'accès une fois que cela fonctionne .. Pour plus d'informations, cliquez sur ce lien [ Gestion des stratégies IAM ]

23
Naveen Vijay

Dans l'onglet permission de seau, je décoche:

  • Gérer les listes de contrôle d'accès public (ACL) pour ce compartiment 
  • Bloquer les nouvelles ACL publiques et télécharger des objets publics (recommandé)

et le problème est parti.

0
phongnt