Некоторые файлы в моей корзине настроены на общедоступное чтение
(ACL). Итак, я где-то читал, что установка политики корзины может автоматически сделать все файлы в корзине закрытыми.
bucketname
— это заполнитель для фактического имени корзины. Моя политика корзины такова:
{
"Version": "2008-10-17",
"Id": "Policy1331182170360",
"Statement": [
{
"Sid": "Stmt1331182162671",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucketname/*"
}
]
}
В одном из моих контроллеров, У меня:
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
Меня перенаправляют, но мне постоянно отказывают в доступе. Однако, если я удаляю политику корзины, я перенаправляюсь на подписанный URL, и все работает нормально.
Изначально я думал, что там был ап проблема с тем, как я подписываю свои URL-адреса. Поэтому я открыл веб-консоль Amazon и вручную установил права доступа к файлам как частные. Для этого теста я удалил политику корзины. Перешел к URL-адресу файла (не подписанному) и не смог получить доступ. Это нормально. Во втором тесте я подписал URL-адрес и смог получить доступ к файлу. Что означает, что нет ничего плохого в том, как я подписывался.
Есть ли конфликт между политиками корзины и подписанными URL-адресами?