ぶろとよ

ネットワーク系クラウドエンジニア(AWS)の技術ブログ。自動化に興味があるためAWS CLIを勉強&アウトプット中。

AWSアカウントの新規作成と初期設定(一部AWS CLI)

AWSアカウントを新規作成したのですが、初期設定でやることを忘れていたため調べ直しました。
次回も忘れると困るので、自分用に備忘として残すことにしました(汗)

一部、CloudShellを使用したAWS CLIコマンドも併記します。
CloudShellが使えるようになり、アカウント作成直後でもAWS CLIが利用できるので、少しづつですがコマンド化していこうと思います。

AWSリソースの命名規則は自分で用意したものを使用しています。
AWSリソースの命名規則について - ぶろとよ

目次

検証環境

  • 検証日: 2022/8/20
  • PC環境:
    • Windows10 Home Ver21H1
      • Google Chrome: バージョン: 104.0.5112.102(Official Build) (64 ビット)
  • スマホ環境
    • Android11
      • 二段階認証アプリ: Google 認証システム

注意事項

  • 本記事の内容はCloudShellで検証しています。
  • AWS CLIはCloudShellを使用しているためバージョン2です。
  • コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
  • 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。


1. AWSアカウントの新規作成

AWSアカウントを新規作成します。
作成方法は公式URLに分かりやすく記載されているため、こちらを参考にします。

aws.amazon.com

登録の際に気になった部分だけメモします。


2. [任意] Google Chrome拡張機能の設定

AWSマネジメントコンソールの操作にGoogle Chromeを使用しているため、AWS操作時に便利になる拡張機能をインストールしておきます。

2.1. AWSアカウント毎にChromeプロフィールを切り替える

作業ミス防止のため、AWSアカウント毎にChromeプロフィールを切り替えて使用しています。

blog.toyokky.com

2.2. AWS、Chrome拡張機能でMFA(多要素認証)を行う

スマホアプリの「Google 認証システム」でも良いのですが、PC操作時にいちいちスマホ開いてコードを手入力するのが面倒です。
このツールならば二段階認証を求められたらブラウザ操作のみで認証コードをコピペできるので使用しています。

スマホアプリとの使い分け、自分はこうしています。
スマホアプリ: rootアカウント、特定のPC以外からログインするIAMユーザー
Chrome拡張機能: 普段使いのIAMユーザー※特定PCからのみログイン

blog.toyokky.com

2.3. AWS、Chrome拡張機能でファビコンをAWSアイコンにする

Chromeのタブに表示されるファビコンが、サービス毎に変わるので視認性が上がります。

blog.toyokky.com

2.4. AWS、Chrome拡張機能でリージョン毎にコンソールの色を変える

AWSのリージョンだったり、IAM毎に帯の色を変えることができるので、リージョン間違い等に気づきやすくなります。

blog.toyokky.com


3. AWSアカウント作成後の初期設定(rootユーザー)

AWSアカウント作成直後はIAMユーザーも居ないため、rootユーザーで各種設定を行います。
この設定後は基本的にIAMユーザーを使用するようになるため、rootユーザーは悠久の眠りについてもらいます。


3.1. AWSマネジメントコンソールへrootユーザーでのログイン

■ ログイン方法

  1. ログインURLへ接続する
  2. 「ルートユーザー」をチェックする
  3. AWSアカウント登録時のrootユーザーのEメールアドレスを入力して次へ
  4. AWSアカウント登録時のrootユーザーのパスワードを入力してサインインする
  5. AWSマネジメントコンソールへrootユーザーでログインが完了する


3.2. rootユーザーにMFA(二段階認証)を設定する

rootユーザーはスマホアプリ「Google 認証システム」で二段階認証を登録します。

■ 登録方法

  1. IAMダッシュボードへ接続する
  2. 「root ユーザーの MFA を追加する」の「MFAを追加」をクリックする
  3. 「MFAの有効化」をクリックする
  4. 「仮想MFAデバイス」を選択して続行する
  5. 「仮想MFAデバイスの設定」が表示されるので必要事項を入力していく
  6. 「MFAの登録」をクリックし、問題なければMFA設定が完了
  7. IAMダッシュボードへ戻ると、「root ユーザーは MFA が設定されている」に変わっている


3.3. IAMパスワードポリシーの変更

IAMユーザーのデフォルトパスワードポリシーが緩いので強化しておきます。

## デフォルトパスワードポリシー ##
パスワードの最小文字数は 8 文字です
大文字、小文字、数字、および ! @ # $ % ^ & * ( ) _ + - = [ ] { } | 'の文字タイプの組み合わせのうち少なくとも 3 つを含めます。
AWS アカウント名や E メールアドレスと同じにすることはできません

こんな感じに変更してみましたが、セキュリティ要件によっては環境ごとに異なります。

## 変更後の パスワードポリシー##
パスワードの最小文字数は 16 文字です
1 文字以上のアルファベット大文字 (A~Z) を必要とする
1 文字以上のアルファベット小文字 (a~z) を必要とする
少なくとも 1 つの数字が必要
少なくとも 1 つの英数字以外の文字が必要 (! @ # $ % ^ & * ( ) _ + - = [ ] { } | ')
ユーザーにパスワードの変更を許可する
直近 10 回分のパスワードを記憶して再利用を防ぐ


■ 変更方法

  1. IAM > アカウント設定 > パスワードポリシー
  2. 「パスワードポリシーを変更する」をクリックする
  3. 設定画面が出るため必要な設定を行う
    • 設定参考


3.4. [任意] STSで東京リージョン以外を使用できなくする

個人のAWSアカウントでは東京リージョンしか使用しないため、使わないリージョンのSTSエンドポイントを無効化しておきます。


■ 設定方法

  1. IAM > アカウント設定 > Security Token Service (STS)
  2. 使わないリージョンを無効化する
    • 設定参考


3.5. IAMグループの作成(管理者/読み取り)

IAMグループを2つ作成します。
サードパーティ製品等で読み取り権限だけが欲しい時がたまにあるので、読み取りグループも作成しておきます。

■ 作成するリソース

AWSリソース 用途 名前 許可ポリシー
IAMグループ 管理者用 blog-P1x-Igr-Adm AdministratorAccess
IAMグループ 読み取り専用 blog-P1x-Igr-Rdo ReadOnlyAccess


■ 作成方法

  1. IAM > ユーザーグループ
  2. 「グループを作成」をクリックする
  3. 設定画面が表示されるので、必要事項を入力して「グループを作成」をクリックする


■ CloudShell用AWS CLIコマンド

# IAMグループ(管理者)の作成とポリシーアタッチ
IamGroup_Name="blog-P1x-Igr-Adm"
IamGroup_Policy="arn:aws:iam::aws:policy/AdministratorAccess"

aws iam create-group \
    --group-name ${IamGroup_Name}

aws iam attach-group-policy \
    --group-name ${IamGroup_Name} \
    --policy-arn ${IamGroup_Policy}


# IAMグループ(読み取り)の作成とポリシーアタッチ
IamGroup_Name="blog-P1x-Igr-Rdo"
IamGroup_Policy="arn:aws:iam::aws:policy/ReadOnlyAccess"

aws iam create-group \
    --group-name ${IamGroup_Name}

aws iam attach-group-policy \
    --group-name ${IamGroup_Name} \
    --policy-arn ${IamGroup_Policy}


3.6. IAMユーザーの作成(GUI用/CLI用)

次のIAMユーザーを作成して、IAMグループへ追加します。

■ 作成するリソース

AWSリソース 用途 名前 認証情報タイプ AddするIAMグループ
IAMユーザー GUI操作用 blog-P1x-Iur-Adm-Gui パスワード 管理者用:
blog-P1x-Igr-Adm
IAMユーザー CLI操作用 blog-P1x-Iur-Adm-Cli アクセスキー 管理者用:
blog-P1x-Igr-Adm
IAMユーザー CLI操作
サードパーティ
blog-P1x-Iur-Rdo-Cli アクセスキー 読み取り:
blog-P1x-Igr-Rdo


■ 作成方法

  1. IAM > ユーザー
  2. 「ユーザーを追加」をクリックする
  3. 設定画面が表示されるので、必要事項を入力して次に進んでいく
    • ユーザー名 : ※表の「名前」参照
    • AWS 認証情報タイプを選択 : ※表の「認証情報タイプ」参照
      • 「パスワード - AWS マネジメントコンソールへのアクセス」の場合
        • コンソールのパスワード : ● カスタムパスワード & パスワードを入力
        • パスワードのリセットが必要 : □ 無効
      • 「アクセスキー - プログラムによるアクセス」の場合
        • 追加情報の入力は無し
    • ユーザーをグループに追加 : ※表の「AddするIAMグループ」参照
    • タグ : ※好みで設定
  4. ユーザー作成後にパスワードやアクセスキー情報が表示されるので大切に保管する


■ CloudShell用AWS CLIコマンド

# IAMユーザー(管理者、GUI操作用)の作成とIAMグループへ追加
## ※GUIでパスワードを使用してログインするタイプのIAMユーザー
IamUser_Name="blog-P1x-Iur-Adm-Gui"
IamGroup_Name="blog-P1x-Igr-Adm"
IamUser_Password="P@ssw0rd"

aws iam create-user \
    --user-name ${IamUser_Name} \
    --tags "Key=Name,Value=${IamUser_Name}"

aws iam add-user-to-group \
    --user-name ${IamUser_Name} \
    --group-name ${IamGroup_Name}

aws iam create-login-profile \
    --user-name ${IamUser_Name} \
    --password ${IamUser_Password} \
    --no-password-reset-required
    #※パスワードは決め打ちで入れ、初回ログイン後もそのまま使用可能


# IAMユーザー(管理者、CLI操作用)の作成とIAMグループへ追加
## ※CLIでアクセスキーを使用してログインするタイプのIAMユーザー
IamUser_Name="blog-P1x-Iur-Adm-Cli"
IamGroup_Name="blog-P1x-Igr-Adm"

aws iam create-user \
    --user-name ${IamUser_Name} \
    --tags "Key=Name,Value=${IamUser_Name}"

aws iam add-user-to-group \
    --user-name ${IamUser_Name} \
    --group-name ${IamGroup_Name}

aws iam create-access-key \
    --user-name ${IamUser_Name}
      #※表示された次の内容は今後必要になるので大切に保管すること
      #    - AccessKeyId
      #    - SecretAccessKey


# IAMユーザー(読み取り、CLI操作用)の作成とIAMグループへ追加
## ※CLIでアクセスキーを使用してログインするタイプのIAMユーザー
IamUser_Name="blog-P1x-Iur-Rdo-Cli"
IamGroup_Name="blog-P1x-Igr-Rdo"

aws iam create-user \
    --user-name ${IamUser_Name} \
    --tags "Key=Name,Value=${IamUser_Name}"

aws iam add-user-to-group \
    --user-name ${IamUser_Name} \
    --group-name ${IamGroup_Name}

aws iam create-access-key \
    --user-name ${IamUser_Name}
      #※表示された次の内容は今後必要になるので大切に保管すること
      #    - AccessKeyId
      #    - SecretAccessKey


3.7. GUIの管理者IAMユーザーにMFA(二段階認証)を設定する

勉強用普段使いのIAMユーザーで、特定PCからしか利用しないため、Chrome拡張機能で二段階認証を登録します。

対象IAMユーザー : blog-P1x-Iur-Adm-Gui

■ 登録方法

  1. IAM > ユーザー
  2. 対象IAMユーザーをクリックする
  3. 認証情報タブを開く
  4. 「MFA デバイスの割り当て」の「管理」をクリックする
  5. 「仮想MFAデバイス」を選択して続行する
  6. 「仮想MFAデバイスの設定」が表示されるので必要事項を入力していく
    • Chrome拡張機能での登録方法はコチラを参照
  7. 「MFAの登録」をクリックし、問題なければMFA設定が完了
  8. IAMユーザー画面へ戻ると、MFA デバイスの割り当にARNが表示されている


3.8. アカウントエイリアスの作成

AWSアカウントIDにエイリアス(別名)を付けることができる。
AWSログインする時のURLに別名を付けることで判別しやすくなります。
また、アカウントエイリアスは世界中でユニークな文字列である必要があります。

デフォルト : https://<AWSアカウント>.signin.aws.amazon.com/console
   ↓
作成後 : https://<アカウントエイリアス>.signin.aws.amazon.com/console

本手順では仮エイリアスとして「aws-sample-alias2022」としています。


■ 作成方法

  1. IAMダッシュボードへ接続する
  2. 右側ペインに「アカウントエイリアス」があるので「作成」をクリックする
  3. 「優先エイリアス」に「エイリアス」を入力して変更を保存する
    • 63 文字以内である必要があります。有効な文字は、a~z、0~9、- (ハイフン)
  4. IAMダッシュボードへ戻ると、アカウントエイリアス部分が変更されている


■ CloudShell用AWS CLIコマンド

Account_Alias="aws-sample-alias2022"  #Sample

aws iam create-account-alias \
    --account-alias ${Account_Alias}


3.9. お支払い通貨の設定

支払い通貨が日本円になっていることを確認します。
もし、USドルになっている場合は日本円に変更します。
※クレジットカードがVisa または MasterCard のみ対応可


■ 設定方法

  1. 右上隅のアカウント名 (またはエイリアス) を選択し、「アカウント」を選択する
  2. 「お支払い通貨の設定」を確認する
  3. 「選択した通貨: = JPY - Japanese Yen」ならばOK、異なる場合のみ次の項へ
  4. 「お支払い通貨の設定」右側の「編集」をクリックする
  5. 「お支払い通貨の選択」で「JPY - Japanese Yen」を選択して更新する


3.10. 秘密の質問の設定

セキュリティの強化やアカウントの所有者としての認証を行うために設定できる。
普段は使用しないがrootアカウントのログイン情報紛失時にAWSサポートへ助けを求める時などに利用できる。
とても重要な設定なので、設定した内容は大切に保管すること。


■ 設定方法

  1. 右上隅のアカウント名 (またはエイリアス) を選択し、「アカウント」を選択する
  2. 「秘密の質問の設定」右側の「編集」をクリックする
  3. 質問と答えを3つ設定して更新する


3.11. IAM ユーザー/ロールによる請求情報へのアクセス

請求情報はrootユーザーしか見れないけれど、rootユーザーは基本的に封印したいので、IAMユーザーからも請求情報が見れるようにします。 ※IAMユーザーへ、見るためのIAMポリシー付与も必要です


■ 設定方法

  1. 右上隅のアカウント名 (またはエイリアス) を選択し、「アカウント」を選択する
  2. 「IAM ユーザー/ロールによる請求情報へのアクセス」右側の「編集」をクリックする
  3. 「IAM アクセスのアクティブ化」にチェックを入れて更新する


3.12. 請求書等のEメール設定

■ 設定方法

  1. Billing > 請求設定
  2. 設定画面で以下の設定をして保存する
    • ■ E メールで PDF 版請求書を受け取る
      • 毎月3日頃にPDFで請求書をEメールでくれる
    • ■ 無料利用枠の使用アラートを受信する
      • 無料利用枠の使用制限に近づくか超えた場合に E メールアラートをくれる
    • ■ 請求アラートを受け取る
      • CloudWatchで請求アラームを作成する場合はONにする必要がある
      • 一度ONにするとOFFにできない


3.13. CloudWatchで請求アラームを作成する

事前に「その月の利用料金が○○円超えた時点で、Eメールアラートを送信する」を、CloudWatchアラームで設定します。

今回は「40ドル超えたらアラート」 で設定します。


■ 参考URL

AWSドキュメント: 請求アラームの作成


■ 作成するリソース

AWSリソース 用途 名前 リージョン
SNSトピック 通知の配信 system-Pvx-Snt-Billover40usd バージニア北部
SNSサブスクリプション メアドの登録 system-Pvx-Sns-Billover40usd バージニア北部
CloudWatchアラーム 請求アラーム system-Pvx-Cwa-Billover40usd バージニア北部


■ 作成方法

  1. リージョン: バージニア北部(us-east-1)にする
    • 重要、請求アラームはバージニア北部リージョンで管理しています
  2. CloudWatch > アラーム > すべてのアラーム
  3. 「アラームの作成」をクリックする
  4. 「メトリクスの選択」をクリックする
  5. メトリクス > 請求 > 概算合計請求額
  6. 「USD, EstimatedCharges」をチェックして「メトリクスの選択」をクリックスする
  7. 「メトリクスと条件の指定」を設定して次へ
    • 基本はデフォルトのまま
    • 「...よりも」で「何ドル超えたら」を設定する、今回は「40」で設定
  8. 「アクションの設定」の「通知」を設定する
    • アラーム状態トリガー
      • アラーム状態
    • 次の SNS トピックに通知を送信
      • ●新しいトピックの作成
    • 新規トピックの作成中
      • ※自動でトピック名が設定される
    • 通知を受け取る E メールエンドポイント
      • ※Eメールアドレスを指定
  9. 「トピックの作成」をクリックする
    1. 登録したEメールアドレスにメールが届く
      • 件名 : AWS Notification - Subscription Confirmation
    2. メール内の「Confirm subscription」をクリックし、ブラウザで「Subscription confirmed!」と表示されること
  10. 「アクションの設定」へ戻り次へ進む
  11. 「名前と説明を追加」で「アラーム名」を設定し次へ
  12. 「プレビューと作成」で内容が正しいことを確認して「アラームの作成」をクリックする
  13. 請求アラームが作成される


■ CloudShell用AWS CLIコマンド

# 変数の設定(SNSトピック/サブスクリプション)
Sns_Topic_Name="system-Pvx-Snt-Billover40usd"
Sns_Subsc_Name="system-Pvx-Sns-Billover40usd"
Email_Address="sample-mail@example.com"

# 変数の設定(CloudWatchアラーム)
Alarm_Name="system-Pvx-Cwa-Billover40usd"
Billing_Over_USD=40  #閾値のドル価格を設定

# SNSトピックの作成
aws sns create-topic \
    --region us-east-1 \
    --name ${Sns_Topic_Name} \
    --tags "Key=Name,Value=${Sns_Topic_Name}"

# 作成したSNSトピックのARNを変数へ格納
Sns_Topic_Arn=$(aws sns list-topics \
    --region us-east-1 \
     --output text \
    --query "Topics[?contains(TopicArn,\`${Sns_Topic_Name}\`)].TopicArn") \
    && echo ${Sns_Topic_Arn}

# SNSサブスクリプションを作成
aws sns subscribe \
    --region us-east-1 \
    --topic-arn ${Sns_Topic_Arn} \
    --protocol email \
    --notification-endpoint ${Email_Address}

# 手作業でメール認証
#     登録したEメールアドレスにメールが届く
#        - 件名 : AWS Notification - Subscription Confirmation
#     メール内の「Confirm subscription」をクリックし、
#     ブラウザで「Subscription confirmed!」と表示されること

# CloudWatchアラームの作成(請求アラーム)
aws cloudwatch put-metric-alarm \
    --region us-east-1 \
    --alarm-name ${Alarm_Name} \
    --alarm-actions ${Sns_Topic_Arn} \
    --metric-name "EstimatedCharges" \
    --namespace "AWS/Billing" \
    --statistic "Maximum" \
    --dimensions "Name=Currency,Value=USD" \
    --period 21600 \
    --evaluation-periods 1 \
    --datapoints-to-alarm 1 \
    --threshold ${Billing_Over_USD} \
    --comparison-operator "GreaterThanThreshold" \
    --treat-missing-data "missing" \
    --tags "Key=Name,Value=${Alarm_Name}"


3.14. コストエクスプローラーの有効化

AWS Cost Explorer (コストエクスプローラー)では、コストと使用量の変化を可視化して管理できます。 コストエクスプローラーは、少なくとも 24 時間に一度、コストデータを更新しているため、有効化して24時間以降に他の設定を行います。

  1. Billing > Cost Explorer
  2. 「Cost Explorer を起動」をクリックする
  3. 24時間後に試すようにメッセージが出る、起動設定は以上


■ 24時間後に実施する

  1. Billing > Cost Explorer
  2. 「Cost Explorer を起動」をクリックする
  3. AWSコスト管理 > 設定
  4. 次のチェックボックスをONにして設定を保存する
    • ■ 時間単位とリソースレベルのデータ
    • ■ Amazon EC2 リソースの推奨事項を受け取る


3.15. CloudTrailの有効化と証跡の作成

AWS CloudTrailではログイン情報や操作履歴をログに記録するサービスです。
ただし、有料なので多少の利用料金が発生します。高額では無いですし、何か問題が起きたときのログ追跡のためONにします。

※CloudTrailをONにすると、S3リクエストで無料利用分を超えたメッセージが毎月来ますが、下記内容ならいったん無視です。

メール件名 : AWS Free Tier limit alert
内容抜粋 : AmazonS3 2000 Requests, 2,000 Put, Copy, Post or List Requests of Amazon S3


■ 作成するリソース

AWSリソース 用途 Name リージョン
CloudTrail証跡 操作ログ取得
90日保管
system-Clt-Pxx-AllTrail 東京で作成するが全リージョンへ作成される
S3バケット CloudTrailログ保存
永続保管
system-ptx-s3b-cloudtrail-<アカウントID> 東京

※コンソールでは、デフォルトで、有効にしたすべての AWS リージョンのイベントをログに記録する証跡を作成します。単一リージョンでイベントをログに記録するには (推奨されません)、AWS CLI を使用します。


■ 設定方法

  1. 東京リージョン > CloudTrail > 証跡
  2. 「証跡の作成」をクリックする
  3. 「証跡属性の選択」へ必要事項を入力して次へ
    • 証跡名 : ※表のCloudTrail証跡Name
    • ストレージの場所 : 新しいS3バケットを作成します
    • 証跡ログバケットおよびフォルダ : ※表のS3バケットName
    • ログファイルの SSE-KMS 暗号化 : □ 有効 ※無効にする
      • 有効にするとKMSの作成と、KMS利用料金が発生する
    • ログファイルの検証 : ■ 有効
    • SNS通知の配信 : □ 有効 ※無効にする
  4. 「ログイベントの選択」はそのまま次へ
  5. 内容を確認して証跡の作成をする


■ CloudShell用AWS CLIコマンド

※コマンド作成は可能だが、コンソールで作成したほうが簡単に全リージョンのログ取得が有効になるため、コンソールを使用します。


3.16. AWS Configの有効化

AWS ConfigではAWSリソースの設定がモニタリングされ、変更履歴やセキュリティ設定の不備等が調査できるようになります。
ただし、有料なので多少の利用料金が発生します。
※自分はEC2を1, 2台動かしたりする程度ですが、月に0.2ドルくらいです。

AWS Configはセキュリティを考えれば全リージョンで動かすのが理想ですが、勉強用なので良く利用する「東京リージョン」のみで動かします。


■ 作成するリソース

※別途記事を作成中


■ 設定方法

※別途記事を作成中


4. AWSアカウント作成後の初期設定(IAMユーザー)

4.1. AWSマネジメントコンソールへIAMユーザーでのログイン

■ ログイン方法

  1. ログインURLへ接続する
    • https://<アカウントエイリアス>.signin.aws.amazon.com/console
    • 例)https://aws-sample-alias2022.signin.aws.amazon.com/console
  2. ログイン情報を入力してサインインする
    • アカウント ID (12 桁) またはアカウントエイリアス : ※URLに含まれ、入力済み
    • ユーザー名 : ログインするIAMユーザー名
    • パスワード : ログインするIAMユーザーのパスワード
  3. MFA認証、コードを入力して送信する
  4. AWSマネジメントコンソールへIAMユーザーでログインが完了する


4.2. IAMユーザーでログイン後にリージョンを東京にする

勉強用に作成したAWSアカウントのため、基本的に東京リージョンにしかリソースを作成しません。そのため、東京リージョンを選択しておきます。

■ 選択方法

  1. IAMユーザーでログインする
  2. 画面右上のリージョン選択部の▼をクリックする
  3. 「アジアパシフィック(東京)」を選択する


4.3. (任意) デフォルトVPC系リソースの削除

blog.toyokky.com


4.4. VPC系リソースを作成する

最低限のVPC系リソースを作成しておきます。
作成内容は別記事に記載しました。

  • VPC
  • サブネット
  • インターネットゲートウェイ
  • ルートテーブル

blog.toyokky.com


4.5. VPCフローログを設定する

VPC内のIP通信履歴を残すため、VPCフローログを設定します。

  • IAMロール(インラインポリシー使用)
  • CloudWatch Logsロググループ
  • VPCフローログ

blog.toyokky.com


4.6. NATインスタンスを作成する

ホントはNATゲートウェイが良いのですが、NATゲートウェイは月額 5,000円くらい掛かるので、NATインスタンスをt2.microで作成して必要な時だけ起動するようにします。

※記事作成中