Da quello che ho capito, l'opzione 'Rendi pubblico' nella console di gestione aggiunge in modo ricorsivo una concessione pubblica per ogni oggetto 'nella' directory. Puoi vederlo facendo clic con il pulsante destro su un file, quindi fare clic su "Proprietà". È quindi necessario fare clic su 'Autorizzazioni' e ci dovrebbe essere una linea:
Grantee: Everyone [x] open/download [] view permissions [] edit permission.
Se si carica un nuovo file all'interno di questa directory non avrà questo set l'accesso del pubblico e quindi essere privato.
È necessario rimuovere i permessi di lettura pubblici uno per uno, manualmente se si dispone di poche chiavi o di uno script.
ho scritto un piccolo script in Python con il modulo 'boto' per rimuovere in modo ricorsivo l'attributo di 'lettura pubblica' di tutte le chiavi in una cartella 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)
ho provato in una cartella con (solo) 2 oggetti e ha funzionato. Se hai lotti di chiavi, potrebbe essere necessario un po 'di tempo per completare e potrebbe essere necessario un approccio parallelo.
si può fare questo witin il console di gestione o API programmatica – ascobol
Quale è quello che ho pensato, ma non riesco a trovare l'opzione all'interno della console. Sembra ridicolo dover usare una API per fare qualcosa di così apparentemente importante. – GoodGets
In effetti, la console consente di rimuovere il file grant grant da un solo file. Vedi la mia risposta dettagliata su come farlo in Python. – ascobol