新規AWSアカウント作成時にまずやること

こんにちは、AWS担当のwakです。先日社内でAWSアカウントを新規に作成してリソースの引っ越しをする機会がありました。良い機会ですので、AWS新規アカウントを作成して最初にすべきことをまとめます。

なお、現時点ではAWSの日本語にはあちこち若干怪しい箇所があるので画面キャプチャでは言語設定を英語にしています。操作を行う際はもちろん日本語で構いません。

f:id:nurenezumi:20151102152539j:plain

猫スリバチ の中でご満悦のかわいい猫*1


2段階認証

まずルートアカウントを2段階認証で保護しましょう。ルートアカウントは全ての権限を持っていますから、万が一乗っ取られたりすると

  • 勝手にAWSの契約を解約されて全てのリソースを失った
  • 勝手にインスタンスを山ほど起動されてビットコインに採掘に利用され、高額な課金だけが残った
  • 個人情報が全て流出した

といった悲劇につながります。2段階認証を導入するとこの危険を著しく軽減することができます。公式ドキュメントはこちらです。 docs.aws.amazon.com

アプリかトークンを用意する

スマホに対応アプリを入れるか、2段階認証用のハードウェアMFAデバイスを用意します(Amazon.comで注文したらデバイスは1週間程度で届きました)。スマホを使う場合は壊れる可能性を考えて2台用意しておくと良いでしょう。対応しているアプリ、デバイスの購入方法については次のドキュメントを参照してください。

Multi-Factor Authentication

ルートアカウントで2段階認証を有効にする

画面右上のアカウント名をクリックし、「Security Credentials」をクリックするとこちらの画面が開きます。「MFA」をクリックします。

f:id:nurenezumi:20151030150234p:plain
スマホアプリで2段階認証を行う場合

「A virtual MFA device」を選択すると、画面にQRコードが表示されます。アプリで「コードを追加」メニューを選択するとQRコードリーダーが起動するので(QRコードリーダーを普通に直接起動して読み込ませてもダメです)、画面のQRコードを読ませましょう。スマホを2台使う場合は、2台目のスマホでまったく同じ操作を繰り返して同一のQRコードを読ませます*2QRコードを読ませると、アプリが6桁の数字からなるOTP(ワンタイムパスワード。6桁の数字)を表示してくれるようになります*3QRコードの下のテキストボックスに、まず表示されているOTPを、続けてその次に表示されるOTPを入力します。「連続するOTPを2つ入れる」のがルールです。

ハードウェアMFAデバイスで2段階認証を行う場合

デバイスを使う場合は「A hardware MFA device」を選択して先へ進むと、デバイスのIDを入力するように指示されます。デバイスの裏側に書いてあるIDを入力しましょう(つまり、このIDはとても大切なコードだということになります)。同じように連続する2つのコードを入力します。


ログ格納用S3バケットを作る

AWSでは日々大量のログデータ(AWSの操作ログ、ELBのアクセスログ、請求データなど)が発生します。これらはもちろんきちんと保存して役立てたいものですが、それはどこに蓄積されていくのでしょうか。容量制限はないのでしょうか。

その答えがS3です(そして容量制限はありません)。まず事前にバケットを作成し、各サービスでそのバケットをログ出力先として登録します。すると日が経つにつれログがどんどんバケットに出力されてゆくという仕組みです。いずれ使うことになるはずなので、次のS3バケットを作成しておきましょう。後ろに書いてある名前は参考例です。

  • 請求レポート用バケット (billing-yourcompanyname)
  • CloudTrailログ出力用バケット (cloudtrail-yourcompanyname)
  • AWS Configログ出力用バケット (config-yourcompanyname)
  • ELBアクセスログ用バケット (elb-yourcompanyname)

なお、S3では空のバケットを作成しただけでは料金はかからず、データが入った時点で初めて課金が始まります*4。ケチなあなたも安心です。


請求関連

ルートアカウントでログインし、アカウント名→Billing & Cost Management(請求とコスト管理)→Preferences(設定)とメニューを辿りましょう。

f:id:nurenezumi:20151030153158p:plain

こちらのチェックボックスを全てチェックして設定を有効にします。これはそれぞれ次のような意味です。

  • Receive PDF Invoice By Email(電子メールで PDF 版請求書を受け取る) 文字通り、毎月3日~5日頃にPDFの請求書がメール送信されてくるようになります。(これがなくてもコンソールから過去の請求額を参照することはできます)

  • Receive Billing Alerts(請求アラートを受け取る) これを有効にすると、CloudWatchのメトリクスに「料金」が追加されます。するとサーバーの負荷などと同じように、当月の利用料金が事前に設定しておいた金額を超えるたびにアラートを発生させることができます(この金額はもちろん複数設定できます)。きちんと監視をすれば、利用料金が不自然に増加していること、あるいは想定通りの推移をたどっていることを確認できるので安心できます。

  • 請求レポートを受け取る 請求データをCSV形式で受け取ることができます。次の項に書きます。

請求レポートを有効にする

請求レポートは、AWSの請求額の詳細な内訳が出力されたCSVファイルです。「何がこんなに高いのか?」「先週から増強したインスタンスにはいくらかかっているのか?」など、料金に関する情報を最も詳細かつタイムリーに得ることができます。最初に説明したように、このデータはS3に保存されてゆきます。

まずこの赤枠内のリンクをクリックすると、S3に設定すべきポリシー(JSON形式で記述されています)がポップアップ表示されます。

f:id:nurenezumi:20151030153504p:plain

S3のコンソールへ移動し、事前に作成しておいた請求レポート用バケットを右クリックしてプロパティを開きます。Permissions(アクセス許可)の中に「Edit bucket policy(バケットポリシーの追加)」メニューがあるので、これをクリックして開くテキストボックスに、上で表示されたポリシーを全文そのままコピペします。これでAWSのサービスがこのバケットへのアクセス権限を得て、権限テスト用のaws-programmatic-access-test-objectというファイルが1個自動的に作成されます。

請求レポートの内容

請求レポートは4種類あり、最も細かいものではリソース単位・種別単位・1時間単位で1レコードになっています。たとえばEC2インスタンスを作成して1時間動かしておくだけで、少なくとも

  • EC2稼働時間
  • データ転送(IN) *5
  • データ転送(OUT)
  • EBS保持時間(※SSDの場合)

という4種類の料金が発生しますから、1ヶ月では4件×24時間×30日分、約3000レコードが出力されます。こちらについてはまた稿を改めて書きたいと思います。

CloudTrailのログを保存できるようにする

CloudTrailのメニューを開き、

  • Logging(ログ記録)を有効にする
  • Configuration(設定)でログをS3へ保存するように設定する

を行っておきます。これでAWSに対するあらゆる操作を記録したログ(JSON形式)がS3にたまるようになります。

Configのログを保存できるようにする

AWS Configのメニューを開き、同様に

  • Recordingを有効にする
  • Set up(歯車アイコン)でS3に保存するように設定する

を行っておきます。これでAWSリソースに対する変更がすべてS3にたまるようになります。


IAMユーザー・グループを作成する

現時点ではAWSを操作できるユーザーアカウントはルートアカウントだけですが、これは権限が強力すぎて日常的な作業を行う用途には不向きです。必要な権限だけを持ったアカウントを作成しましょう。

IAMユーザーを作成する

画面右上のアカウント名→Security Credentials(認証情報)→Users(ユーザー)とたどると、IAMユーザーの管理画面が表示されます。ここでまずユーザーを作成します。

f:id:nurenezumi:20151030171608p:plain

アカウント名を入力して作成をするだけです。IAMはディレクトリサービス的な機能は持っておらず、IAMユーザーに氏名やメールアドレスを持たせることはできません。

IAMユーザーにパスワードを設定する

IAMユーザーは作成直後の段階ではパスワードが未設定のためコンソールにログインすることすらできません。作成したユーザーをクリックし、Security Credentials(認証情報)タブからパスワードを設定してあげます。

f:id:nurenezumi:20151030172026p:plain

また、ルートアカウントに2段階認証を設定したときと同様、IAMユーザーでも2段階認証を導入することができます。しかし2段階認証設定時にはスマートホンまたはトークンが必要になるため、IAMユーザー本人に設定してもらう方がスムーズかもしれません。

IAMユーザーに直接権限を付与する

次は権限です。ユーザーをクリックし、

f:id:nurenezumi:20151030174049p:plain
  • Attach Policy(ポリシーのアタッチ)をクリックすると、AWS側で用意された権限セットのテンプレート(パワーユーザー、EC2の状態読み取りのみ可能など)を付与することができます。
  • Inline Policies(インラインポリシー)からメニューを開くと、全ての種類の権限を条件付きで詳細に設定して付与することができます。

このどちらでも構いません。また、一般ユーザーに与える権限としては前回の記事を参考にしてください。

tech.sanwasystem.com

IAMグループに権限を付与する

上述のようにユーザーに直接権限を与えることもできますが、本来は

  1. まずユーザーをグループに追加し、
  2. そのグループに対して権限を付与する

というやり方が推奨されています(一人のユーザーが複数のグループに所属することもできます)。このボタンを押してグループ名を入力すれば即座にグループが作成されます。

f:id:nurenezumi:20151030175621p:plain

ここにユーザーと同じように権限を割り当て、さらにユーザーを追加すれば終わりです。


おわり

これで、

  • 権限を正しく設定し、不用意な操作を避ける
  • 操作ログを事後チェックすることができる
  • 料金を詳細に分析できる

ことができる状態、いわば「ちゃんと」AWSを使うための準備が整いました。AWSはお手軽に使うことができますが、お気軽に使い続けて構わないかというとまた別の検討が必要でしょう。後になって事情や気分が変わってもいいように、最初の下準備は大切だと思う次第です。それでは。

*1:ASCII.jp:ハマる猫はハマる! 魅惑の「猫スリバチ」とは!? (1/2)|荻窪圭の“這いつくばって猫に近づけ” より見つけて購入

*2:このとき、別に急ぐ必要はありません

*3:OTPは30秒ごとに変わります。スマホを2台使った場合は同じOTPが表示されるはずです。タイミングにはある程度ズレが出ますが気にしなくて大丈夫です

*4:それでもログデータ程度なら微々たるものですが

*5:通常は無料ですが、それでもレコードは出力されます