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());
Le problème est maintenant résolu. Il y avait problème suivant au code:
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());
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 ]
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.