Estoy obteniendo:
Se produjo un error (AccessDenied) al llamar a la operación ListObjects: acceso denegado
Cuando intento obtener la carpeta de mi bucket de S3.
Usando este comando:
aws s3 cp s3://bucket-name/data/all-data/ . --recursive
Los permisos de IAM para el depósito se ven así:
{
"Version": "version_id",
"Statement": [
{
"Sid": "some_id",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucketname/*"
]
}
] }
¿Qué necesito cambiar para poder copy
y con ls
éxito?
amazon-web-services
amazon-s3
usuario1411335
fuente
fuente
aws
para un usuario y lo usé dentro de un script bash llamado cronjob de otro usuario, lo que significa que la clave de acceso y el token de acceso estaban incorrectos / desarmados. Mi solución fue poner directamente las credenciales (AWS_ACCESS_KEY_ID
yAWS_SECRET_ACCESS_KEY
) en mi archivo de script bash como se describe aquí .Respuestas:
Ha dado permiso para ejecutar comandos en objetos dentro del depósito S3, pero no ha dado permiso para realizar ninguna acción en el depósito en sí.
Modificar ligeramente su política se vería así:
Sin embargo, eso probablemente da más permiso del necesario. Seguir las mejores prácticas de AWS IAM de otorgar el menor privilegio se vería así:
fuente
"Resource": [ "arn:aws:s3:::bucketname/", "arn:aws:s3:::bucketname/*" ]
como lo hice (es decir, solo quieres una barra antes del*
): me tomó 4 largas horas darme cuenta de que este error hizo que todas mislistObjects
llamadas fallaran ...Si desea copiar todos los objetos de depósito de s3 utilizando el comando "aws s3 cp s3: // nombre de depósito / datos / todos los datos /. - recursivo" como mencionó, aquí hay una política segura y mínima para hacerlo:
La primera declaración en esta política permite enumerar objetos dentro de un subdirectorio de un depósito específico. El recurso debe ser el arn del depósito de S3 y, para limitar el listado a solo un subdirectorio en ese depósito, puede editar el valor "s3: prefijo".
La segunda declaración en esta política permite obtener objetos dentro del depósito en un subdirectorio específico. Esto significa que cualquier cosa dentro de la ruta "s3: // bucket-name / data / all-data /" podrá copiar. Tenga en cuenta que esto no le permite copiar desde rutas principales como "s3: // nombre-cubo / datos /".
Esta solución es específica para limitar el uso de los comandos de AWS CLI; Si necesita limitar el acceso S3 a través de la consola o API de AWS, se necesitarán más políticas. Sugiero echar un vistazo aquí: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ .
Aquí puede encontrar un problema similar al que me llevó a la solución que estoy dando. https://github.com/aws/aws-cli/issues/2408
¡Espero que esto ayude!
fuente
ListBucket
a una subclave: stackoverflow.com/a/35952877/89218Debe especificar el recurso para el depósito mediante "arn: aws: 3 ::: bucketname" o "arn: aws: 3 ::: bucketname *". Se prefiere este último ya que también permite manipulaciones en los objetos del cubo. Tenga en cuenta que no hay barra oblicua!
Listar objetos es una operación en Bucket. Por lo tanto, se requiere la acción "s3: ListBucket". Agregar un objeto al Bucket es una operación en Object. Por lo tanto, se necesita la acción "s3: PutObject". Ciertamente, es posible que desee agregar otras acciones según lo requiera.
fuente
arn:aws:s3:::bucketname*
es que también permite el acceso aarn:aws:s3:::bucketname-with-suffix
No pude acceder a S3 porque
Solución:
rm -rf .aws/credentials
luegoaws
usa el rol.fuente
Obtuve el mismo error al usar la política que se muestra a continuación, aunque tengo "s3: ListBucket" para la operación s3: ListObjects.
Luego lo arreglé agregando una línea "arn: aws: s3 ::: bucketname"
fuente
Estaba pensando que el error se debe a "s3: ListObjects" acción pero tenía que agregar la acción "s3: ListBucket" para resolver el problema "AccessDenied para ListObjects para S3 cubo"
fuente
Me enfrenté al mismo problema. Acabo de agregar credenciales config:
en "~ / .aws / credentials" + reiniciar terminal para el perfil predeterminado.
En el caso de perfiles múltiples, se debe agregar arg de perfil :
donde PROFILE_NAME :
Puede encontrar más información sobre cómo configurar credenciales y perfiles múltiples aquí
fuente
Intenté lo siguiente:
Esto me dio el error:
Utilizando este formulario funcionó:
fuente
Estoy agregando una respuesta con la misma dirección que la respuesta aceptada pero con pequeñas diferencias (importantes) y agregando más detalles.
Considere la siguiente configuración:
La política otorga acceso programático de escritura-eliminación y se divide en dos partes:
la
ListBucket
acción proporciona permisos en el nivel de depósito y las otrasPutObject/DeleteObject
acciones requieren permisos en los objetos dentro del depósito.El primer elemento Resource especifica
arn:aws:s3:::<Bucket-Name>
laListBucket
acción para que las aplicaciones puedan enumerar todos los objetos en el depósito.El segundo elemento Resource especifica
arn:aws:s3:::<Bucket-Name>/*
las accionesPutObject
yDeletObject
para que las aplicaciones puedan escribir o eliminar cualquier objeto en el depósito.La separación en dos 'arns' diferentes es importante por razones de seguridad para especificar permisos de grano fino a nivel de cubo y de objeto.
Tenga en cuenta que si hubiera especificado solo
GetObject
en el segundo bloque, lo que sucedería es que, en casos de acceso programático, recibiría un error como:Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
.fuente
Me encontré con problemas similares, para mí el problema era que tenía diferentes claves de AWS configuradas en mi bash_profile.
Respondí una pregunta similar aquí: https://stackoverflow.com/a/57317494/11871462
Si tiene claves de AWS en conflicto en su bash_profile, la CLI de AWS se establece de manera predeterminada en estas.
fuente
Tuve este problema, mi requisito, quería permitir que el usuario escribiera en una ruta específica
y el problema se resolvió con este cambio
fuente