Доступ запрещен - потоковое видео через подписанный URL на Amazon S3 - PullRequest
2 голосов
/ 07 июня 2011

Я использую службу S3 в качестве провайдера видео для моего программного обеспечения (C #), которое работает локально

В целях безопасности я создаю подписанный URL-адрес (временный URL-адрес) для файла и затем передаю его в видеопроигрыватель, но игрок может прочитать ссылку, только если я поменяю "=" (равно) символами на "_" (подчеркивание), как написано здесь в этой теме: https://forums.aws.amazon.com/thread.jspa?messageID=245291 в сообщении от сотрудника Amazon.

И здесь начинается моя проблема, когда я отправляю URL видео без изменения этого символа, это не работает

Если я не изменяю символы, но права доступа к файлам «Только для аутентифицированных пользователей», я могу получить доступ к файлу, но видеоплеер не может из-за проблем с символами.

если я изменю символы и отправлю URL-адрес плееру, это будет работать только в том случае, если разрешения доступа к файлу «Каждый может читать / изменять», и это делает мое «решение по безопасности» небезопасным выбором, так как если кто-то получит URL, он получит иметь доступ к файлу.


это ошибка от амазонки? кто то есть решение для этого?



Вот пример Singed URL:

http://bucket -name .s3.amazonaws.com / Video.flv? AWSAccessKeyId = AKIAILVSCA2AWHA7KM6Q & Истекает = 1307378448 & Подпись = FzWAI4dd8BfnzfCtbtAumQyiNvk% 3D

здесь приведен пример URL-адреса измененных символов:

http://bucket -name .s3.amazonaws.com / Video.flv? AWSAccessKeyId_AKIAILVSCA2AWHA7KM6Q & Expires_1307378448 & Signature = FzWAI4dd8BfnzfCtbtAumQyiNvk% 3D

1 Ответ

0 голосов
/ 16 июня 2011

Здесь происходит ряд вещей.

Во-первых, указанная вами ссылка говорит об URL-адресах Cloudfront.Я не думаю, что возможно заменить символы в URL-адресах S3, как обсуждалось.

Во-вторых, вы не должны изменять знаки = сразу после AWSAccessKeyId, Expires и Signature.Проблемные символы - только те, которые появляются в строке подписи.В вашем примере %3D в конце - = в URL, закодированном из, и это то, что вам нужно изменить.

Проблема, однако, в том, что если вы измените этот символ, подпись больше не действительнаи именно поэтому закрытый контент больше не доступен.Общедоступный контент будет доступен, поскольку часть аутентификации URL-адреса просто игнорируется Amazon.

Я столкнулся с подобной проблемой с видеопроигрывателем на основе Silverlight, которая не работала, если было + (%2b) символовв URL.Я решил это, просто сгенерировав новый URL в цикле, пока у меня не было того, у которого не было недопустимых символов.Ключ заключается в том, чтобы немного изменить время истечения, чтобы изменить сгенерированную подпись.

Вот пример использования AWS SDK.(преобразовано из vb.net, поэтому я надеюсь, что синтаксис правильный)

using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSKey, AWSSecretKey)) {

    string url = null;

    int secs = 0;
    do {
        var req = new Model.GetPreSignedUrlRequest {
            BucketName = bucket,
            Key = key,
            Protocol = Model.Protocol.HTTP,
            Verb = Model.HttpVerb.GET,
            Expires = DateTime.Now.AddDays(ExpiryInDays).AddSeconds(secs)
        };

        url = client.GetPreSignedURL(req);

        secs += 1;
    } while (url.ToLower().Contains("%2b"));

    return url;

}

По моему опыту, снижение производительности незначительно, так как обычно для обеспечения «чистого» URL требуется всего пара итераций.

...