AWSアカウントを作成したら最初にやっておきたいことをまとめてみた。
あわせて読みたい
本記事の内容を含めた最新の手順は、下記の書籍にまとまっている。
AWSアカウント(ルートアカウント)の保護
AWSアカウントが乗っ取られると詰むので、真っ先にセキュリティを強化する。
AWSアカウントへ二段階認証を導入
AWSアカウントでのログインは、AWSアカウント作成時のメールアドレス・パスワードだけでできてしまう。心許ないにもほどがあるので、まずは二段階認証を設定しよう。
- IAMのページを開く
管理用のIAMユーザ作成
普段の作業ではAWSアカウントを使わないのが鉄板なので、管理用のIAMユーザを作成しよう。
ユーザの作成
何はともあれ、ユーザを作成しないとどうにもならないので早速作ってみよう。
ここでのポイントは、 「アクセスキーを生成しないこと」 である。アクセスキーはAWS CLIなどを使うときには必要になるのだが、最初は必要ないので、必要になるまでアクセスキーの生成は控えよう。
また、AWSアカウントと同様に二段階認証は必ず導入しよう。
- IAMのページを開く
グループの作成
ユーザは作っただけでは何もできない。権限を設定したグループを作成し、ユーザを所属させよう。
- IAMのページを開く
なお、一点注意。ここで設定している**「AdministratorAccess」は、AWSアカウントに次ぐ強力な権限なので常用してはいけない。**AWSに慣れてきたら、適切な範囲の権限設定に変更しよう。
IAMパスワードポリシーの適用
デフォルトの設定では、パスワードポリシーがかなり緩いので、可能な範囲で縛りを入れよう。
- IAMのページを開く
とりあえず、上記のような設定にしてみたが、有効期限の設定や再利用の禁止なども設定できるので、必要に応じて設定しよう。
オプションの詳細はIAM ユーザー用のアカウントパスワードポリシーの設定を参照してほしい。
セキュリティステータスの確認
ここまでやれば、最低限のセキュリティ設定は完了だ。
- IAMのページを開く
すべてグリーンになっている。大変気分がいい。
請求情報の設定
IAMユーザを作ったので、AWSアカウントはログアウトしたいところだが、その前に請求情報やAWSアカウントに関わる設定を変更しておこう。これらの設定のいくつかは、AWSアカウントじゃないとできないので、ログアウトする前にやっつけておく。
IAMユーザへの請求情報のアクセス許可
デフォルトでは、AWSアカウント以外では、請求情報を見ることができない。AWSアカウントは極力使いたくないので、IAMユーザが請求情報にアクセスできるよう許可しておこう。
- アカウント設定を開く
請求情報とコスト管理の設定
CloudWatchと連携して予期せぬ課金を検知できるようにしておこう。ここではついでに、PDFで請求書をもらえるようにしてみた。
- 請求情報とコスト管理の設定を開く
最後の「請求レポートを受け取る」は、チェックしておくと、S3に明細をCSVで吐いてくれるらしい。個人利用レベルだと必要ないので、ここでは有効にしない。
CloudWatchで請求情報のアラームを作成
「請求アラートを受け取る」を設定すると、任意の金額に達したタイミングで通知する設定が可能になる。いきなり数十万とか請求されたくないので、適当な金額になったら通知するようにしよう。とりあえず、ここでは100ドルに設定してみた。
- CloudWatchを開く
コストエクスプローラーの有効化
必須ではないがあると便利なので、コストエクスプローラーは有効にしておこう。
課金情報をグラフィカルに表示できるようになる。
- コストエクスプローラーを開く
現地通貨設定
これも必須ではないが、日本円で支払いができるようになる。また利用料表示もドルではなく、日本円になってくれる。
- アカウント設定を開く
AWSアカウントの設定
代替の連絡先
AWSアカウント登録時の連絡先以外へ連絡してくれる。携帯を二台持ちしてる人なんかは登録しておくと少しだけ安心感が増すと思う。
- アカウント設定を開く
秘密の質問
電話での問い合わせや、MFAの解除申請などの時に、秘密の質問を聞いてくれる。AWSアカウントがよりセキュアになるが、秘密の質問は、本人が忘れる可能性が結構あるので、安易に設定するのはオススメしない。
一度設定すると削除できない(変更は可)らしいので、設定するなら、ちゃんと答えられる質問を入れよう。
- アカウント設定を開く
ちなみに、筆者は秘密の質問の設定はしていない。じゃあ、なんで紹介したんだと言われそうだが、適当に設定して数年後に痛い目を見た人もいるようなので、念のため紹介させてもらった。
通知設定
マーケティング関連のメールに埋もれて、重要なメールを見落とすと痛いので、筆者はマーケティング関連のメールは全てオフにしている。Amazonさん、ゴメンナサイ!
- 通知設定を開く
IAMユーザへの切り替えとリージョン設定
IAMユーザでのログイン
それではそろそろ、AWSアカウントとはオサラバして、先ほど作成したIAMユーザでログインしなおしておこう。
- IAMのページを開く
リージョンを変更
多くの人は東京リージョンが都合がいいと思うで、リージョンを変更しておこう。
CloudTrail
AWSのAPI呼び出しの履歴を残してくれるCloudTrailを設定しよう。CloudTrailを設定するとAWS内のリソースの作成、変更、削除がログに残るようになる。
- CloudTrailを開く
- 「証跡名」に任意の名前を入力
- 「証跡情報を全てのリージョンに適用」の『はい』にチェック
- 「新しい S3 バケットを作成しますか」の『はい』にチェック
- 「S3 バケット」に任意のバケット名を入力
なお、CloudTrail単体では、履歴を残してくれるだけで、インシデント検知などはできない。詳細は紹介しないが、CloudWatch Logsなどと連携すれば、色々できるので調べてみてほしい。
git-secrets
git-secretsはAmazonが提供しているツールで、シークレットアクセスキーなどの秘密情報を、誤ってgitへコミットしてしまうのを防止してくれる。
試しにGitHubでアクセスキー公開したら13分で抜かれたという情報もあり、意図せず公開すると、不正利用される可能性が高いため、自己防衛のためにもぜひ導入しよう。(@mmizutani さんの情報提供に感謝!)
インストール&設定
ここでは、git-secretsをインストールするとともに、git init時に自動的に、AWS関連の秘密情報コミット防止をするように設定している。
$ brew install git-secrets
$ git secrets --register-aws --global
$ git secrets --install ~/.git-templates/git-secrets
$ git config --global init.templatedir '~/.git-templates/git-secrets'
詳細は「クラウド破産しないように git-secrets を使う」を参考にしてほしい。
既存プロジェクトへの反映
新規にgit initしたときは、勝手にgit-secretsが組み込まれるが、既存のプロジェクトについては、明示的な設定が必要なので覚えておいてほしい。
$ cd /path/to/your/repo
$ git secrets --install
AWSマネジメントコンソールへの不正アクセスを検知する仕組みの構築
外部のブログだが、「AWSマネジメントコンソールにいつ誰がサインインしたか通知する仕組み」を構築する方法について、解説する記事を書いたのであわせて参考にしてほしい。
上記の記事ではSlackを使う前提にしているが、SNS経由でメールを飛ばすなどの仕組みにすることも簡単なので、ぜひチャレンジしてみよう。この仕組みを構築しておくと、安心感が圧倒的に増す。
学び方を知る
さて、ここまでで、AWSで最初にやるべきことを、筆者なりに紹介してきた。
最後にAWSを学んでいくにあたっての、取っ掛かりを紹介して、この記事は締めよう。
はじめてAWSをさわる場合
AWSについては、Web上でも情報が溢れているが、その情報量の多さゆえに、戸惑うことも多い。そこで、最初のうちはWebではなく、書籍をオススメしたい。特にオススメは、Amazon Web Services パターン別構築・運用ガイドである。
この本は現時点(2016年1月)では最も網羅性が高くてバランスがよい。良きガイドになること請け合いなので、ぜひ手元に置いておこう。
ベストプラクティスを知る
ご存知のとおり、AWSは利用者も多く、数多くの人が知見を共有してくれている。特にセキュリティについては、個人利用・法人利用問わず重要になってくるので、少しずつ学んでいこう。
セキュリティ全般
Amazon社が初心者向けに公開している利用者が実施するAWS上でのセキュリティ対策が、セキュリティの全体像を知るのに非常にいい。また、同じくAmazon社が公開しているホワイトペーパーAWS セキュリティのベストプラクティス(日本語)も役に立つ。なかなかの大作だが、ぜひ一度読んでおこう。
IAMベストプラクティス
IAMは特に重要なので、Amazonが公開しているIAM のベストプラクティスから、トピックスをそのまま引用する。詳細な解説はリンク先を参照してほしい。なお、上記で、太字にした部分は本記事で実施済みの項目である。(12番はCloudTrailしか設定してないけど)
- AWS アカウント(ルート)のアクセスキーをロックする
- 個々の IAM ユーザーを作成する
- IAM ユーザーへのアクセス許可を割り当てるためにグループを使います。
- 最小限の特権を認める。
- ユーザーのために強度の高いパスワードポリシーを設定する。
- 特権ユーザーに対して、MFA を有効化する。
- Amazon EC2 インスタンスで作動するアプリケーションに対し、ロールを使用する。
- 認証情報を共有するのではなく、ロールを使って委託する。
- 認証情報を定期的にローテーションする。
- 不要な認証情報の削除
- 追加セキュリティに対するポリシー条件を使用する。
- AWS アカウントのアクティビティの監視
少しだけ補足しよう。
4番の「最小限の特権を認める。」はAWSに限らない、セキュリティの一般的な考え方であるが、実践するためにはかなり勉強する必要がある。ポリシー設定などを駆使することになるが、少しずつ勉強して、適切な設定ができるようにしよう。
あと、忘れがちだが重要なのが、9番の「認証情報を定期的にローテーションする。」で、特にアクセスキーについては、必ず定期ローテーションをする運用にしよう。