22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

S3 コンテンツの Basic 認証 + HTTPS 配信

Last updated at Posted at 2016-06-18

S3、使ってますか?

私 S3 好きですが、たまに思います。**HTTPS ほしい1**とか、Basic 認証ほしいとか。社内で使うにはバケットポリシーで十分ですが、お客様に見せるときに困ることあるじゃないですか?
かといって CloudFront を HTTPS や閲覧制限のためだけに用意するのも・・
EC2 ・・え、ここにきてサーバー使う・・・?っていう。

なので(Nginx や HAProxy よりも Docker で使いやすく)
それらの課題に対処できる軽量ツールを作りました。

Docker イメージ2

2パターンあります。

  • pottava/s3-proxy
    バケットにアクセス権のある クレデンシャル3 さえあれば OK
    (静的 Web サイトホスティングの設定などは不要)
pottava/s3-proxy
# 必須の環境変数は `AWS_S3_BUCKET` のみ
docker run --rm -p 443:80 \
    -e AWS_REGION=ap-northeast-1 \
    -e AWS_S3_BUCKET=my-bucket \
    -e AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE \
    -e AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/bPxRfiCYEXAMPLEKEY \
    -e HTTP_CACHE_CONTROL="no-store, no-cache, max-age=0" \
    -e HTTP_EXPIRES="Thu, 01 Jan 1970 00:00:00 GMT" \
    -e BASIC_AUTH_USER=username \
    -e BASIC_AUTH_PASS=password \
    -v `pwd`/certs:/certs \
    -e SSL_CERT_PATH=/certs/cert.pem \
    -e SSL_KEY_PATH=/certs/key.pem \
    pottava/s3-proxy
  • pottava/proxy
    PROXY_URL に指定した4 Web サイトに リバースプロキシ
    (静的 Web サイトホスティングの設定が必要)
pottava/proxy
# 必須の環境変数は `PROXY_URL` または `PROXY_PATTERNS` のみ
docker run --rm -p 443:80 \
    -e PROXY_URL="http://web.s3-website-ap-northeast-1.amazonaws.com" \
    -e BASIC_AUTH_USER=username \
    -e BASIC_AUTH_PASS=password \
    -v `pwd`/certs:/certs \
    -e SSL_CERT_PATH=/certs/cert.pem \
    -e SSL_KEY_PATH=/certs/key.pem \
    pottava/proxy

いずれも Go 1.6 で実装しているため、SSL/TLS を有効にした(SSL_CERT_PATH と SSL_KEY_PATH を渡した)場合、地味ですが、HTTP/2 での接続 になります。

Arukas で使ってみる

Arukas のエンドポイントは デフォルトで https なので
上述サンプルのような SSL/TLS 証明書やその指定は不要です。

1. アカウントの作成

まだ β 期間中なので無料で利用できます!
https://arukas.io/

2. アプリケーションの作成

https://app.arukas.io/ で「新しいアプリケーションを作成」

新しいアプリケーションを作成

3. アプリケーションの設定

必要な項目を埋めて「アプリケーションを作成」します。

項目  
App Name てきとうに
Image pottava/s3-proxy
Instances そのままでOK
Memory どちらでも
Endpoint てきとうに
Port 80 TCP
ENV AWS_REGION S3 リージョン
AWS_S3_BUCKET S3 バケット名
AWS_ACCESS_KEY_ID AWS アクセスキー
AWS_SECRET_ACCESS_KEY AWS シークレットキー
BASIC_AUTH_USER Basic 認証ユーザー名
BASIC_AUTH_PASS Basic 認証パスワード
アプリケーションを作成

4. アプリケーションの起動

トップページから、いま作成したアプリケーションを起動してみます。

アプリケーションの起動

5. エンドポイントへの接続

アプリケーション詳細画面で「アプリは起動状態です」と表示されたら
以下の URL にアクセスしてみます。

エンドポイントの確認

Basic 認証かかりました?

Arukas、無料でこれができたらもちろんうれしいのですが
将来有料になっても、分単位の課金であればありがたそう!!

 

  1. / を /index.html などと解釈してくれる静的 Web サイトホスティングで。

  2. それぞれ Docker イメージではなく、クロスコンパイルしたバイナリとしても配布しています。pottava/s3-proxy & pottava/proxy

  3. EC2 上であれば、インスタンスロールでも動作します

  4. 複数のターゲットを指定し、仮想ドメイン・パスでの振り分けもできます。こんな PROXY_PATTERNS="/static=http://assets.cdn,*.example.com=http://app.io,*=http://sorry.com"

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?