Aquí está mi código Java:
AmazonS3 conn = new AmazonS3Client(); AmazonS3URI uri = new AmazonS3URI(s3uri); ObjectListing objects = conn.listObjects(uri.getBucket(), uri.getKey()); Una tarea muy simple, trato de usar el cliente Java de AmazonS3 para acceder a S3, pero esta línea conn.listObjects sigue fallando y me da la siguiente excepción:
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXX), S3 Extended Request ID: xxxxxxxxx at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389) at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607) at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376) at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3778) at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:610) at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:588)Un código de error muy obvio: 403 que indica que mis credenciales de aws son incorrectas, sin embargo, estas son exactamente las mismas credenciales que mis compañeros de trabajo están usando para acceder al mismo depósito s3, para descartar la posibilidad de que tenga un error tipográfico en alguna parte, literalmente eliminé mi anterior y usé el mismo que me enviaron mis compañeros de trabajo y los puse en ~/.aws/
También investigué otras posibles razones, una podría ser que este depósito S3 no otorga los permisos a mi rol de IAM, aparentemente ese tampoco es mi caso.
¿Alguna ayuda por favor? ¿Cuál podría ser el culpable?
AWS SDK for Java tiene una DefaultAWSCredentialsProviderChain que verifica las credenciales en este orden:
~/.aws/credentials ) compartido por todos los SDK de AWS y la CLI de AWSAWS_CONTAINER_CREDENTIALS_RELATIVE_URI está configurada y el administrador de seguridad tiene permiso para acceder a la variableEs posible que sus credenciales se estén configurando antes de consultar el archivo de configuración deseado.
Una forma de verificar qué credenciales se están utilizando es usar el comando aws iam get-user para mostrar el usuario actual. También puede probar eso en Java con la llamada GetUser() .
Si ayuda a alguien, recibí este error porque la política del depósito se configuró para denegar cuando no se especificó el cifrado del lado del servidor s3:x-amz-server-side-encryption al intentar cargar en el depósito.