みなさん、こんばんは。koyachiです。今日はAWS Identity and Access Management (IAM)を利用するときのベストプラクティスについて、お伝えさせていただきます。絶対使うIAMユーザ、本来のあるべき姿とは???

AWS Identity and Access Management (IAM) とは

そもそも、 AWS Identity and Access Management (IAM) ってどのようなサービスだっけ?AWSにログインするときに使うよね?と思っている方も多いと思います。簡単に特徴をおさらいします。

・AWSリソースをセキュアに操作するために、認証・認可の仕組みを提供するマネージドサービス
・各AWSリソースに対して別々のアクセス権限をユーザ毎に付与できる
・多要素認証(Multi-Factor Authentication:MFA)によるセキュリティの強化
・一時的な認証トークンを用いた権限の委任
・他のIDプロバイダーで認証されたユーザーにAWSリソースの一時的なアクセス
・世界中のAWSリージョンで同じアイデンティティと権限を利用可能
・データ変更は結果整合性を保ちながら全リージョンに伝播
・AWS IAM自体の利用は無料

どこまで知っている?IAMのベストプラクティス

答えは最後にあります!あくまでベストプラクティスなので、全てを対応していないと絶対NGではありませんが、推奨される方法として理解していただくのが良いと考えます。

IAMベストプラクティス設計方針(例)

あくまで参考にしていただければ幸いです。

■設計方針


・強力なパスワードポリシーを設定する
もちろん会社やプロジェクト、部門のポリシーに従うのがベストだと思いますが、特にないという方はこの機会に作ってみることをおすすめします!
・個々人のIAMユーザを作成する
 作業はベンダーさんにお任せしていて、1アカウントだけ払い出ししているという方も多いかと思いますが、作業の証跡をウォッチするためにも、個人アカウントの払い出しを強く推奨いたします。
・権限を付与した IAMグループにIAMユーザを所属させることで権限を付与する
各個別のIAMユーザに権限を付与をするよりもグループに付与しましょう。ちなみにポリシーは1グループ10個までしかアタッチできません。10個以上利用したい場合は、グループを追加しましょう。
・各サーバの役割ごとに、IAMロールを用意してEC2に付与する
・ReadOnlyAccessより強い権限を持つIAMユーザには、MFAを適用する

考慮のしどころですよね。一括してAWSマネジメントコンソールにログインするIAMユーザにはMFAをかける方がよりベストではありますが。。
・アクセスキーは原則払い出さない
・アクセスキーのローテーションは可能であれば行う。(強制しない)

ここは強制にすると、アプリ側でローテーションの運用漏れで影響が出る可能性があります。本来は自動化が一番ですし、アプリ側に埋め込みするといったことがない運用がベストです。
・不要なIAM設定は、定期的に削除する
アカウントの棚卸をしっかりやりましょう。AD連携がされていて、退職されるとき、プロジェクトを離れるときに一括で他のアプリのアカウント含めて削除できる仕組み化ができれば一番ですよね。

複数のAWSアカウントを運用しているが、組織の機能などで一括したAWSアカウント管理をされていない場合、 以下の方法がおすすめです。

AWS アカウント間の IAM ロールを使用したアクセスの委任

異なる AWS アカウント (Production および Development) にあるリソースへのアクセスを委任する例をご紹介します。複数AWSアカウントを運用していてもクロスアカウントアクセスを設定することで、AWSアカウントごとに IAM ユーザーを作成する必要がなくなります。

まずはアクセスProduction環境をアクセス元としてDevelopmentアカウントとの信頼関係を結びます。アクセス先のDevelopmentにアクセス権を設定します。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.htmlより引用

正しく運用されているかチェック

以下のConfigマネージドルールを配布し、運用の中で自動確認、安全性を担保する(あくまで一例です)。

・iam-no-inline-policy-check
  →インラインポリシー機能が使用されていないことを確認
・iam-password-policy
  →IAM ユーザが、パスワードポリシーを満たしていることを確認
・iam-root-access-key-check
  →rootユーザーのアクセスキーが使用可能かどうかを確認
・iam-user-group-membership-check
  →IAMユーザーが少なくとも1つのIAMグループのメンバーであるかどうかを確認
・iam-user-unused-credentials-check
  →IAMユーザーが指定した日数以内に使用されていないPWやアクセスキーを持っていないか確認。ここはプロジェクトを離れたり、退職された場合などは即時削除を行いたいので、他のチェックも考えてみたいところではあります。。

まとめ

いかがでしたでしょうか。今回はみなさんも日常的に使うIAMのベストプラクティスについて解説しました。 AWSが提唱するベストプラクティスはとても大切ですが、鵜吞みにせずに、必要な設定を見極めて導入することが大切です。 まずは設定をしてみて、少しずつ運用に合わせて調整していく形が進めやすいと思います。ぜひトライしてみてください。

参考:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html