コスト駆動でIAMの棚卸し?IAM Access Analyzerで不要ユーザーを検出した
個人で持っているAWSアカウントでのコスト発生をきっかけにIAM Access Analyzerを使ったIAMの棚卸し方針について考えたので、それを書いてみます。
IAM Access Analyzerについて
AWSのIAM Access Analyzerには「未使用のアクセス権用のアナライザー」という機能があります。
AWSの公式資料には次のような説明があります。
未使用のアクセス権用のアナライザー – 付与されているが実際には使用されていない許可を探しているロールとユーザーを継続的に監視する新しいアナライザーです。中央セキュリティチームはダッシュボードビューを活用して、未使用の許可、ロール、IAM ユーザーを確認することで最大限のメリットが得られるアカウントを見つけることができます。
権限を付与したものの使われずじまいになっているIAMリソースを検出し、意図せずセキュリティ上好ましくない状況になることを予防するのに非常に役立つツールです。
例えば、「もう退職して、利用されなくなっているIAMユーザーにAdmin権限がついていた」のような事態を防止できます。
一方で、無償で使えるツールではなくその使い方によっては大きなコストにもなりえます。
今回は「未使用のアクセス権用のアナライザー」機能を使っていく中で私が遭遇した課金周りのお話を紹介し、セキュリティ向上のためにツールを有効活用しつつ、コスト最適化も実現するためにIAMリソースを見直す体制を考えてみたいと思います。
月初に発生していた料金
さて、課金周りでは私が「遭遇した」というのは具体的にどういうことかと言いますと、、、
いつものルーティンとして、自分のAWSアカウント内のコストを確認しているのですが、下記のようなコストが発生していました。
毎月月初という一定のサイクルでIAMのAccess Analyzerのサービス分で20ドルほど発生していました。
20ドルって結構無視できないコストですね。一体何が原因なのでしょうか。
今回、調査を行なって解消したので、その際の経緯を記します。
コスト発生の検出(Cost Anomaly Detection)
コスト発生自体はAWSコスト異常検出(Cost Anomaly Detection)で比較的早めに捕捉しておりました。
コスト異常が検出された時点でSlackやメールに届くようにしていたのです。(対応は遅くなりましたが…)
コスト異常の検出体制
では、その検出体制はどうしていたのか。
構成図としては次のような具合でしょうか。
AWSコンソール上での検出結果画面
これにより次のようなコスト異常が発生したことに気がつくことができました。
Slackでの検出通知の様子
Slackでの通知は次のような具合。コスト発生の翌日には通知が飛んでおり、なかなか優秀に検出できています。
これによりIAM Access Analyzerのサービスでコストが急上昇したことがわかります。
ただし、今回のケースではサービス名よりも詳細な粒度の原因(Root cause)は空欄になっており、特定が必要です。
Cost Explorerで原因調査
根本原因がわからなかった時に、コストに関する調査に活躍するのはCost Explorerです。
先ほどのコスト異常結果表示の画面からCost Explorerで関連するコストのみを表示する画面に飛ぶことができますので、そこから移動します。
するとCost Explorerでは次のような画面になりました。
- 該当のコスト異常の発生日を含む1ヶ月間
- 日別表示
- 該当のサービス(今回は、”Identity and Access management Access Analyzer”)のみを表示
という具合でしょうか。
残念ながらこれだと月初の数日に急にコストが発生したという、すでにわかっている情報しか分かりません。
そのため、Dimensionを切り替えながらコストの詳細を特定していきます。
Serviceを選択。
Identity and Access Management Access Analyzer
なのは当然ですね。新しい情報がありません。
次に、Usage Typeを選択。
APN1-AccessFinding-Monitored-IAM-Resources
と表示されました。なるほど”APN1″の表記がありますね。東京リージョンでコストが発生してそうです。
次に、API operationを選択。
UnusedAccessAnalysis
と表示されました。
なるほど、冒頭に書きました「未使用のアクセス権用のアナライザー」によるコスト発生のようですね。
では、なぜこのようなコストが発生したのかコスト体系を見てみましょう
IAM Access Analyzerの「未使用のアクセス権用のアナライザー」の料金体系
IAM Access Analyzerの詳細な動作の解説は冒頭のAWSブログの記事に任せるのですが、「未使用のアクセス権用のアナライザー」の基本的な動きとして
- スキャン対象(該当のアカウント / Organization内全体)を決めてオンにする(”Analyzer”を作成する)
- Analyzerによってスキャン後未使用のアクセスが検出されたら随時一覧に表示されてくる
というような動きをします。
そして、
IAM Access Analyzerの料金ページには今回の「未使用のアクセス権用のアナライザー」の料金については次のように書いてあります。
料金表 | 料金 |
---|---|
1 か月あたりに分析された IAM ロールとユーザーの数 | USD 0.20 /分析された IAM ロールまたはユーザー/月 |
https://aws.amazon.com/jp/iam/access-analyzer/pricing/
また、ドキュメントにも次のような記述があります。
IAM Access Analyzer では、外部アクセスの検出結果については無料で提供されますが、未使用のアクセスの結果については 1 か月あたりにアナライザーごとに分析された IAM ロールとユーザーの数に基づいて料金が発生します。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access-analyzer-findings.html
「オンにしておいて対象の中のIAMリソースを継続的に分析していく。そしてその際にはリソース数に応じて料金が発生する」という課金体系というわけですね。
そして、それがAWS利用料として計上されるのが毎月の月初だったというわけですね
多すぎるユーザー数がコストの原因だった
上記の料金体系を踏まえると何かIAMリソースが存在するだけでも料金発生の理由となりそうですが、、、心当たりがありました。
「未使用のアクセス権用のアナライザー」の検出結果の画面は次のような具合でした。
以前、テスト用にIAMユーザーを一時的に50作っており、それが残ったままだったのです。
これら残ったままだったことで50ユーザー×0.2ドル=10ドルの無駄なコストが毎月発生するようになっていたわけです。もったいない。
(直ちに削除して、翌月からはコストが減っていました。)
IAM Access Analyzerのコストをセキュリティ改善の推進力にする
以上を踏まえまして、IAM Access Analyzerはどう活用すればいいのでしょうか。
IAM Access Analyzerを使うことで分析のためのコストが発生するようになります。これはIAMリソースが存在しているだけでは発生していなかったコストです。
しかし、「退職者の権限が残っていたことによる不正アクセス」や「不要な権限が悪用された場合のリスク」のようなセキュリティインシデントが発生したときには、より重大な損失を生む可能性があります。
IAM Access Analyzerを活用して、未使用アクセスを検出するのにかかるコストはセキュリティを向上するための投資と言えるでしょう。
そして、いらないIAMリソースを削除すればするほど、セキュリティが向上しながら利用料のコストも下がるというわかりやすい動機づけも働く構造にちょうどなっています。
言い方を変えれば、不要なIAMリソースを削除するたびにセキュリティが向上し、コストも低減するという好循環を生み出せるわけで、
- 「リスク低減のための先行投資」
と位置付けて積極的に活用していけると良いでしょう。
今回、コストきっかけで改善をしたわけですが、セキュリティの向上にもつながることに気付かされた良い経験でした。
参考リンク
AWSコスト異常検出(AWS Cost Anomaly Detection):
https://aws.amazon.com/jp/aws-cost-management/aws-cost-anomaly-detection/
AWSブログ・Access Analyzerの機能解説記事: