subir signin que east descargar como carpeta aws archivos amazon-s3 amazon-web-services acl

amazon s3 - signin - S3: hacer una carpeta pública privada de nuevo?



que es amazon s3 (6)

¿Cómo se vuelve a hacer privada una carpeta pública de AWS S3?

Estaba probando algunos datos de etapas, así que publiqué toda la carpeta en un cubo. Me gustaría restringir su acceso nuevamente. Entonces, ¿cómo puedo hacer que la carpeta sea privada nuevamente?


A partir de ahora, de acuerdo con los documentos del boto puedes hacerlo de esta manera

#!/usr/bin/env python #remove public read right for all keys within a directory #usage: remove_public.py bucketName folderName import sys import boto bucketname = sys.argv[1] dirname = sys.argv[2] s3 = boto.connect_s3() bucket = s3.get_bucket(bucketname) keys = bucket.list(dirname) for k in keys: # options are ''private'', ''public-read'' # ''public-read-write'', ''authenticated-read'' k.set_acl(''private'')

Además, puede considerar eliminar cualquier política de depósito en la pestaña de permisos del depósito s3.



Desde la lista de categorías AWS S3 (Interfaz de usuario AWS S3), puede modificar los permisos de archivos individuales después de hacer público un archivo o haciendo que todo el contenido de la carpeta sea público (para aclarar, me refiero a una carpeta dentro de un segmento). Para revertir el atributo público a privado, haga clic en el archivo, vaya a los permisos y haga clic en el botón radial debajo del encabezado "TODOS". Obtendrá una segunda ventana flotante donde puede desmarcar el atributo * leer objeto. No olvide guardar el cambio. Si intenta acceder al enlace, debe obtener el mensaje típico "Acceso denegado". He adjuntado dos capturas de pantalla El primero muestra la lista de carpetas. Al hacer clic en el archivo y seguir el procedimiento mencionado anteriormente, debe mostrarle la segunda captura de pantalla, que muestra los 4 pasos. Observe que para modificar varios archivos, uno debería usar los scripts como se propuso en publicaciones anteriores. -Kf


La respuesta aceptada funciona bien: parece establecer las ACL recursivamente en una ruta s3 dada también. Sin embargo, esto también se puede hacer más fácilmente con una herramienta de terceros llamada s3cmd : la usamos mucho en mi empresa y parece ser bastante popular dentro de la comunidad de AWS.

Por ejemplo, supongamos que tiene este tipo de estructura de bucket y dir s3://mybucket.com/topleveldir/scripts/bootstrap/tmp/ . Supongamos ahora que ha marcado todo el "directorio" de scripts como público utilizando la consola de Amazon S3.

Ahora, para hacer que todos los scripts "directory-tree" recursivamente (es decir, incluyendo los subdirectorios y sus archivos) sean privados nuevamente:

s3cmd setacl --acl-private --recursive s3://mybucket.com/topleveldir/scripts/

También es fácil hacer que las scripts "directory-tree" sean recursivamente públicas nuevamente si lo desea:

s3cmd setacl --acl-public --recursive s3://mybucket.com/topleveldir/scripts/

También puede optar por establecer el permiso / ACL solo en un "directorio" s3 dado (es decir, de forma no recursiva) simplemente omitiendo --recursive en los comandos anteriores.

Para que s3cmd funcione, primero debe proporcionar acceso AWS y claves secretas a s3cmd a través de s3cmd --configure (consulte s3cmd para obtener más información).


Para AWS CLI, es bastante sencillo.

Si el objeto es: s3://<bucket-name>/file.txt

Para un solo objeto:

aws s3api put-object-acl --acl private --bucket <bucket-name> --key file.txt

Para todos los objetos en el cubo (bash one-liner):

aws s3 ls --recursive s3://<bucket-name> | cut -d'' '' -f5- | awk ''{print $NF}'' | while read line; do echo "$line" aws s3api put-object-acl --acl private --bucket <bucket-name> --key "$line" done


Por lo que entiendo, la opción ''Hacer público'' en la consola de gestión agrega recursivamente una concesión pública para cada objeto ''en'' el directorio. Puede ver esto haciendo clic derecho en un archivo, luego haga clic en ''Propiedades''. Luego debe hacer clic en ''Permisos'' y debería haber una línea:

Grantee: Everyone [x] open/download [] view permissions [] edit permission.

Si carga un nuevo archivo dentro de este directorio, no tendrá este acceso público y, por lo tanto, será privado.

Debe eliminar el permiso de lectura pública uno por uno, ya sea manualmente si solo tiene unas pocas teclas o si usa una secuencia de comandos.

Escribí un pequeño script en Python con el módulo ''boto'' para eliminar recursivamente el atributo ''leer públicamente'' de todas las teclas en una carpeta S3:

#!/usr/bin/env python #remove public read right for all keys within a directory #usage: remove_public.py bucketName folderName import sys import boto bucketname = sys.argv[1] dirname = sys.argv[2] s3 = boto.connect_s3() bucket = s3.get_bucket(bucketname) keys = bucket.list(dirname) for k in keys: new_grants = [] acl = k.get_acl() for g in acl.acl.grants: if g.uri != "http://acs.amazonaws.com/groups/global/AllUsers": new_grants.append(g) acl.acl.grants = new_grants k.set_acl(acl)

Lo probé en una carpeta con (solo) 2 objetos y funcionó. Si tiene muchas claves, puede llevar un tiempo completarlas y puede ser necesario un enfoque paralelo.