AWSで静的ウェブサイトの構築と言うと、S3の静的サイトホスティングとCloudFrontのセットで対応するのは一般的ですが、何の場合でも対応できるわけではありません。
S3の静的サイトホスティングで対応できない場合
S3の静的サイトホスティングとCloudFrontの構成では、インターネットを介して接続しないといけませんので、インターネットが出られない閉域網内では実現できません。
例えばインターネットの接続できないオンプレミスのサーバーからSite-to-Site VPNやDirect ConnectでAWSに接続したりする場合。
S3のGateway Endpointを作ってPrivate SubnetからS3へアクセスする場合、Private SubnetでElastic Network Interfaceが作成されませんので、このような通信ルートでは実現できません。
閉域網内の場合の対応方法
S3のEndpointは、Gateway Endpoint以外、Interface Endpointもあります。それを使ってPrivateLinkを作成して対応することで解決できます。
具体的な構築方法
1. S3の作成、準備
事前に作成しておいたHtmlファイルをアップロードしました。閉域網内でのアクセスですから、パブリックアクセスをすべてブロックを設定しても問題ありません。又、内部からアクセスするので、静的サイトホスティングの有効化する必要もありません。
2. endpointからアクセスできるようなポリシーの作成
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"
}
}
}
]
}
3. S3 interface endpoint作成
アベイラビリティーゾーンを二つ跨ぐ冗長構成となりますので、作成されたeniは二つとなります。セキュリティグループは後で作成するALBよりアクセスできるように許可設定する必要です。
4. ALB関連リソースの設定
ACM証明書作成
お名前.comで取得した無料ドメイン名となり、ACM証明書作成にて認証時、CNAMEレコードをお名前.comに登録すれば認証されます。
Route53の設定
内部からアクセスする時、https://www.asp-members.net/asphand.html
のようにアクセスするので、www.asp-members.netはバケット名と同じにする必要なのと、www.asp-members.netとALBのDNSとマッピングする必要です。
Internal ALB作成
このような設定によりオンプレミス環境 ⇒ 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 サポートのご紹介