Desidero creare un cosiddetto URL "pre-firmato" per caricare un oggetto particolare (PUT) nel bucket Amazon S3.URL pre-firmati e x-amz-acl
Fin qui tutto bene. Sto usando la libreria python boto per creare un URL, che contiene tutte le cose necessarie (scadenza, firma e così via). L'URL è simile al seguente:
https://<bucketname>.s3.amazonaws.com/<key>?Signature=<sig>&Expires=<expires>&AWSAccessKeyId=<my key id>&x-amz-acl=public-read
Nota l'ultimo parametro.
Questo, almeno, a quanto ho capito, limita chiunque usi questo URL per caricare un oggetto su una particolare chiave in un determinato bucket e limita anche l'ACL in scatola che verrà impostato sull'oggetto su "public-read".
La mia ultima affermazione è abbastanza scorretta.
Come si è visto, se si utilizza questo URL, è possibile effettuare le seguenti operazioni con l'x-AMZ-ACL intestazione (in contrapposizione al query di parametro di stringa con lo stesso nome, che si must impostato per il corretto controllo della firma):
- Impostarlo su "public-read". Le autorizzazioni dell'oggetto sono costituite da due voci: "lettura" per "Everyone" e "controllo completo" per il proprietario del bucket. Questo è abbastanza prevedibile.
- Omettere l'intestazione x-amz-acl. Le autorizzazioni sull'oggetto saranno le stesse del default per bucket (il proprietario del bucket ha il controllo completo). Perché?
- Impostarlo su "public-read-write". Il risultato è esattamente come in (1).
- Impostarlo su "lettura autenticata". Gli "utenti autenticati" ottengono l'autorizzazione di "lettura", il proprietario del bucket ha il controllo completo.
- Impostarlo su "bucket-owner-read". Il risultato è esattamente come in (2). Il proprietario del bucket ha il controllo completo, non sono definite altre autorizzazioni.
- Impostarlo su "bucket-owner-full-control". Non sorprende che il proprietario della benna avrà il pieno controllo.
- Impostarlo su un nome ACL predefinito non esistente e ottenere un errore.
Così sembra, che
- L'x-AMZ-ACL intestazione non prende parte alla verifica della firma, perché si può cambiare a piacimento e la richiesta riesce. Il parametro stringa di query, tuttavia, è sicuramente è preso in considerazione durante il controllo della firma.
- x-amz-acl parametro stringa di query non influenza le autorizzazioni dell'oggetto direttamente, come in, non fa nulla da solo.
- Se si invia un colpo di testa x-AMZ-ACL, le autorizzazioni risultanti mai essere
- più restrittiva per il proprietario del secchio, di quanto lo siano per impostazione predefinita.
- meno restrittiva per il proprietario non-secchio.
- Possono, tuttavia, essere più restrittivo per il proprietario non-bucket. Cioè, se si specifica
x-amz-acl=public-read
nella stringa di query, è possibile impostare l'intestazionex-amz-acl
-authenticated-read
e invece di un oggetto leggibile pubblicamente ottiene un oggetto, che può essere letto solo da utenti autenticati.
Qual è il vero relazione tra il parametro QS x-AMZ-ACL e l'intestazione, che va sotto lo stesso nome? C'è un modo per limitare le autorizzazioni sull'oggetto, che deve essere caricato tramite una richiesta PUT
a un cosiddetto URL "pre-firmato"?
Dal momento che sei l'unico, che ha speso un certo sforzo da questa domanda, è giusto, che si ottiene la grazia, anche se la risposta, purtroppo, non mi aiuta affatto. – shylent
Mi dispiace che la risposta non potrebbe essere più utile; Stavo solo cercando di trasmettere qualsiasi conoscenza avessi sull'argomento. – jdotjdot