2015-10-24 3 views
2

Я пытаюсь использовать aws-sdk, чтобы получить временный приватный URL-адрес для файла в ведре, но создаваемый URL-адрес дает мне 403 в браузере. Вот код:Предписанный GET url возвращающий 403

s3 = Aws::S3::Resource.new 
bucket = s3.bucket('media.coolstuff.com') 
obj = bucket.object('01.mp4') 
obj.presigned_url(:get, expires_in: 3600, virtual_host: true) 

Возвращает:

=> "http://media.coolstuff.com:80/01.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJ75FYMC7AZWUI52A%2F20151024%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20151024T224953Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=3bb646db5a50848bdc227066c5ecc70ad249dd404b63b8b799363aa360f18ef6" 

В браузере этот URL приводит к 403:

403 Forbidden 
Code: AccessDenied 
Message: Access Denied 

учетные данные, используемые принадлежат пользователю, находящемуся в группе который имеет разрешение AmazonS3FullAccess.

Как я могу создать назначенный URL-адрес для объекта, который будет доступен в веб-браузере?

+0

Вы поняли это? Я могу перечислить ведро и загрузить изображение, но когда я предварительно подпишу URL и попытаюсь получить доступ к нему, я получаю 403. – daryn

ответ

0

Следующий код работает для меня, пожалуйста, обратите внимание на us-east-1

S3_URL_EXPIRY = 3600 * 24 * 2 
S3_SIGNED_URL_REGION = 'us-east-1'.freeze 
s3 = Aws::S3::Resource.new(region: S3_SIGNED_URL_REGION, access_key_id: *access_key_id*, secret_access_key: *secret_access_key*) 
obj = s3.bucket('media.coolstuff.com').object('01.mp4') 
obj.presigned_url(:get, expires_in: S3_URL_EXPIRY, virtual_host: true) 

*access_key_id* Где & *secret_access_key* являются ваши access_key_id & secret_access_key соответственно.

Смежные вопросы