#やりたかった事
S3にBasic認証をかけてみたかったので、試してみました。
S3+EC2構成で、Basic認証を行います。
今回の環境
・EC2( Amazon Linux AMI release 2015.09 )
自分が接続する拠点からの、http(80番)・SSH(22番)のアクセスを許可
・S3バケット
S3バケットを1つ作成する(今回は s3.k-staging.com というバケット名で作成)
ウェブサイトのホスティングを有効にしておく
・Route53
ドメイン「 s3.k-staging.com 」を発行する
TypeはCNAMEで、Valueには上記EC2のPublic DNSを設定する
S3バケット設定
バケットポリシーを以下のように設定します。
{
"Version": "2012-10-17",
"Id": "PolicyXXXXXXXXXXXXX",
"Statement": [
{
"Sid": "StmtXXXXXXXXXXXXX",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::s3.k-staging.com/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"52.XX.XX.XX/32(EC2のIPアドレスを記述)"
]
}
}
}
]
}
※「aws:SourceIP」にEC2のIPアドレスを記述する事により、EC2以外からS3バケット( s3.k-staging.com.s3-website-ap-northeast-1.amazonaws.com )を直接参照できないようにしてます。
EC2設定
まずNginxとhttpd-toolsをインストールします。
$ sudo yum install nginx
$ sudo yum install httpd-tools
下記手順で、.htpasswdファイルを作成します。
$ sudo htpasswd -c /etc/nginx/.htpasswd "Basic認証で利用するユーザー名(今回は k-staging と入力)"
New password: "Basic認証で利用するパスワードを入力"
Re-type new password: "再度パスワードを入力する"
Adding password for user k-staging
Nginxのconfigを、以下のとおり作成します。
server {
listen 80;
server_name s3.k-staging.com;
location / {
auth_basic "Basic Auth";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://s3.k-staging.com.s3-website-ap-northeast-1.amazonaws.com;
}
}
Nginxを起動し、自動起動設定をONにします。
$ sudo service nginx start
$ sudo chkconfig nginx on
これで s3.k-staging.com に対するBasic認証が設定できました。
動作確認してみます。
#動作確認
ブラウザに「 s3.k-staging.com 」を入力し、Basic認証が出来るか確認します。
↓
Basic認証がかかってますね。
念のため、S3に直接アクセスできないかどうかも確認してみます。
ブラウザにS3のURL( s3.k-staging.com.s3-website-ap-northeast-1.amazonaws.com )を入力します。
アクセスできませんね!