【IAM警察だ!】Dome9のIAM Reportで複数アカウントのIAM設定を掌握する
中山(順)です
本日はDome9のIAM Report機能をご紹介します。
IAMを管理する者の悩み
AWSを利用する組織においてIAMの管理は少数の信頼できるメンバーで行うことが多いと思います。 この「少数のメンバーで管理」という部分は組織の大きさにはあまり関係ない=大きな組織では少数のメンバーで多数のIAM Entity(IAM User/Roleなど)およびAWSアカウントを管理しているのではないかなーと思っています(多くのAWS利用組織においてはマルチアカウント戦略を採用しているのではないかと思います)。 この仮説が正しいのであれば、大きい組織ほどIAMの管理をどうやって管理するかということに興味を持っているのではないかと思います。 具体的には、IAMを長く・大規模に運用している組織ほど以下のような課題が発生しているのではないでしょうか?
- どれだけのIAM Entityがあるのかよくわからない
- 存在するIAM Entityが必要なものかよくわからない
- IAM Entityに付与した権限が最小化されているかよくわからない
- 認証情報が適切に管理されているかよくわからない
Dome9のIAM Reportを利用することで、これらがかなり見通せるようになります。
やってみた
実際の画面と併せて機能をご紹介していきたいと思います。 IAM Reportは以下の3つの画面から構成されています。
- IAM Reports Dashboard
- Policy Report
- Credentials Report
前提条件
Dome9にAWSアカウントが登録済である必要があります。 登録方法はこちらを参照してください。
IAM Reports Dashboard
IAM Reports Dashboardは文字通りIAMで管理されるリソースに関するダッシュボードで、IAM User / Group / Role / Policy / Access Key / MFA などのリソースについての統計情報が表示されます。
例えば、"Users in Groups"という円グラフでは、IAM Groupに所属しているIAM Userと所属していないIAM Userの数を確認することができます。
Policy Report
Policy Reportは、IAM Entityに付与されている権限をリストで取得することができます。
IAM Policyは、以下のようなJSON形式で定義することができます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "FullAccess", "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] }, { "Sid": "DenyCustomerBucket", "Action": ["s3:*"], "Effect": "Deny", "Resource": ["arn:aws:s3:::customer", "arn:aws:s3:::customer/*" ] } ] }
このように、Statement要素内に具体的な権限が記述されます。 Statement内で利用する要素としては、上記の例の他にもConditionなどの要素等があります。
IAM JSON Policy Elements Reference
Policy Reportでは、Dome9で管理する全てのAWSアカウントにある全てのIAM Entityについて、これらの要素の組み合わせをリストとして表示してくれます。
また、これらのフィルタリングも実施することができます。
例えば、S3バケットの作成を行うことができるIAM Userを抽出したい(S3バケットを作成する職務権限を有しているUserだけに権限が付与されているか確認したい)というときには、以下のようなフィルタリングを行うことができます。 ワイルドカードを使ってIAM Policyを定義しているケースを想定するとこのような感じになるのではないかと思います。
(補足すると、IAM UserがIAM Roleから権限を引き受けることができるようになっている場合には、これだけでは不十分です。 IAM Roleも調査の対象とするべきでしょう。)
なお、このフィルタリング設定は保存することが可能で、再利用が可能です。
フィルターを作成すると、以下のようにすぐに再利用できます。
このほか、レポートの項目でグルーピングしたり、表示されている内容をCSVにエクスポートすることも可能です。
Credentials Report
Credentials ReportはIAM Userの認証情報に関する情報をリストで取得することができます。
画面の構成はPolicy Reportとほぼ同様です。
例えば、「マネージメントコンソールにログインするためのパスワードが有効」かつ「MFAが未設定」のIAM Userを抽出するには、以下のようなフィルターを定義すればOKです。
このほか、パスワードが最後に使用されたのがYYYY/MM/DDより前であるIAM Userを抽出する、といったことも可能です。
まとめ
このように、複数のAWSアカウントを横断してIAM 関連の情報を簡単に把握することができます(簡単すぎて解説することが少ないwww)。
AWSを多くの業務に適用した結果、AWSアカウントを複数利用するマルチアカウント戦略が広く採用されていますが、その結果として統制が困難になっているケースが散見されます。 もちろん、IAM Userを管理するためのAWSアカウントを用意してそれ以外のAWSアカウントにAssume Roleするような設計をしたり、ADFSなどと認証連携するなど、設計で一部の課題の発生を未然に防ぐことは可能です。 最近ではControl Towerなど複数アカウントの統制が容易になる機能も提供されるようになりました。 しかし、最初からそこまで考慮して設計することは難しいかと思います。
「そもそも現状がよくわからん!」という方は、まずはトライアルで現状を把握してみてはいかがでしょうか?
トライアルは国内の総代理店であるソフトバンクさんのホームページから申し込み可能です。 その際、「本トライアルは何でお知りになりましたか?」には「Developers.IO」とお書きください。
参考情報
おしらせ
クラスメソッドは、チェックポイントソフトウェアテクノロジーズさんの年次イベントであるCPX 2019 Tokyoにスペシャルサポーターとして協賛させて頂くことになりました。 Dome9をはじめとしたサービスや近年のセキュリティに関するトレンドが紹介されますので、是非ともお越しください。