Estoy realmente agitado en AWS tratando de descubrir lo que me falta aquí. Me gustaría hacerlo para que un usuario de IAM pueda descargar archivos de un bucket de S3, sin hacer que los archivos sean totalmente públicos, pero se me niega el acceso. Si alguien puede detectar lo que está fuera, me alegrarán.
Lo que he hecho hasta ahora:
- Creé un usuario llamado my-user (por ejemplo)
- Claves de acceso generadas para el usuario y ponerlas en ~ / .aws en una instancia EC2
- Creé una política de depósito que esperaba que otorgara acceso a mi usuario
- Corrió el comando
aws s3 cp --profile my-user s3://my-bucket/thing.zip .
Política del cubo:
{
"Id": "Policy1384791162970",
"Statement": [
{
"Sid": "Stmt1384791151633",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/my-user"
}
}
]
}
El resultado es A client error (AccessDenied) occurred: Access Denied
aunque puedo descargar usando el mismo comando y las teclas de acceso predeterminadas (¿cuenta raíz?).
También he intentado agregar una política de usuario. Si bien no sé por qué sería necesario, pensé que no dolería, así que lo adjunté a mi usuario.
{
"Statement": [
{
"Sid": "Stmt1384889624746",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Los mismos resultados
Cuando me enfrenté al mismo problema, resultó que AWS requería que se habilitara el cifrado del lado del servidor. Entonces el siguiente comando funcionó exitosamente para mí:
fuente
--sse aws:kms
usar el cubo "predeterminado" ...--sse-kms-key-id 0123-abc-etc
embargo, la parte que no está clara es que para usar su propia clave KMS debe tener el permiso IAMkms:GenerateDataKey
o aún se le negará el acceso.No recomendaría la opción 'Cualquier usuario autenticado de AWS' mencionado por James.
Al hacerlo, se agrega una ACL de nivel de depósito que permite que cualquier cuenta de AWS (no solo sus usuarios de IAM) enumere / elimine / modifique acls para ese depósito.
es decir, lectura / escritura pública para cualquier persona con una cuenta aws.
fuente
Me las arreglé para solucionar esto sin tener que escribir políticas: desde la consola S3 (interfaz de usuario web) seleccioné el depósito y en la pestaña de permisos elegí "Cualquier usuario de AWS autenticado" y emití todas las casillas.
ACTUALIZACIÓN: como se señala en los comentarios "Cualquier usuario de AWS autenticado" no es solo usuarios de su cuenta, es todo usuario autenticado de AWS, utilice con precaución
fuente
Incluso si sus políticas de IAM están configuradas correctamente, aún puede obtener un error como
An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied
debido a los requisitos de MFA (Autenticación de múltiples factores) en sus credenciales. Esto puede pillarle desprevenido porque si ya ha iniciado sesión en la consola de AWS, parecerá que sus credenciales funcionan bien y el mensaje de error de permiso denegado de aws cli no es particularmente útil.Ya hay algunas buenas instrucciones sobre cómo configurar MFA con aws cli:
Básicamente, necesita la dirección de su dispositivo MFA y enviarla con el código de su dispositivo para obtener un token temporal.
fuente
Simplemente entré en la interfaz de usuario web e hice clic en el cubo, luego fui a los permisos y luego a la política. Cuando lo abrí, simplemente hice clic en Eliminar. Hice esto porque creo que también fue la configuración.
Regresé a la página principal de s3, luego hice clic en el cubo e intenté eliminarlo y funcionó.
incluso cuando lo hice por aws-cli usando
De todos modos, eso es lo que funcionó para mí. La política de permisos le impide eliminar el depósito.
fuente
Una vez que recibí este error simplemente intentando ejecutar:
aws s3 cp s3://[bucketName]/[fileName] .
en una carpeta donde no tenía permisos. Es una tontería, ¡pero asegúrese de ser el propietario de la carpeta en la que se encuentra antes de continuar!
fuente
El problema surge cuando inserta nombres de recurso o de objeto no válidos. Tuve el mismo problema con boto3 (en mi caso era un nombre de depósito no válido)
fuente