amazons3clientbuilder - profilecredentialsprovider aws java example
AWS S3 Java SDK-Acceso denegado (3)
Estoy tratando de acceder a un grupo y todo su objeto utilizando AWS SDK, pero al ejecutar el código 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=
un error como Excepción en el hilo "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=
Sugiera amablemente dónde me está faltando y por qué se está produciendo el error de acceso denegado, aunque he tomado todos los siguientes permisos en el depósito:
s3:GetObject
s3:GetObjectVersion
s3:GetObjectAcl
s3:GetBucketAcl
s3:GetBucketCORS
s3:GetBucketLocation
s3:GetBucketLogging
s3:ListBucket
s3:ListBucketVersions
s3:ListBucketMultipartUploads
s3:GetObjectTorrent
s3:GetObjectVersionAcl
El código es el siguiente:
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());
El problema ahora está resuelto. Hubo los siguientes problemas con el código:
- El punto final no era correcto, debería haber un punto final correcto.
- No se le dio suficiente permiso al cubo. Se debe tomar una lista de los permisos completos antes de usar el paquete en AWS SDK.
Abajo esta el codigo correcto
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());
En la pestaña de permisos del cubo, desmarco:
- Gestionar listas de control de acceso público (ACL) para este grupo
- Bloquee nuevas ACL públicas y suba objetos públicos (Recomendado)
y el problema se fue.
Vaya a IAM y verifique si el usuario [Clave de acceso y clave secreta] que se está utilizando para la API tiene los privilegios para usar la API basada en S3.
Política de S3 adjunta al usuario especificado: intente con S3 Full Access ; Puedes acceder al grano una vez que esto funcione. Para obtener más información, consulte este enlace [ Gestión de políticas de IAM ]