5

Alcuni file nel mio bucket sono impostati su public-read (ACL). Così ho letto da qualche parte che l'impostazione di un criterio bucket può automaticamente impostare tutti i file in un bucket privato.Esiste un conflitto tra le politiche del bucket e gli URL firmati?

bucketname è un segnaposto per il nome del bucket effettivo. La mia politica è secchio:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1331182170360", 
    "Statement": [ 
     { 
      "Sid": "Stmt1331182162671", 
      "Effect": "Deny", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::bucketname/*" 
     } 
    ] 
} 

In uno dei miei controllori, ho:

s3 = Aws::S3.new(APP_CONFIG['amazon_access_key_id'], APP_CONFIG['amazon_secret_access_key']) 
    bucket_gen = Aws::S3Generator::Bucket.create(s3, APP_CONFIG['amazon_bucket_name']) 
    signed_url = bucket_gen.get("#{URI.unescape(URI.parse(URI.escape(@song.encoded_file_url)).path[1..-1])}", 10.minute) 
    redirect_to signed_url and return 

sto ri-diretto, ma continuo a ottenere l'accesso negato. Tuttavia, se rimuovo il criterio bucket, vengono reindirizzati a un URL firmato e tutto funziona correttamente.

Inizialmente, ho pensato che ci fosse un problema con il modo in cui stavo firmando i miei url. Così ho aperto Amazon Web Console e impostato manualmente le autorizzazioni del file su privato. Per questo test, ho rimosso la politica del bucket. Passato al file url (non firmato) e non poteva accedere. Che è normale Nel secondo test, ho firmato l'url e ho potuto accedere al file. Il che significa che non c'è niente di sbagliato nel modo in cui stavo firmando.

Esiste un conflitto tra le politiche del bucket e gli URL firmati?

risposta

6

Questo si riduce all'autenticazione (chi sei) che è diversa dall'autorizzazione (cosa ti è permesso fare). Un URL firmato non è altro che un modo per autenticarti come un utente AWS particolare (al contrario di essere solo anonimo), non conferisce alcuna autorizzazione speciale.

Una volta eseguita l'autenticazione e Amazon sa chi sei, deve ancora decidere se è consentito eseguire l'azione richiesta. La tua politica bucket dice che nessuno può accedere ai file e quindi la richiesta è negata see the policy docs per il motivo per cui la tua politica bucket valuta in questo modo

Se la tua politica ha detto che l'utente può accedere ai file ma che nessun altro può firmare gli URL dovrebbero lavorare (che è fondamentalmente ciò che mezzi privati ​​quando si fanno i singoli permessi dei file)

Se si aggiunge una dichiarazione per la vostra politica sulla falsariga di

{ 
    "Sid":"AddSpecific", 
    "Effect":"Allow", 
    "Principal": { 
    "AWS": ["1234-5678-9012"] 
    }, 
    "Action":["Action": "s3:GetObject"], 
    "Resource":["arn:aws:s3:::bucket/*"] 
} 

allora si dovrebbe essere in grado di utilizzare gli URL firmati (ovviamente sostituisci 1234-5678-9012 con il tuo ID account aws. Se stai usando IAM allora il bit di IIA della console Web ha gli identificatori per quegli utenti)

+0

Buon punto. In questo caso, cosa deve essere cambiato nella mia politica per evidenziare il tuo punto? –

+0

Questo sarebbe molto più semplice se Amazon Web Console ci autorizzasse a convertire in batch l'ACL di tutti i file in privato –

Problemi correlati