AWS勉強会(補足2) / IAMを設定してアカウントのセキュリティを高めよう

詳しいことはクラスメソッドさんの記事を読んでほしい (終)
[AWS再入門 AWS IAM (Identity and Access Management) 編 ｜ Developers.IO](https://dev.classmethod.jp/cloud/aws/cm-advent-calendar-2015-getting-started-again-aws-iam/)

それからAWSの公式ドキュメント
- [IAM とは - AWS Identity and Access Management](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html)
- [AWS Identity and Access Management (IAM - ユーザのアクセスを安全に制御）| AWS](https://aws.amazon.com/jp/iam/)

どういうことかというと、「AWSを利用するために作成したアカウント」は「ルートユーザ」と言われ、いわゆる特権ユーザです。
Linux系であればrootユーザ、WindowsであればAdministratorで作業してるということです。
個人情報と支払い用のカードを登録してAWSのアカウント作ったあと、個人でほそぼそとネットワーク作ったりEC2作ったりしてる状態で「IAM？ナニソレ？おいしいの？」な人(私です)はその状態です。

制限ユーザを別途作成し、そのユーザで作業するようにしましょう、という話。

(こんな重要なこと、アカウント作成した直後に強制的に設定させればいいのに、、、)

# IAM ダッシュボード

ここにある

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c1426c64-d03e-1174-4b39-fd712687febf.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/0870c810-e360-7f32-9db7-9527e249a79c.png)

ここを初めて開くと「セキュリティステータス」がまったく進んでいないことを確認できる。

ちなみに「ロール」(この図だと6件ある)のリンクを開くと、現時点で作成済みのロール一覧が表示される。
ELBやらAutoScalingやら、知らない間に作成されていた模様。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/305c06cd-4fed-f3ac-d6c1-e0fcc0ab52c2.png)

## ルートアカウントのMFAを有効化

デフォルトでは全ての操作が可能なルートユーザが、メールアドレスとパスワードのみの簡単認証で突破されてしまうので、認証の強化を行う。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/f46822a6-b0c7-12a8-dd54-423d1e933aa1.png)

[Multi-Factor Authentication](https://aws.amazon.com/jp/iam/details/mfa/)とは、要は多段階認証のこと。
Androidユーザ(iOSもあるっぽい)なら、[Google Authenticator](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2)が利用できる。
このアプリは、認証に必要なトークンをスマートフォンで表示できるというもの(一言で言うとワンタイムパスワードの表示アプリ)。グーメン。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/27f36b93-1bdb-8a80-5a1d-90425414032e.png)

Google Authenticatorの準備ができたら[次のステップ]押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/99c09bc7-0b8a-4183-8698-81a281c6aa07.png)

QRコードをGoogle Authenticatorで読み取り、連続して表示される認証コードを二つ入力して[仮想MFAの有効化]を押下(認証コードは一定時間でリフレッシュするので、それを2個連続で入れる)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/a2e85532-b1e3-f687-0496-61a588bbe0b9.png)

これでダッシュボードを再表示すれば完了

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/f656fc63-e17a-47fe-1d2d-98e34f24e444.png)

この設定を行っておくと、ログイン時にパスワードだけでなくMFAコードの入力が必要になる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c8a5e0c1-0f38-74a4-cb34-07e0e64b689c.png)


## 個々のIAMユーザの作成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/025713cb-a1d6-6bd0-67b3-a57cc255d401.png)

ここで、ルートユーザを使わないように、普段使い用のアカウントを作成する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/5c98d1c3-6909-4324-fd53-dd1c97efe067.png)

ひとまず、自分が使う用のアカウントを作成する

### ユーザー詳細の設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/bee42be6-b1f8-c83e-3cd5-d6eb4b5d3536.png)

プログラムによるアクセスは、CLIで使う場合かな？まだそこまで作業が進んでいないのでとりあえずチェックをはずしている。

パスワードのリセットが必要は「ほかの人へのアカウントを払い出しを行い、その人に初期パスワードは送りつつ自分でパスワードは設定してね」という代物と思われ。

### アクセス許可の設定

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/e7e0774c-47ae-58e0-9c78-6b202d77b109.png)

初めての設定の場合は所属させるグループがないので、まずグループの作成を行う。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/e58a3430-aad0-3792-dfd4-bfd3bf57a051.png)

管理者権限用のグループということで`admin-group`、選択するポリシーは`AdministratorAccess`として[グループの作成]押下
(本当は権限をちゃんと設定させるべきなんだけど、300件以上もポリシーあると…:sweat:)

これでさっき入力したユーザを、admin-groupに所属させることができるので、[確認]押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/d36c67b3-f9ad-5c71-82b4-b494fda66a42.png)

確認画面でそれまでの内容が表示され、問題がなければ[ユーザーの作成]押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/dc872a5a-36f7-ed9c-9a21-733cd8b17be4.png)

これでユーザが作成された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/75daa8e6-277e-5972-6a38-95cccde3cc3d.png)

ダッシュボードへ戻ると、セキュリティステータスが4/5完了している。

## IAMパスワードポリシーの適用

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/26df4331-c999-a6fa-5bc1-a1a7b13e31e9.png)

よく聞くパスワードポリシーと基本的には同じもの。
大文字小文字に数字と記号も混ぜろとか、x文字以上設定しろとか、パスワードの定期変更(笑)とか。
ただし「パスワードポリシーを設定している」という状態が必要なので、個人利用でも何か適当に設定しておく。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c2bc1a40-1a74-a7e9-4a51-e1c82aa6c683.png)


これでセキュリティステータスがすべて完了になった

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c2ecf567-0bbc-1e6a-57f3-b1502eca0a0f.png)

このとき、画面上部にサインイン用のリンクが表示されているので控えておく

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/3e9a85d8-2ef3-1c46-b4f9-c6f23474a2f6.png)


# 作成したIAMユーザでAWSにログインする

(ルートユーザでログイン中のセッションは、IAMユーザでログインすると切断されるので注意)

ダッシュボードに表示されている「IAM ユーザーのサインインリンク」にアクセスする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/2462abd8-8073-24b6-6027-a3a9255652ae.png)

すると「アカウント」に自分のAWSアカウントIDの番号(?)が入力された状態で認証画面が開く。
ユーザ名とパスワードに、IAMユーザ作成で作ったアカウント情報を入力すればサインインできる。

サインインすると、画面上部に表示されるアカウント名の部分が、IAMユーザの名前になっているのを確認できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/c8262c8a-cf56-0e7b-484b-a7cd736cc35e.png)


これでルートユーザでなく、IAMユーザを使ってAWSを利用できるようになりました。


# 請求情報の参照

`AdministratorAccess`でフルアクセスの設定にしていても、請求情報は参照できない。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/af1831dc-03ae-2fae-a02e-354f9fae072c.png)


[請求の情報およびツールへのアクセス許可 - AWS 請求情報とコスト管理](https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/grantaccess.html)

いったんルートユーザでログインし、[アカウント設定](https://console.aws.amazon.com/billing/home?#/account)の画面でIAMユーザに対して請求情報へのアクセスを許可する必要がある。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/0a846d8d-4550-4498-b19a-99bc208766cd.png)

[IAMアクセスのアクティブ化]にチェックを入れて[更新]する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/52e088f6-981a-60df-61d5-33a6dc2b801b.png)

これで請求情報ダッシュボードへもアクセスできるようになった。