AWS-S3を使った静的Webサイトホスティング~構築準備編~
はじめに
このwebサイト記事は、AWS S3に格納したファイルをCloudFront経由でHTTPS配信することで成り立っています。
本記事にて、このWebサイトの作成における構築の前準備について説明します。
この記事でわかること
AWSアカウントを安全に使い始めるための初期設定(rootユーザーの保護、MFA設定、パスワードポリシー)
想定外の課金を未然に防ぐための、AWS Budgetsによる予算アラートの設定方法
rootユーザーを使わずに済むようにするための、管理者用IAMユーザーの作成手順と注意点
AWS CLIのインストールとアクセスキーの紐付け方法(今後のインフラ構築をコマンドラインから行うための準備)
全体の流れ
AWS-S3を使った静的Webサイトホスティング~インフラ構築編~
運用コスト
本記事を読み進めて実践するにあたり、下記のAWS利用課金が発生します。ご注意ください。
| サービス | 内容 | 概算費用 |
|---|---|---|
| Route 53 Domains (※) | 独自ドメインの新規取得・更新 | $16/年~ |
| Route 53 Hosted Zone | ホストゾーン維持費 | $0.5/月 |
| S3 (東京リージョン) | ファイルの保存・PUTリクエスト | 数円程度 ($0.005/1000リクエスト) |
| CloudTrail | 証跡ログ | 複数証跡を作らなければ無料 |
| ACM | CloudFront向けSSL証明書 | 無料 |
| CloudFront | Freeプランを選択 | 無料 |
| AWS Budgets | 予算アラート | 無料 |
学習用途であり、可能な限りコストを抑えたい場合は、独自ドメインの取得をしなければ、$1/月くらいで済むと思います。
(独自ドメインを取得しても、1カ月当たりに換算すれば、$2.5=¥400くらいですね。趣味としては安い…!)
構築
step1. AWSアカウントの準備(作成済みの場合はskip)
まずはAWSアカウントを各自作成してください。もちろん、無料プランで十二分です。
Warning
アカウントはrootユーザーとして作成されます。このアカウントが流出すると悪用されて大量課金される恐れがあるため、取り扱いは要注意です。(特に、PWは使いまわさないように!)
アカウントが用意できたら、まずはrootユーザーとしてログインします。
IAM user sign in 画面で、(Don’t have?)を押すと、sign in as root user.を選択できるようになります。

step2. rootユーザーの保護(対策済みの場合はskip)
2-1. MFA (Multi Factor Authentication)を有効化する
MFAの登録はいくつか方法がありますが、無料で手軽な手法である、スマートフォンにインストールされたGoogle Aunthenticatorを使うことを想定して解説します。
- AWS管理コンソール右上のユーザー名をクリックし、「セキュリティ認証情報」をクリックする。

- 多要素認証(MFA)項目右上の「MFAデバイスの割り当て」をクリックする

- デバイス名を入力し、「認証アプリケーション」を選択する(※Google Authenticatorを使う場合)


- 画面の指示に従って、Google Authenticatorを操作して、MFAの追加を行ってください。

作業後に、「多要素認証(MFA)」の項目に、1行追加されていればOKです。
2-2. PWポリシーの最適化
- 画面左手の「アクセス管理/アカウント設定」をクリックして開きます。

- パスワードポリシー項目の右上にある「編集」をクリックします

- パスワードポリシーを「カスタム」に変更し、厳しいポリシーを任意で設定し、変更を保存します。
Note
この設定はIAMで作成するユーザーのみに適用されます(rootユーザーには反映されません)。

step3. AWS Budgetsの設定
設定ミスなどにより想定外の課金がされないように、AWS Budgetsによる請求アラートを作成します。
3-1. AWSマネジメントコンソールから、AWS Budgetsを開く
画面上部の検索窓で「budgets」と検索してください。

3-2. 「予算を作成」する
AWS Budgetsが開いたら、右上にある橙色の「予算を作成」をクリックします。

3-3. 予算タイプを選択する
予算の設定
→「テンプレートを使用(シンプル)」を選択

テンプレート - 新規
→「月次コスト予算」を選択

予算名
→任意の名前を入力
予算額
→ドル単位で任意の値を入力(5ドルくらいでいいと思います)

設定が完了したら、右下の「予算を作成」をクリックして、予算を作成します。
下図のように予算が作成されればOKです(すでに作業後のものを取ったので予算超過してますが気にしないでください…)

Note
請求アラートが発生した場合、AWSアカウントに紐づいているメールアドレスへアラートが届きます。
step4. 管理用IAMユーザーを作成する(admin)
rootユーザーはすべてのリソースにアクセスできる最強の権限です。万が一漏洩すると大変なので、日常作業で使うことは非推奨です。
AWSアカウントのルートユーザー - AWS userguide-
step4では、管理用のIAMアカウント(adminアカウント)を作成して、rootユーザーを普段使わなくてもよいようにします。
Warning
最新のセキュリティベストプラクティスにおいては、本手順で説明する管理者用ユーザー作成後のアクセスキーの発行は非推奨とされています。(アクセスキーの漏洩による被害が深刻なため)
代わりに、IAM Identity Centerを利用することが推奨されています。後日記事を執筆・修正する予定です。
4-1. IAMの管理画面に移動する
画面上部の検索窓に「IAM」と入力し、IAMを開く。

IAMの右にある☆をクリックしておくと、上部バーに表示できるので便利です。
4-2. 「ユーザーを作成」する
左カラムから「IAM ユーザー」を選択し、右上にある橙色の「ユーザーを作成」をクリックする。

4-3. ユーザーの指定
ユーザー名
→任意に指定する(ここでは「admin_mysite」としました)。
AWSマネジメントコンソールへのユーザーアクセスを提供する
→チェックボックスをオンにする
コンソールパスワード
→お好きな方を選択する(勉強用途であればPW変更はしなくてよいので自動生成でいいと思います)
ユーザーは次回サインイン時に新しいパスワードを作成する必要があります:
→任意で好きな方を選択する

4-4. 許可を設定
許可のオプション
→「ユーザーをグループに追加」を指定

ユーザーグループ
→右上の「グループを作成」をクリックする
→ユーザーグループ名を入力する(ここではAdmin-group_site)
→AdministratorAccessにチェックボックスを入れる
→右下の「ユーザーグループを作成」をクリックする

Warning
「AdministratorAccess」はAWSリソースに対するフルアクセス権限になっているので取り扱い要注意です。
設計編で考慮したように、実際に使うAWSのサービスは、「S3、CloudFront、ACM、Route 53」と分かっているので、これらに対するアクセス権限に絞って付与するのが最も適切な運用になります。
AWSのセキュリティベストプラクティスにおける、「最小権限の原則」を参照してください。
- 作成したグループの左手のチェックボックスをオンにしてから「次へ」進む

4-5. 確認して作成
確認画面で設定に問題ないことを確認してから、「ユーザーの作成」をクリックする

4-6. パスワードを取得(PW自動生成の場合)
ユーザー作成が完了した後、自動でパスワードを生成する設定にしている場合は、生成されたパスワードの.csvファイルをダウンロードできるので、必ずダウンロードしてください。
Warning
パスワードの取得はこの画面からしか行うことができません。また、パスワードが漏洩しないように細心の注意を払ってください。

※テストユーザー作成時の画面を表示しています
Note
マネジメントコンソールへのログインURLはお気に入りに入れておくと今後アクセスするときが楽です。
4-7. adminアカウントへのMFA設定
rootアカウントと同様に、権限の強いadminアカウントにはMFAを設定しましょう。
- 作成したIAMユーザーをクリック

「セキュリティ認証情報」タブから、「MFAデバイスの割り当て」をクリック
→Google Authenticatorなどで、MFAの設定を行ってください。

MFA設定ができたら、step4-6で取得した、AWSマネジメントコンソールへのログインURLから、adminアカウントへログインしてください。
4-8. AWS CLIアクセスキーの設定
Warning
最新のセキュリティベストプラクティスにおいては、アクセスキーの発行は非推奨とされています。
後日、アクセスキーを発行せずにAWS CLI v2を利用する方法を執筆する予定です。
- IAMで作成したadminユーザー名をクリックする

- セキュリティ認証情報タブ内の「アクセスキー」項目右上にある「アクセスキーを作成」をクリック

ユースケース →コマンドラインインターフェイス(CLI)を選択
推奨された代替案の内容を確認する
上記のレコメンデーションを理解し、アクセスキーを作成します
→チェックボックスをオンにする
次へをクリックする

説明タグ値
→任意の文字を入力する。(わかりやすいものにすることを推奨します)
アクセスキーを作成をクリックする

4-9. アクセスキーを取得
アクセスキーが発行されると、アクセスキーと対応するシークレットアクセスキーのcsvファイルがダウンロードできます。
シークレットアクセスキーを表示/取得できるのはこの画面しかないため、必ずcsvファイルをダウンロードしましょう。
Warning
ここで取得するcsvファイルに記載されているシークレットアクセスキーは漏洩しないように厳重な管理を行ってください。
例えば誤ってクラウドやgithubなどにアップロードされないように注意してください。

4-10. AWS CLIのインストール
AWS CLIをインストールして、step4.9で取得したアクセスキーの紐づけを行います。
- Powershellを起動し、下記コマンドを入力して、AWS CLIのインストール状況を確認する
aws --version
version情報が表示されれば、AWS CLIはインストール済みです。
version情報が表示されず、awsコマンドが認識されない旨のエラーが出た場合は、未インストールです。
- AWS CLIのインストール(未インストールの場合)
PowerShellを「管理者権限」で起動し、下記コマンドを実行してAWS CLIのインストールを行います。
msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
インストール完了後は、Powershellを一度閉じてから、開きなおしてください。(環境変数を適用するため)
その後、下記コマンドでversionの確認をしてください。
aws --version
versionが表示されれば適切にインストールできています。
4-11. AWS CLIとアクセスキーの紐づけ
- Powershellにて下記コマンドを実行して、config設定フローを起動します。
aws configure
対話形式で4項目を尋ねられるので、step4-9でダウンロードしたcsvに記載されているアクセスキー情報をもとに入力します。
AWS Access Key ID [None]: <csvのAccess key ID>
AWS Secret Access Key [None]: <csvのSecret access key>
Default region name [None]: ap-northeast-1
Default output format [None]: json
なお、Default region nameは、ap-northeast-1(東京リージョン)を指定しています。
Note
ほかの作業でAWS CLIを利用したことがある場合は[None]の部分に、前回登録時の情報が記載されていることがあります。
何も入力せずにEnterキーを押すと、この内容を引き継ぐようになっているので、入力には注意してください。
- AWSとの接続確認
下記コマンドを実行して、設定した認証情報が正しく機能しているかを確認します。
aws sts get-caller-identity
以下のように、UserID・Account・ARNの情報が返ってくればOKです。
{
"UserId": "AIDAxxxxxxxxxxxxxxxxx",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/admin_mysite"
}
実際のシステム構築へ
構築する準備が整いました。
実際にS3などの設定を行い、インフラの構築を行っていきましょう。続きは下記へ。