AWS-S3を使った静的Webサイトホスティング~構築準備編~

はじめに

このwebサイト記事は、AWS S3に格納したファイルをCloudFront経由でHTTPS配信することで成り立っています。

本記事にて、このWebサイトの作成における構築の前準備について説明します。

この記事でわかること

  • AWSアカウントを安全に使い始めるための初期設定(rootユーザーの保護、MFA設定、パスワードポリシー)

  • 想定外の課金を未然に防ぐための、AWS Budgetsによる予算アラートの設定方法

  • rootユーザーを使わずに済むようにするための、管理者用IAMユーザーの作成手順と注意点

  • AWS CLIのインストールとアクセスキーの紐付け方法(今後のインフラ構築をコマンドラインから行うための準備)

全体の流れ

  1. AWS-S3を使った静的Webサイトホスティング~設計編~ 

  2. AWS-S3を使った静的Webサイトホスティング~構築準備編~ ★イマココ!

  3. AWS-S3を使った静的Webサイトホスティング~インフラ構築編~

運用コスト

本記事を読み進めて実践するにあたり、下記のAWS利用課金が発生します。ご注意ください。

サービス内容概算費用
Route 53 Domains (※)独自ドメインの新規取得・更新$16/
Route 53 Hosted Zoneホストゾーン維持費$0.5/月
S3 (東京リージョン)ファイルの保存・PUTリクエスト数円程度 ($0.005/1000リクエスト)
CloudTrail証跡ログ複数証跡を作らなければ無料
ACMCloudFront向けSSL証明書無料
CloudFrontFreeプランを選択無料
AWS Budgets予算アラート無料

学習用途であり、可能な限りコストを抑えたい場合は、独自ドメインの取得をしなければ、$1/月くらいで済むと思います。

(独自ドメインを取得しても、1カ月当たりに換算すれば、$2.5=¥400くらいですね。趣味としては安い…!)

構築

step1. AWSアカウントの準備(作成済みの場合はskip)


まずはAWSアカウントを各自作成してください。もちろん、無料プランで十二分です。

AWSアカウントの登録はこちらから

Warning

アカウントはrootユーザーとして作成されます。このアカウントが流出すると悪用されて大量課金される恐れがあるため、取り扱いは要注意です。(特に、PWは使いまわさないように!)

アカウントが用意できたら、まずはrootユーザーとしてログインします。

IAM user sign in 画面で、(Don’t have?)を押すと、sign in as root user.を選択できるようになります。

alt text

step2. rootユーザーの保護(対策済みの場合はskip)


2-1. MFA (Multi Factor Authentication)を有効化する

MFAの登録はいくつか方法がありますが、無料で手軽な手法である、スマートフォンにインストールされたGoogle Aunthenticatorを使うことを想定して解説します。

  • AWS管理コンソール右上のユーザー名をクリックし、「セキュリティ認証情報」をクリックする。

alt text

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

alt text

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

alt text

alt text

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

alt text

作業後に、「多要素認証(MFA)」の項目に、1行追加されていればOKです。

2-2. PWポリシーの最適化

  • 画面左手の「アクセス管理/アカウント設定」をクリックして開きます。

alt text

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

alt text

  • パスワードポリシーを「カスタム」に変更し、厳しいポリシーを任意で設定し、変更を保存します。

Note

この設定はIAMで作成するユーザーのみに適用されます(rootユーザーには反映されません)。

alt text

step3. AWS Budgetsの設定


設定ミスなどにより想定外の課金がされないように、AWS Budgetsによる請求アラートを作成します。

3-1. AWSマネジメントコンソールから、AWS Budgetsを開く

画面上部の検索窓で「budgets」と検索してください。

alt text

3-2. 「予算を作成」する

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

alt text

3-3. 予算タイプを選択する

  • 予算の設定

    →「テンプレートを使用(シンプル)」を選択

alt text

  • テンプレート - 新規

    →「月次コスト予算」を選択

alt text

  • 予算名

    →任意の名前を入力

  • 予算額

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

alt text

設定が完了したら、右下の「予算を作成」をクリックして、予算を作成します。

下図のように予算が作成されればOKです(すでに作業後のものを取ったので予算超過してますが気にしないでください…)

alt text

Note

請求アラートが発生した場合、AWSアカウントに紐づいているメールアドレスへアラートが届きます。

step4. 管理用IAMユーザーを作成する(admin)


rootユーザーはすべてのリソースにアクセスできる最強の権限です。万が一漏洩すると大変なので、日常作業で使うことは非推奨です。

AWSアカウントのルートユーザー - AWS userguide-

step4では、管理用のIAMアカウント(adminアカウント)を作成して、rootユーザーを普段使わなくてもよいようにします。

Warning

最新のセキュリティベストプラクティスにおいては、本手順で説明する管理者用ユーザー作成後のアクセスキーの発行は非推奨とされています。(アクセスキーの漏洩による被害が深刻なため)

代わりに、IAM Identity Centerを利用することが推奨されています。後日記事を執筆・修正する予定です。

AWS CLIの認証及びアクセス認証 - AWS userguide -

4-1. IAMの管理画面に移動する

画面上部の検索窓に「IAM」と入力し、IAMを開く。

alt text

IAMの右にある☆をクリックしておくと、上部バーに表示できるので便利です。

4-2. 「ユーザーを作成」する

左カラムから「IAM ユーザー」を選択し、右上にある橙色の「ユーザーを作成」をクリックする。

alt text

4-3. ユーザーの指定

  • ユーザー名

     →任意に指定する(ここでは「admin_mysite」としました)。

  • AWSマネジメントコンソールへのユーザーアクセスを提供する

     →チェックボックスをオンにする

  • コンソールパスワード

     →お好きな方を選択する(勉強用途であればPW変更はしなくてよいので自動生成でいいと思います)

  • ユーザーは次回サインイン時に新しいパスワードを作成する必要があります:

     →任意で好きな方を選択する

alt text

4-4. 許可を設定

  • 許可のオプション

     →「ユーザーをグループに追加」を指定

alt text

  • ユーザーグループ

     →右上の「グループを作成」をクリックする

     →ユーザーグループ名を入力する(ここではAdmin-group_site)

     →AdministratorAccessにチェックボックスを入れる

     →右下の「ユーザーグループを作成」をクリックする

alt text

Warning

「AdministratorAccess」はAWSリソースに対するフルアクセス権限になっているので取り扱い要注意です。

設計編で考慮したように、実際に使うAWSのサービスは、「S3、CloudFront、ACM、Route 53」と分かっているので、これらに対するアクセス権限に絞って付与するのが最も適切な運用になります。

AWSのセキュリティベストプラクティスにおける、「最小権限の原則」を参照してください。

IAMにおけるセキュリティのベストプラクティス - AWS UserGuide -

  • 作成したグループの左手のチェックボックスをオンにしてから「次へ」進む

alt text

4-5. 確認して作成

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

alt text

4-6. パスワードを取得(PW自動生成の場合)

ユーザー作成が完了した後、自動でパスワードを生成する設定にしている場合は、生成されたパスワードの.csvファイルをダウンロードできるので、必ずダウンロードしてください。

Warning

パスワードの取得はこの画面からしか行うことができません。また、パスワードが漏洩しないように細心の注意を払ってください。

alt text

※テストユーザー作成時の画面を表示しています

Note

マネジメントコンソールへのログインURLはお気に入りに入れておくと今後アクセスするときが楽です。

4-7. adminアカウントへのMFA設定

rootアカウントと同様に、権限の強いadminアカウントにはMFAを設定しましょう。

  • 作成したIAMユーザーをクリック

alt text

  • 「セキュリティ認証情報」タブから、「MFAデバイスの割り当て」をクリック

     →Google Authenticatorなどで、MFAの設定を行ってください。

alt text

MFA設定ができたら、step4-6で取得した、AWSマネジメントコンソールへのログインURLから、adminアカウントへログインしてください。

4-8. AWS CLIアクセスキーの設定

Warning

最新のセキュリティベストプラクティスにおいては、アクセスキーの発行は非推奨とされています。

後日、アクセスキーを発行せずにAWS CLI v2を利用する方法を執筆する予定です。

AWS CLIの認証及びアクセス認証 - AWS userguide -

  • IAMで作成したadminユーザー名をクリックする

alt text

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

alt text

  • ユースケース  →コマンドラインインターフェイス(CLI)を選択

  • 推奨された代替案の内容を確認する

  • 上記のレコメンデーションを理解し、アクセスキーを作成します

     →チェックボックスをオンにする

  • 次へをクリックする

alt text

  • 説明タグ値

     →任意の文字を入力する。(わかりやすいものにすることを推奨します)

  • アクセスキーを作成をクリックする

alt text

4-9. アクセスキーを取得

アクセスキーが発行されると、アクセスキーと対応するシークレットアクセスキーのcsvファイルがダウンロードできます。

シークレットアクセスキーを表示/取得できるのはこの画面しかないため、必ずcsvファイルをダウンロードしましょう。

Warning

ここで取得するcsvファイルに記載されているシークレットアクセスキーは漏洩しないように厳重な管理を行ってください。

例えば誤ってクラウドやgithubなどにアップロードされないように注意してください。

alt text

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などの設定を行い、インフラの構築を行っていきましょう。続きは下記へ。

現在執筆中:AWS-S3を使った静的Webサイトホスティング~インフラ構築編~