静的ウェブサイトを構築する話だと、S3の静的サイトホスティングとCloudFrontのセットで対応すると考えるのは一般的にですが、インターネットを介して接続しないといけませんので、インターネットが出られない閉域網内で、実現できません(例えばインターネットの接続できないオンプレミスのサーバーからSite-to-Site VPNや、Direct Connectで接続する場合)。
S3のGateway Endpointを作ってPrivate SubnetからS3へアクセスする場合、Private SubnetでElastic Network Interfaceが作成されませんので、上記のような通信ルートでは実現できません。
S3のEndpointは、Gateway Endpoint以外、Interface Endpointもあります。それを使ってPrivateLinkを作成して対応することは可能です。
Amazon Web Services ブログもありますので、参考情報として一番最後に貼っておきます。
■S3の作成、準備
事前に作成しておいたHtmlファイルをアップロードしました。閉域網内でのアクセスですから、「パブリックアクセスをすべてブロック」を設定することで問題ありません。又、内部からアクセスするので、静的サイトホスティングの有効化する必要もありません。
endpointからのみで、アクセスできるように制限するパブリックポリシーですが、Actionもう少し絞ると、s3:GetObjectで良いです。
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::www.asp-members.net",
"arn:aws:s3:::www.asp-members.net/*"
],
"Condition": {
"StringEquals": {
"aws:SourceVpce": "vpce-058919f7c51133336"
}
}
}
]
}
■S3 interface endpoint作成
ここで、二つAZを跨ぐ冗長構成となりますので、作成されたeni(Private IP Address)は二つとなります。セキュリティグループは後作成するALBよりアクセスできるように設定する必要です。
■内部ALB作成
■内部ALB作成時、証明書が必要ですので、ACMで証明書作成
お名前.comで取得した無料ドメイン名となり、ACM証明書作成にて認証時、CNAMEレコードをお名前.comに登録すれば認証されます。
■Route53(Private Zone)
内部からアクセスする時、https://www.asp-members.net/asphand.html
のようにアクセスするので、www.asp-members.netはバケット名と同じにする必要なのと、www.asp-members.netとALBのDNSとマッピングする必要です。
上記の設定によりオンプレミス環境 ⇒ Site-to-Site VPN ⇒ S3の静的ウェブサイトのようにアクセスできることが確認できました。
■ALBを使わない場合
構築後、直接ローカルからS3のコンテンツにアクセスしたい場合、以下のURLを使ってアクセスすれば良いです。
https://bucket.vpce-0d904c707a00c6c26-ttg0vjkv.s3.ap-northeast-1.vpce.amazonaws.com/www.asp-members.net/asphand.htm
ドメイン名を使いたい場合
https://www.asp-members.net/asphand.htm
※事前に、www.asp-members.net対応するeniのプライベートIPアドレスをC:\Windows\System32\drivers\etc\hostsに登録するとか、必要ですね。
■参考文献
ALB、S3、PrivateLinkによる内部HTTPS静的ウェブサイトのホスティング
Amazon S3 のプライベート DNS サポートのご紹介