AWSサービスのS3で静的ウェブサイトホスティングのバケットのアクセス権限設定について勉強をしたので自身の理解・復習また文章力の向上のためアウトプットさせていただきます。
はじめに
S3で静的webサイトのホスティングを実践してみました。S3とは
S3(Simple Storage Service)とはAmazonが提供する「スケーラビリティ」「データ可用性」「セキュリティ」および「パフォーマンス」を提供するオブジェクトストレージサービスです。ストレージのディスク管理や冗長化の心配の必要が無い便利なサービスなので本業などに専念可能です。Amazon S3を使用してWebやアプリのデータのバックアップ、動画・画像の格納に利用でき、AWSと連携させることで幅広い用途が可能。容量にかかわらずデータを保護で、アクセス管理機能もあるので各種要件に合わせたデータアクセスが可能。
静的ウェブサイトホスティング機能とは
S3に保存したデータはHTTP/HTTPSでアクセス可能なので、Webサーバーのように静的Webサイトとして公開することが出来ます。本来は公開するには別途サーバーが必要でしたが、S3を使用することで簡単に公開が可能で、手間やコストも軽減できます。ただし、S3は静的なwebサイトはほホスティング可能ですが、動的なサイト(WordPress)などはホスティング不可です。静的ウェブサイトホスティングはこちらを参考にしてください。
アクセス制限までの手順
参考サイトや他の方の記事を参考に静的サイトを公開するためにバケットポリシーに以下の記述を入れ込みました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1551163442413",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "【作成したバケットARN】/*"
}
]
}
こちらで静的サイトにアクセスすることに成功し閲覧可能の状態になりました。
次に「指定のIPアドレスのみアクセス可能」の制限設定の記述を入れ込みます。
まず、【こちら】を参考にして以下を入れ込みました。
{
"Sid": "Stmt1551164678580",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "【作成したバケットARN】/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "【自身のIPアドレス】"
}
}
}
ここで少し詰まったこと
アクセス制限がうまくいかずアクセスができない
入れ込み内容も問題なく入れ込みできてはいたのですが、なぜか指定したIPアドレスからアクセスが出来ませんでした。
原因
【"Effect": "Deny"】の入れ込み方法を勘違いしていた
「Effect」について調べた結果
Allow:許可を与えるポリシー
Deny:拒否するポリシー
上記の認識でいたので
【"Effect": "Deny",】拒否のポリシーで【"NotIpAddress"が自身のIPアドレス】でしたので
『自身のIPアドレス以外を拒否をする』と勘違いをしてしまい
【"Effect": "Allow"】の記述を削除し【"Effect": "Deny"】の記述のみ入れ込んでいました。。。
アクセス制限設定の完了
その後何記事も調べて解決に至り、アクセス制限が確認できた記述が以下になりました{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt155116344",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "【作成したバケットARN】/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "【自身のIPアドレス】"
}
}
},
{
"Sid": "Stmt155116467",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "【作成したバケットARN】/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "【自身のIPアドレス】"
}
}
}
]
}
*【作成したバケットARN】は編集ページの上部に表示されています。
動作確認
作成したバケット>「静的ウェブサイトホスティング」>「バケットウェブサイトエンドポイント」に許可したIPアドレスからアクセスしホスティングした静的webサイトが表示され、 許可させていないIPアドレスからアクセスをし、アクセス拒否されると動作確認完了になります。まとめ
別途サーバーを用意したりするコスト・手間などが省けて静的サイトの公開するのみでしたらS3を使用するのはとても手軽で便利だと思いました。最後まで読んでいただいた方、ありがとうございました。