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?
Buon punto. In questo caso, cosa deve essere cambiato nella mia politica per evidenziare il tuo punto? –
Questo sarebbe molto più semplice se Amazon Web Console ci autorizzasse a convertire in batch l'ACL di tutti i file in privato –