AWSアカウントのルートユーザを通常運用で使ってはいけません

# はじめに
本記事は[AWS Well-Architected Labs - Security - 100 - AWS ACCOUNT AND ROOT USER
](https://wellarchitectedlabs.com/security/100_labs/100_aws_account_and_root_user/)及び[BASIC IDENTITY AND ACCESS MANAGEMENT USER, GROUP, ROLE](https://wellarchitectedlabs.com/security/100_labs/100_basic_identity_and_access_management_user_group_role/)のハンズオン内容を元にポイントをまとめたものになります。AWS Well-Architected Labsについて知りたい方は[こちら](https://qiita.com/chanhama/items/b40fd218865d9bce7723)をご覧ください。

# AWSアカウントのルートユーザとは
AWSアカウント作成時に自動的に生成されるユーザです。メールアドレスとパスワードでサインインすることができます。AWSアカウントに関する全ての操作を実行できる唯一のユーザです。そのため、ルートユーザの認証情報は厳重に管理し、通常運用では利用しないようにしましょう。代わりに通常運用で利用するためのIAMユーザ、グループ、ロールをルートユーザで初めに作成しましょう。

# ルートユーザの保護
ルートユーザを保護するための施策を紹介します。

## MFAの有効化
MFAを有効化することでサインイン時の認証情報にメールアドレスとパスワードに加えてワンタイムパスワードを含めることができます。MFAの種類としては以下があります。

- 仮想 MFA デバイス
    - 電話やその他のデバイスで動作し、物理デバイスをエミュレートするソフトウェアアプリケーション
- U2F セキュリティキー
    - コンピュータの USB ポートに接続するデバイス
- ハードウェア MFA デバイス

スマートフォンを所有していればすぐに使える仮想MFAデバイスがおすすめです。スマートフォンを紛失しても大丈夫なようにバックアップ機能が付いているアプリケーションを選択しましょう。個人的には[Authy](https://apps.apple.com/us/app/authy/id494168017)がおすすめです。また、MFAの有効化はルートユーザだけでなく、IAMユーザも基本は設定すべきと個人的に思います。

## 秘密の質問
電話での問い合わせやMFA紛失時に本人確認のための質問を用意することができます。ハンズオンでも紹介されてましたが、あまりおすすめされないようです。質問の回答を忘れてしまうとかなり大変そうです。。

[もしもAWSでMFAが壊れて秘密の質問に答えられなかったら](https://qiita.com/sashimizakana/items/a1a965178ea6b1af991a)

## 代理連絡先の設定
ルートユーザのメールアドレス以外にAWSからの連絡を受け取りたい場合に設定することができます。普段利用しないメールアドレスをルートユーザに設定している場合はいつも確認しているメールアドレスを代理連絡先に登録すると良いと思います。

## ルートユーザアクセスキーは発行しない
アクセスキー(アクセスキーIDとシークレットアクセスキー）を使用して、AWSにプログラムによるリクエストを行うことができます。このアクセスキーはルートユーザも作成することはできますが、**絶対に発行しないでください。**
アクセスキーはプログラムで利用するため、うっかりGitHub等で公開されてしまうリスクがあります。ルートユーザのアクセスキーはパスワードやMFAによる保護をすることができないので、これが漏れてしまうとやられたい放題になってしまうからです。アクセスキーを利用する場合はIAMユーザのものを利用するようにし、アクセスキーを発行するIAMユーザの権限もなるべく制限するようにしましょう。

## パスワードの定期的変更
ハンズオンではパスワードを定期的に変更することが紹介されていました。しかし、2017年に米国国立標準技術研究所（NIST）からガイドラインとしてサービス提供者がパスワードの定期的な変更を要求すべきではない旨が示されていることもあり、定期変更は必須では無いと思います。定期変更する代わりに複雑なパスワードを設定した方が良いと思われます。

# ルートユーザを使った作業
通常運用はルートユーザを使わないようにと説明しましたが、ではどういった作業の場合にルートユーザを使うのかを代表的なものを紹介します。

- AWSアカウントの解約
- アカウント名、ルートユーザー パスワード、および E メールアドレス等のアカウント情報の変更
- AWSサポートプランの変更
- 初期IAMユーザの作成

詳細は[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_tasks-that-require-root.html)を参照ください。

# IAMユーザを使った作業
通常運用時はIAMユーザを使います。IAMユーザには直接IAMポリシーをアタッチせずに、IAMグループというIAMユーザをグループ化できるリソースに対してIAMポリシーをアタッチすることが推奨されます。rootアカウント同様にIAMユーザにも極力MFAを設定しましょう。ハンズオンラボ上では以下の図で説明されています。
![iam-create-user&group.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266372/29bc02bc-7365-6f24-5879-74394366a180.png)

# IAMユーザからIAMロールへのスイッチロール
IAMユーザからIAMロールにスイッチロールすることで、IAMユーザではなくIAMロールの権限で作業することができます。スイッチロールには以下のような利点があります。

- 複数AWSアカウント作業時にアカウント毎へのログインが必要無い
- 有効期限付きの一時クレデンシャルしか発行できないため、IAMユーザ単体で使うよりもセキュアに使える

ハンズオンラボ上では以下の図で説明されています。
![iam-switch-role.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266372/1a0e65ce-8ccc-413a-c795-8c8c873bc392.png)


# おわりに
所属している企業でAWSを利用する場合はAWSアカウントを管理している組織でルートユーザも管理していると思うので、作業者としてはあまりルートユーザを意識することは無いと思います。ただし、AWSアカウントを個人で利用する場合はルートユーザの管理もちゃんとする必要があります。万が一があると痛い目を見るのは自分なので、しっかりと保護対策をしておきましょう。

# 参考
- [IAMのスイッチロールを理解したい](https://dev.classmethod.jp/articles/iam-switchrole-for-beginner/)