2015-12-02 17 views
11

Un utente esterno ha accesso al nostro secchio S3, utilizzando queste azioni nella nostra politica di secchio:S3: l'utente non può accedere all'oggetto nel suo secchio s3 se creato da un altro utente

"Action": [ 
      "s3:GetObjectAcl", 
      "s3:GetObject", 
      "s3:PutObjectAcl", 
      "s3:ListMultipartUploadParts", 
      "s3:PutObject" 
     ] 

Che user generated temporary credentials, che sono stati poi utilizzati per caricare un file nel nostro bucket.

Ora, non riesco ad accedere al file. Nell'interfaccia utente s3, se tento di scaricare il file, ottengo un 403. Se tento di modificare le autorizzazioni su quell'oggetto, vedo il messaggio: "Spiacenti, non hai le autorizzazioni per visualizzare questo bucket". Se l'utente esterno imposta l'intestazione appropriata (x-amz-acl bucket-owner-full-control) durante il caricamento del file con le credenziali temporanee, posso accedere normalmente al file. Mi sembra strano che, anche se possiedo il bucket, è possibile che l'utente esterno inserisca dei file che non riesco ad accedere.

E 'possibile che ci sia qualche politica posso impostare in modo da poter accedere al file, o in modo che io sono in grado di accedere a qualsiasi di file che viene aggiunto al mio secchio, indipendentemente da come si aggiunge? Grazie!

risposta

18

Credo che sia necessario ottenere il proprietario dell'oggetto per aggiornare l'ACL o riscrivere l'oggetto specificando il controllo completo del proprietario del bucket. Il modo più semplice per sperimentare questo sta usando la CLI:

aws s3api put-object-acl --acl bucket-owner-full-control --bucket some-bucket --key path/to/unreadable.txt 

Sì, io penso che si debba fare che una volta per ogni oggetto, non credo che ci sia un'opzione ricorsiva.

AWS pubblica un example bucket policy su impedisce l'aggiunta di oggetti al bucket senza che il proprietario del bucket ne abbia il pieno controllo. Ma questo non riguarderà la proprietà degli oggetti già nel tuo secchio.

Non conosco alcuna politica che trasferirà automaticamente la proprietà al proprietario del bucket.

+5

Hai ragione, e questo è di design. Se consenti ad altri utenti di caricare nel tuo bucket e non imponi 'bucket-owner-full-control' sui caricamenti con il criterio bucket, l'azione * only * disponibile per il proprietario del bucket è di eliminare l'oggetto. Tutto il resto richiede il permesso di essere concesso dal proprietario dell'oggetto. –

+0

molto utile, grazie. – eric

+0

Come nota a piè di pagina, affinché questo funzioni con il comando 'cp' o' mv' l'utente ha bisogno del permesso per l'azione 'PutObjectAcl', questa conoscenza mi risparmierebbe un'ora;) –

10

si può effettivamente utilizzare una copia e l'opzione ricorsiva per copiare tutti gli oggetti torna al secchio e impostare l'ACL secchio-proprietario-full-controllo utilizzando la seguente sintassi:

aws s3 cp s3://myBucket s3://myBucket --recursive --acl bucket-owner-full-control --storage-class STANDARD 
+1

idea pulita, ma non ha funzionato per me. –

+1

Utilizzare questo comando con le credenziali dell'account che ha effettuato il caricamento originale per dare il controllo completo a bucket-owner, ma a quel punto l'account che ha effettuato il caricamento originale continua a possedere gli oggetti S3. Se necessario, ripeti questo comando con le credenziali dell'account proprietario del bucket per assegnare anche la proprietà dell'account agli oggetti S3. – davidvandebunte

Problemi correlati