nginx(EC2)でリバースプロキシしてS3を公開した際に
・Static website hosting は必要かどうか?
・S3エンドポイント を利用すると設定で変更するところはあるのか?
がわからなかったため調査。
結論として
・Static website hostingは必要なし。
・S3エンドポイントをバケットポリシーで制御する必要がある。
ことがわかった。
S3設定
バケット名:bucket–name
を作成して、[1.png]をアップロードした。
URLは以下となる。
http://bucket–name.s3.amazonaws.com/1.png
http://bucket–name.s3-ap-northeast-1.amazonaws.com/1.png
http://s3-ap-northeast-1.amazonaws.com/bucket–name/1.png
また外部から閲覧するためにアクセス権限を設定した。
(以下はIPアドレスx.x.x.xに公開する場合)
{ "Id": "Policy1505038915778", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1505038910815", "Action": [ "s3:GetObject" ], "Principal": "*", "Effect": "Allow", "Resource": "arn:aws:s3:::bucket--name/*", "Condition": { "IpAddress": { "aws:SourceIp": "x.x.x.x" } } } ] }
nginxのリバースプロキシ設定
location / { set $s3_bucket 'bucket--name.s3.amazonaws.com'; proxy_set_header Host $s3_bucket; proxy_hide_header x-amz-id-2; proxy_hide_header x-amz-request-id; proxy_hide_header Set-Cookie; resolver 10.0.0.2 valid=300s; resolver_timeout 10s; proxy_pass http://$s3_bucket; }
Static website hosting について
・有効にすると、公開用のURLが追加で作成される。(無効にすると利用できなくなる。)
http://bucket–name.s3-website-ap-northeast-1.amazonaws.com
・上記URLに限り、インデックスドキュメントとエラードキュメントやリダイレクトが動作する。
・DNSを設定することで、独自ドメイン(バケット名)も利用できる。
つまりこの機能を利用しなくても、リバースプロキシのオリジンに設定することが可能。
S3エンドポイント時の設定
バケットポリシーに以下を追加する必要がある。
{ "Version": "2012-10-17", "Id": "Policy1505038915778", "Statement": [ { "Sid": "Stmt1505038910815", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::bucket--name/*", "Condition": { "IpAddress": { "aws:SourceIp": [ "x.x.x.x" ] } } }, { "Sid": "Stmt1505038910816", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::bucket--name/*", "Condition": { "StringEquals": { "aws:SourceVpce": "vpce-xxxxxxx" } } } ] }
参考
http://blog.serverworks.co.jp/tech/2016/08/22/vpc_endpoint_s3_backet-2/