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/