AWS の ルートユーザー・IAMユーザー・各種設定等　参考サイトとメモ


##ルートユーザーとIAMユーザー

https://blog.serverworks.co.jp/tech/2020/07/14/post-88254/


https://www.fenet.jp/aws/column/aws-beginner/786/

###AWSアカウントのルートユーザーとは

AWSアカウントを作成した時に用意したEメールアドレスとパスワードを使用してサインインできるアカウントのこと。
ルートユーザーは、請求情報など支払いに関連したものも含めた、AWSの全てのサービスとリソースに対して無制限にアクセス可能で、解約などの契約変更も実行可能。

AWSでは、このルートユーザーを日常の業務で使用するべきではないとしており、__管理者として作業する場合も、必要な権限を付与したIAMユーザーを使用することを強く推奨__している。

###ルートユーザーの安全を確保するためにやっておくべきこと

###セキュリティ面

+ パスワードを変更する
+ MFA(多要素認証)を有効にする
+ ルートユーザーのアクセスキーは作成しない
   * もし発行されていた場合は削除を検討/実施
+ ルートユーザーの代替となる管理者用のIAMユーザーを作成する
   * IAMユーザーに対してMFA(多要素認証)を有効にする


###コスト管理面

https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0701-244.html

https://aws.taf-jp.com/blog/9083

+ IAMユーザー/ロールでの請求情報アクセスを有効化
+ AWS Cost Explorerの有効化
+ 請求アラートの設定
+ 日本円建てによる支払い設定 
+ 操作履歴を残すよう設定（CloudTrail)

CloudTrailは操作ログをCloudTrail(S3)に記録する設定にすると課金対象になってしまうとのことで今回は見送ることにした。以下サイト参照のこと。　もう少し理解できたら設定してみたい。

https://software.pitang1965.com/2019/08/04/usage-limit-alerting-via-aws/


※ 設定方法等、詳細については各項目の参考サイトを参照すること。

###管理者権限のあるIAMユーザーの作成方法

https://docs.aws.amazon.com/ja_jp/mediapackage/latest/ug/setting-up-create-iam-user.html

やってみようシリーズ：IAMアカウントを作ってみよう-IAMポリシー解説編-

https://www.idaten.ne.jp/portal/page/out/secolumn/multicloud/column005.html


最初の IAM ユーザーを作成します。この IAM ユーザーを__管理者グループ__に追加し、アカウントですべてのサービスおよび各サービスのリソースにアクセスできるようにします。次回 AWS アカウントにアクセスするときは、__この IAM ユーザーの認証情報を使用して__サインインします。

####IAMポリシーとは

>IAMポリシーとは、「どのAWSサービスの」、「どのリソースに対して」、「どんな操作を」、「許可するか(許可しないか)」、を権限とし、利用者（IAMユーザーなど）に対して設定することが出来る定義

####IAMポリシーの種類

>IAMユーザーに対してアタッチをする「ユーザーベースのポリシー」
AWSリソースに対してアタッチをする「リソースベースのポリシー」
IAMロールに対してアタッチをする「IAMロールの信頼ポリシー」

今回は、IAMアカウント作成し、権限を適用することが目的の為、「ユーザーベースのポリシー」についてのみ説明する。

本来は、IAMポリシーを用意する必要があるが、管理者権限を付与したい時は、IAMポリシーは自分で作る必要がない。
なぜなら、よくあるパターンのIAMポリシーは、事前にアマゾンウェブサービス上に用意されている為。

ただ、用意されている物だけでも717件が登録されている（2021/11現在）。
>どんな種類のIAMポリシーが存在するかを知ることが大変ですね。全てを覚えることは天才であっても難しいと思いますので、どのような権限が必要かを検討いただき、AWSのテクニカルサポートに問い合わせるなどして、必要なポリシーを特定していきましょう。

https://dev.classmethod.jp/articles/sugano-042-iam-best-practices/

上記サイトは、AWS　のドキュメント「IAM のベストプラクティス」をできるだけ具体的に解説したサイト。

>管理者として、ルートユーザーの次に最大の権限が設定してある「AdministratorAccess」ポリシーを付与します。


今回は、__管理者としてのIAMユーザー__を作成するため、__[AdministratorAccess]__ のポリシーを選択する。
この際、各ユーザーにきちんとポリシーが割り当てられていることを確認しやすくするため、ユーザーにポリシーを付与するのではなく、__グループ__にポリシーを付与する。

_AWS公式では、多くの場合、ロールで最低限の権限付与をすることを推奨しています。参考までに。_

https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-access-keys-best-practices.html

>多くの場合、期限のない長期のアクセスキー (IAM ユーザーのアクセスキーなど) は必要ありません。その代わり、IAM ロールを作成し、一時的なセキュリティ認証情報を生成できます。

https://zenn.dev/yutaro1985/articles/daa2aaa6cc9907

>IAMアクセスキーが必要なのは、AWSの外部からAWSアカウント内のサービスに対してアクセスを行う必要があるときのみです。
AWSの内部からAWSの各サービスを利用する場合は原則としてIAMロールを使用してください。
また、使う必要がないのにアクセスキーを発行することがないようにしましょう。

```
・　IAMロール(Role)　＝　「AWSのリソースに付与するもの」で、IAMポリシーをグルーピングしたもの
・　IAMポリシー(policy)　＝　「AWSリソースにアクセスするための権限設定」
```

####IAMユーザーに対してMFA(多要素認証)を有効にする

https://qiita.com/yanyansk/items/3a989b70d2d3d49eff16

>作成したIAMユーザーに対してもMFAの設定を行い、セキュアにしておきましょう。


###IAMユーザー/ロールでの請求情報アクセスを有効化

>AWSアカウント発行時のデフォルト設定では、請求情報の参照はルートユーザーでのみ可能な状態となっています。ルートユーザーを普段使いしないで済むようにする為にも、別途作成の管理用IAMユーザーにて請求情報参照を可能にする「IAMユーザー/ロールによる請求情報へのアクセス」設定の有効化(IAMアクセスのアクティブ化) を実施すると良いでしょう。

>実施後、IAMユーザー/ロールに必要なIAMポリシーを付与する事で請求情報へのアクセスが可能となります。



https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/control-access-billing.html#ControllingAccessWebsite-Activate

>IAM アクセスをアクティベートするだけでは、これらの請求情報と予算管理コンソールページに必要な許可は IAM ユーザーとロールに付与されません。IAM アクセスのアクティベートに加えて、必要な IAM ポリシーをこれらのユーザーまたはロールにアタッチする必要があります。詳細については、「請求情報とコスト管理での ID ベースのポリシー (IAM ポリシー) の使用」を参照してください。

####IAM アクセスをアクティベートする

下記サイトは請求情報とコスト管理コンソールへの IAM ユーザーおよびロールのアクセスをアクティベートする方法を画像付きで具体的に説明している。

https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0701-244.html

####IAM ポリシーをユーザーまたはロールにアタッチする


https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-permissions-ref.html

今回は個人開発のため、全ての予算関係にアクセスできるポリシーを作成し、IAMユーザーに付与した。

下記サイトはIAM ポリシーをユーザーにアタッチする方法を画像付きで具体的に説明している。

https://qiita.com/hisayuki/items/d1d13fd0172d96296dd7

###AWS Cost Explorerの有効化

AWS Cost Explorerは、__AWSの利用状況を可視化し分析できるサービス__。

>サービスごとのコスト、月毎のコスト推移を確認できます。また、コストと使用量のデータを分析して傾向・異常などを特定できるため、運用分析をする際に便利な機能です。ぜひ、設定しておくことをオススメします。

設定方法は下記サイト参照。

https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0701-244.html#anc-01-05


###請求アラートの設定

https://zenn.dev/sakojun/articles/20210618-aws-cost-alart

予算管理のアラートにはいくつか種類がある。

####AWS Budgetsのアラート機能

予算に対してアラートを設定できる。

>AWS Budgetsで予算の設定をすると、閾値を超えた際にSNS通知（又は直接Mail）が可能です。
閾値は複数設定もできます。
予測コストに対して設定ができるのも利点です。（現在値に対して設定する事も可能）
>アラート以外に「予算アクション」も設定できて、インスタンスを停止したりIAMポリシーを書き換えて操作を禁止したりもできます。
><a href="https://blog.serverworks.co.jp/aws-budgets-actions#AWS-Budgets-Actions-%E3%81%A8%E3%81%AF" rel="nofollow">AWS Budgets Actions とは（Serverworks blog）</a>

アラート機能自体は、登録された__予算2つまでは毎月無料__。アクションは有料。

https://blog.serverworks.co.jp/tech/2020/06/02/hajimetenoaws_budgets/

>AWS Budgets の注意事項
注意点として以下3点を紹介します。

>+ IAMユーザの制限事項
   + AWS初期設定では、IAMユーザで請求情報を参照できず、ルートユーザで権限の変更が必要となります。
+ コスト予測の利用開始条件
   + 予測コストの算出には、最低5週間の利用データが必要となります。
 利用データが不足している状態、アラームは実行されませんので注意が必要です。
+ 予算の更新周期
　   + AWS請求データの更新周期(1日1回以上)と連動しており、ユーザ側で指定は出来ません。


https://blog.jicoman.info/2018/10/using-aws-budgets-for-billing/



####CloudWatchを使用した請求アラート

https://cloud5.jp/billing-alert-setting/

AWS Budgetsができる前からある機能。
リソース毎に請求アラートを設定するなどの細かい設定には対応できない。

####AWS コスト異常検出（AWS Cost Anomaly Detection）

>前述の２つと役割が違い、普段のコスト変化が自動的に学習されて異なる変化があった際に通知がされます。
例えば検証でインスタンスを作成して消し忘れたなど。
ほか意図せず急にコストが増えた時の保険として設定しておくと良いと思います。

https://dev.classmethod.jp/articles/aws-cost-anomaly-detection-ga/

FAQに無料と記載されている。

今後、細かい設定をするかもしれないので、今回は__AWS Budgetsのアラート__を設定する。
__AWS Cost Anomaly Detection__も無料のため、設定することにした。


####AWS Budgetsのアラート機能 設定

AWS Budgetsのアラート機能設定方法は以下の動画を参考に。

 https://youtu.be/SuWtEKDr_Po  

###日本円建てによる支払い設定

>AWSの支払い方法は、クレジットカード払い、請求書払い、請求代行払いがあります。
クレジットカード払いの場合、利用者自身でデフォルト設定の米ドル請求から円建て払いに変更する必要があります。日本円を選択することで、外貨取扱手数料に相当する費用を削減することが可能です。コスト削減のためにも、設定変更をオススメします。

設定方法は下記サイト参照

https://www.cloudsolution.tokai-com.co.jp/white-paper/2021/0701-244.html#anc-01-05




##その他参考サイト

https://dev.classmethod.jp/articles/iam-user-password-reset/


https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_passwords_admin-change-user.html