Tengo un depósito simple que se parece images.mysite.com
a mi S3 y otros depósitos que contienen copias de seguridad, etc.
Quiero permitir que un usuario específico pueda acceder al images.mysite.com
bucket para cargar imágenes. Sin embargo, NO quiero que vea ninguno de los otros cubos; Ni siquiera que existan.
No podría hacer una política que haga esto; Cada vez que intento algo restrictivo, termina bloqueando la lista de cualquier cubo.
https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/
. De esta forma, evita que vean la lista completa y no cambia nada en su política actual.Respuestas:
He estado intentando esto por un tiempo y finalmente encontré una solución que funciona. Debe usar diferentes "Recursos" dependiendo del tipo de acción que esté realizando. También incluí algunas acciones faltantes en la respuesta anterior (me gusta
DeleteObject
) y restringí algunas más (me gustaPutBucketAcl
).La siguiente política de IAM está funcionando para mí ahora:
Las acciones relacionadas con un cubo y las relacionadas con los objetos deben tener arn diferentes.
fuente
ListAllMyBuckets
yGetBucketLocation
para todos los depósitos S3 ("arn:aws:s3:::*"
funcionará en lugar"*"
del recurso). Como se indica en esta publicación de blog de AWS "aparte, actualmente no puede filtrar selectivamente ciertos depósitos, por lo que los usuarios deben tener permiso para enumerar todos los depósitos para el acceso a la consola".Nuestro caso de uso: proporcione espacio de copia de seguridad para los clientes de nuestra aplicación en la nube a la que los clientes puedan acceder directamente utilizando herramientas comunes de S3. Por supuesto, ningún cliente debería ver lo que tienen otros clientes.
Como explicó cloudberryman, "Puede enumerar todos los cubos o ninguno", por lo que tenemos que encontrar una solución. Antecedentes:
Se necesita otorgar derechos ListAllMyBuckets al usuario para que la consola AWS S3 o S3Fox se conecten sin un mensaje de error. Pero ListAllMyBuckets enumera todos los depósitos, independientemente de los recursos asignados (en realidad, solo arn: ... ::: * funciona). Eso es un error grave, si me preguntas. Por cierto. denegar ListBucket para todos los depósitos no impide que se enumeren, ya que ListBucket otorga derechos para enumerar el contenido del depósito.
Hay 3 posibilidades que consideré como alternativas. Elegí el último.
(1) utilice nombres de depósito crípticos, por ejemplo, GUID
Ventaja: fácil de configurar
Desventaja: difícil de gestionar, especialmente para el cliente. (imagine encontrar un GUID específico entre miles de otros). También muestra el número de cubos = número de clientes que utilizan el servicio de copia de seguridad.
(2) use un cubo con carpetas específicas del cliente
Así es como Amazon sugiere en sus ejemplos S3 / IAM proporcionar espacio para acceder solo para ciertos usuarios o grupos de usuarios. Consulte: Ejemplo de políticas de IAM de AWS
Ventaja: bastante fácil de configurar, va con ideas de AWS
Desventaja: obliga a hacer pública la existencia de todos los cubos, para que el cliente pueda encontrar su cubo "de origen". La contabilidad de AWS proporciona estadísticas del uso del depósito, pero no del uso de la carpeta, lo que dificulta el cálculo del costo por parte del cliente.
(3) no conceda el derecho de acceso a ListAllMyBuckets
Ventaja: obtienes lo que quieres: los clientes no pueden ver los cubos de otros clientes
Desventaja: el cliente no puede ver su propio cubo. S3Browser viene con un buen mensaje "no se puede hacer" y le pide que ingrese el nombre del depósito. S3Fox arroja un mensaje de error cuando se conecta a la raíz, pero permite la navegación directa al depósito del cliente si se conoce el nombre del depósito. La consola de Amazon S3 no funciona en absoluto.
Espero que esto haya ayudado a manejar S3 IAM cuando lo necesite.
fuente
No es posible proporcionar acceso a la consola S3 sin otorgar el
ListAllMyBuckets
permiso.En mi caso (y quizás también en el tuyo, futuro lector), una alternativa aceptable es redirigir a los usuarios que inician sesión directamente al bucket que les gustaría que vieran.
Para lograr esto, agregue lo siguiente a su URL de inicio de sesión de IAM:
/s3/?bucket=bucket-name
URL de inicio de sesión completa (reemplace your-alias y bucket-name ):
https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name
Política de IAM (reemplace nombre de cubo )
Para obtener más información sobre cómo crear permisos específicos de depósito para los usuarios, lea este blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam / /
fuente
Prueba esta política. También tenga en cuenta que no hay forma de permitir que el usuario enumere solo el bucket seleccionado. Puede enumerar todos los cubos o ninguno.
fuente
s3:*
para que funcione para mí. También lo hice"Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"]
, pero esto podría no ser necesario.Estoy interpretando esta pregunta como: "¿Puedo permitir el acceso a un depósito donde otros depósitos no serán accesibles y, por lo tanto, invisibles?". Porque mostrar el nombre de la cubeta a la que no se le otorgó acceso todavía equivale a una fuga de información.
Y la respuesta correcta es no. El permiso requerido es ListAllMyBuckets que permitirá al usuario ver TODOS los depósitos. Dejar de lado este permiso hará que la consola sea inutilizable.
fuente
Hay una excelente manera de permitir que los usuarios accedan a un depósito específico sin comprender el conocimiento de otros depósitos. Una política de grupo similar a la siguiente permitirá que los usuarios solo vean "bucket a". El único inconveniente es que el usuario solo podrá acceder al depósito si se conecta al punto final del depósito dado. Para el siguiente ejemplo, sería bucket-a.s3.amazonaws.com. Es posible que el depósito también deba tener "Usuarios autenticados" permitidos para que esto ocurra.
Este método fue probado con Cyberduck en Mac OS / X y utilizando el paquete s3cmd
fuente
Confundido acerca de por qué no se marcó la respuesta?
Analicemos cada declaración de política de las soluciones anteriores:
Esta declaración de política de aplica al contenido de la cubeta, pero no el dinero en sí. Probablemente esto no sea lo que pidió la pregunta, porque no puede ver lo que hay en el cubo.
Esta política de dos declaraciones derivada de da acceso de solo lectura al depósito en (
arn:aws:s3:::your_bucket_here/
) solo lectura , pero aún permite operaciones CRUD en el contenido del depósito (arn:aws:s3:::your_bucket_here/*
).Sin embargo, la política incluye la siguiente declaración, que permite al usuario ver todos los depósitos en el punto final. Esta es probablemente no lo que la pregunta pidió.
Sin embargo, lo anterior es muy útil si utiliza un cliente que navega por una tienda S3. Si su cliente accede a la tienda y no al depósito directamente, entonces necesita acceso a la lista de depósitos en la raíz.
fuente
Probablemente el caso de uso más simple:
fuente
This policy contains the following error: The policy must contain a valid version string
(listing included)
significado de cómo enumerar solo el cubo en el que el usuario puede ingresar? Hasta ahora (y de acuerdo con todas las otras respuestas), parece que AWS no te permitirá hacer eso.Hay una manera fácil o una solución alternativa para hacerlo utilizando las organizaciones de AWS. La organización de AWS le permite tener múltiples cuentas de usuario. Su cuenta principal puede tener múltiples cuentas de AWS (Sub) y los servicios (s3 / EC2 / *) que se agreguen en las cuentas de AWS en las que solo esos recursos serán visibles.
Consulte https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/
Organización en la página de mi cuenta
fuente
Encontré esta solución:
AWS FLOW:
Política del cubo:
Política de IAM:
aws iam get-user -–user-name NOMBRE DE USUARIO --profile = ExampleProfile
aws iam get-role --role-name ROLE-NAME --profile = EjemploPerfil
Fuente: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
PD: ten cuidado con la política de cubos, puedes quedarte afuera sin permisos
fuente
Como se ha discutido anteriormente, no es posible enumerar solo un cubo en la consola. Pero si el acceso del bucket de S3 está conectado a un IAM, IAM puede acceder directamente al bucket si la URL al bucket está disponible. La URL del cubo S3 será como:
https://s3.console.aws.amazon.com/s3/buckets/BucketName
Donde BucketName es el nombre del cubo IAM tiene acceso a
fuente
Logré que funcionara lo siguiente. Significa que la lista de otros depósitos recibió el mensaje de acceso denegado. Pero aún podía ver el depósito que quería si me conectaba con el nombre del depósito establecido como ruta.
Estaba usando Cyberduck para probar esta conexión.
fuente
Si bien no es posible restringir la
s3:ListAllMyBuckets
acción a grupos específicos, en cuanto a la solución alternativa, puede enviarles la URL de la consola para grupos específicos, por ejemplohttps://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/
Fuente: lista restringida de buckets S3 de la consola S3
Para hacerlo, deberá especificar el siguiente documento de política para un usuario o grupo dado:
Dónde
my-bucket-1
y dóndemy-bucket-2
están tus cubos para dar acceso de lectura y escritura.Relacionado:
fuente
Prueba esta política. El usuario no puede enumerar ningún depósito, tiene que usar el enlace directo al depósito permitido.
Por ejemplo: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview
fuente
Similar a lo que otros describieron anteriormente:
Aquí está sin embargo la pieza que falta. Si bien no es posible acceder al depósito a través de S3-> Home, es posible acceder solo al depósito deseado a través de un enlace directo.
Puedes encontrar más información en la siguiente publicación:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/
fuente
La solución a continuación funcionó para mí. Quería una política para otorgar acceso a un usuario específico my_iam_user en un bucket específico my-s3-bucket .
Esta política permite a mi usuario hacer una lista, eliminar y obtener archivos en un bucket s3 específico.
fuente
Solo agrego una necesidad similar, resuelta por esto:
fuente
Utilizo lo siguiente para ocultar el contenido del cubo a otros usuarios. Esto no solo ayuda a ocultar otros depósitos (no use ListAllMyBuckets), sino también carpetas en el mismo depósito, cuando crea un depósito, pero desea tener subcarpetas que le asignen los permisos adecuados al usuario / subcarpeta de IAM.
La siguiente política se aplica al Grupo IAM y todos los usuarios están en este Grupo. Debe tomar
aws:userid
y hacer una subcarpeta con el mismo nombre en el cubo.Se puede tomar la ID de usuario:
aws iam get-user --user-name "user_name_for_folder_access":
fuente
Una solución simple y agradable que se nos ocurrió es bloquear al usuario para que inicie sesión en el directorio raíz. Por lo tanto, deben iniciar sesión con la ruta remota establecida en la carpeta deseada.
fuente
No, actualmente no es posible limitar a los usuarios para ver cubos selectivos en la raíz o en cualquier otro lugar. Tienes solo esas 3 opciones en este momento.
Elegí pedirle al cliente que use el nombre del depósito explícitamente.
fuente
Amazon detalla esto en http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket
fuente
Esto funcionó perfecto para mí. El usuario puede cargar, descargar y obtener una lista de archivos, pero no podrá ver archivos de otro depósito.
fuente
Agregue una
Deny
cláusula para los depósitos a los que no desea acceder. Recuerde que aún pueden estar en la lista, pero no podrá acceder a los contenidos dentro de ellos.fuente