Зависит от прочей архитектуры Вашего проекта. Во-первых, если контент не
секретный, то, как уже было сказано, ему ключи и не нужны. Если же контент
закрытый, то я, например, использую авторизацию по query-string. А именно:
перехватываю обращение, при помощи PHP формирую адрес типа /s3-pass/bucket/file?AWSAccessKeyId=...
(с нужными параметрами авторизации) и делаю X-Accel-Redirect на него. А /s3-pass
обрабатывается как:
proxy_set_header Authorization ""; -- потому что у меня самого на
сайте используется хедер "Authorization".
День добрый.
Хочется поставить nginx фронтендом к Amazon S3 , чтобы стримить им
флешки.
Доступ к файлам на S3 можно получить через http get, но в
http-запросе
должен присутствовать header Authorization , который является
"HMAC-SHA1 hash of your request using your AWS Secret Access Key.".
Он уникальный для каждого запроса, его нужно сгенерировать, добавить и
сделать proxy_pass и flv дальше.
Пример создания запроса из Net::Amazon::S3 :
[...]
my $canonical_string
= $self->_canonical_string( $method, $path, $headers );
my $encoded_canonical
= $self->_encode( $aws_secret_access_key, $canonical_string );
$headers->header(
Authorization => "AWS $aws_access_key_id:$encoded_canonical"
);
[...]
# finds the hmac-sha1 hash of the canonical string and the aws secret
access key and then
# base64 encodes the result (optionally urlencoding after that).
sub _encode {
my ( $self, $aws_secret_access_key, $str, $urlencode ) = @_;
my $hmac = Digest::HMAC_SHA1->new($aws_secret_access_key);
$hmac->add($str);
my $b64 = encode_base64( $hmac->digest, '' );
if ($urlencode) {
return $self->_urlencode($b64);
} else {
return $b64;
}
}
[...]
В какую сторону копать для решения этой задачи ?
Если http_perl_module, то как ему передать все headers ?
P.S.
http://docs.amazonwebservices.com/AmazonS3/2006-03-01/gsg/reading-an-o
bject.html