S3にBasic認証付きリクエストをすると400:Bad Requestになる

nginx
aws_logo

nginx で S3 にリバースプロキシしたサイトで、特定の URL 配下にしらーっとBasic認証を追加したら、S3 のリソースの取得が"400 : Bad Request" でことごとく失敗していた。

現象を再現させる

まずはこの動きを確認してみる

S3を用意

バケットを作成し、オブジェクトを public-read の ACL つきて PUT する。

$ aws s3 mb s3://acbb
make_bucket: s3://acbb/
$ echo hello | aws s3 cp - s3://acbb/hello --acl public-read

public read が付いているので、anonymous user も GET できる。

$ curl https://s3-ap-northeast-1.amazonaws.com/acbb/hello
hello

Basic 認証付きでリクエスト

次に Basic 認証付きでリクエストしてみる

$ curl -D - -H "Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" https://s3-ap-northeast-1.amazonaws.com/acbb/hello
HTTP/1.1 400 Bad Request
x-amz-request-id: 4526F5953FFD8502
x-amz-id-2: vIU4PibOY1H3OqIDuRuPIKDa4BqEcrUcfpl27NPC3Zq5TsNf5Q4xvLw0mi2t9jdxNbrmN8Br5ow=
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 05 Mar 2015 16:10:57 GMT
Connection: close
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>InvalidArgument</Code><Message>Unsupported Authorization Type</Message><ArgumentName>Authorization</ArgumentName><ArgumentValue>Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==</ArgumentValue><RequestId>4526F5953FFD8502</RequestId><HostId>vIU4PibOY1H3OqIDuRuPIKDa4BqEcrUcfpl27NPC3Zq5TsNf5Q4xvLw0mi2t9jdxNbrmN8Br5ow=</HostId></Error>

みごとに 400 Bad Request エラーが発生した。

nginx での解決

nginx の解決策としては S3 にプロキシする際に Authorization ヘッダーを取っ払えばOK
nginx_http_proxy_module には proxy_unset_header というディレクティブはなく、proxy_set_header でヘッダーの値をブランクにすると、そのヘッダーフィールドはプロキシされなくなる。

    location ~ ^/s3 {
        proxy_set_header Authorization "";
        proxy_pass http://YOUR-BUCKET.s3-ap-northeast-1.amazonaws.com;
    }
Advertisements
Tagged with: , , ,
Posted in aws, middleware

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 4 months ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 5 months ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 5 months ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 10 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 1 year ago
%d bloggers like this: