IAM Access Analyzer Unused Access の利用料を組織全体で見積もる方法

記事タイトルとURLをコピーする

セキュリティサービス部 佐竹です。
本ブログは、IAM の最小権限を実現するためのセキュリティサービスである IAM Access Analyzer について、その中でも特に有用である「Unused Access (未使用アクセス)」機能の利用料に関するブログです。AWS Organizations 環境で有効化すると高額になりそうで怖い…という場合に、事前に組織全体の利用料を見積もる方法について解説します。

はじめに

本ブログは、ストーリーとしては以下のブログの続きです。

blog.serverworks.co.jp

「GuardDuty Extended Threat Detection」による検出を受け、IAM アクセスキーの棚卸が必要になった。そのようなストーリーでお読みいただければ、より「置かれた状況」が把握できると存じます。

最初に結論

まず先に結論を述べると、AWS Resource Explorer を使うことで正確なリソース数が把握でき、見積りが可能になります。

IAM Access Analyzer Unused Access とは

IAM Access Analyzer の Unused Access Analyzer は、IAM ロールとユーザーの未使用のアクセスを継続的に監視し、その検出結果を生成してくれる機能です。これによりセキュリティのベストプラクティスである「最小特権の原則」を達成することを目標としています*1

  • AWS ドキュメント:SEC03-BP02 最小特権のアクセスを付与します

docs.aws.amazon.com

IAM Access Analyzer Unused Access では、具体的に以下のようなリソースを特定するのに役立ちます。

  • Unused access keys: 長期間使われていない IAM ユーザーのアクセスキー
  • Unused passwords: 長期間使われていない IAM ユーザーのパスワード
  • Unused roles: 長期間使われていない IAM ロール
  • Unused permissions: 未使用のサービス権限やIAMポリシー*2

マネジメントコンソールの表示としては以下のようになっています。

Findings overview

なお「長期間 (=Tracking period)」というのは設定次第で変更が可能です。7日間でも構いません。90日でも、180日でも構いません*3

そして IAM Access Analyzer Unused Access は、Amazon GuardDuty でアクセスキーの侵害が検出された際など、組織全体で「他に古いアクセスキーが残っていないか?」を棚卸しするのに利便性の高いツールです。

IAM Access Analyzer Unused Access の利用料金

本機能は大変便利なのですが、料金体系には注意が必要です。AWS の公式ドキュメント(料金ページ)には以下のように記載されています。

1 か月あたりに分析された IAM ロールとユーザーの数 : USD 0.20 /分析された IAM ロールまたはユーザー/月

https://aws.amazon.com/jp/iam/access-analyzer/pricing/

ポイントは、分析対象が IAM ロールとユーザーである点です。つまり、分析を有効化すると、IAM ロールとユーザーの合計数に対して課金が発生します。

組織全体の利用料を見積もる

さてここから表題の通り、見積もりの話です。

まず基本として、IAM Access Analyzer のコンソールには「組織全体で有効化した場合にいくらかかるか」を事前に試算してくれる機能は残念ながらありません。

と言って「えいやっ!」で有効化したとすると、大変な目に合うかも知れません。「こ、こんなはずでは…(利用料↑)」となるのを避けるため、事前に組織内の IAM ロールとユーザーの総数を把握する必要があります。

ここで活躍するのが AWS Resource Explorer です。

AWS Resource Explorer のセットアップ

AWS Resource Explorer は、組織(AWS Organizations)内の全アカウント&全リージョンのリソースを横断的に検索できるサービスです。

本機能のセットアップについては、以前のブログで詳細に解説しています。

blog.serverworks.co.jp

マルチアカウント検索を事前に有効化し、組織全体のリソースを検索できるビュー(上記での「ブログでの例: Organization-wide-View)を作成してください。

そして、ここからは AWS Resource Explorer の実際の使い方です。

AWS Resource Explorer でリソース数をカウントする

セットアップが完了したら、Resource Explorer のコンソールで組織全体の IAM ロールと IAM ユーザーの数を実際に確認します。上記のブログ内で「リソースの存在確認には有用」と書きましたが、まさにこの通りの使い方です。

1. IAM ロールと IAM ユーザーの総数を確認する

まず、組織全体の IAM ロールと IAM ユーザーの合計数を調べます。 Resource Explorer の検索クエリに以下のように入力します。

Resource type = iam:role, iam:user

私の管理するとある社内組織で検索したところ、8,988 件のリソースがヒットしました。

これだけで見積もりは可能ですが、今回は IAM ユーザー単独の数も数えてみます。

2. IAM ユーザーの総数を確認する

次に、今回の調査で本当に知りたい IAM ユーザーの数も単独で調べます。

というのは、真に棚卸をしたいのは IAM ユーザーだからです

先に記載した通り、目的はインシデント発生後のアクセスキーの棚卸であり、「古いアクセスキーが残っていないか?」ということを調べることです。

この時、対象は IAM ユーザーに付随して作成される IAM アクセスキーになります。つまり、IAM ユーザーがあればそこにアクセスキーが潜んでいる可能性があるということです。ですので、IAM ユーザーも調べてみます。

Resource type = iam:user で調査します。

結果は 802 件でした。

見積り結果とコストの試算

Resource Explorer による調査で、以下の事実が判明しました。

  • IAM ロールと IAM ユーザーの総数: 8,988 件
  • IAM ユーザーの数: 802 件
  • (その差分)IAM ロールの数: 8,988 - 802 = 8,186 件

この数字を料金体系に当てはめて月額費用を試算します。

8,988 リソース × $0.20/リソース/月 = $1,797.60 (月額)

日本円($1 = 150円換算)で約27万円/月となりました。

アクセスキーの棚卸しのために一時的に有効化するとしても、かなりのコストインパクトです。見積もっておいて、良かったですね。

さて、ここで疑問に思います。何故こんなにも IAM ロールが多くなるのか?

それは IAM ロールが、IAM Access Analyzer Unused Access のコストを跳ね上げている原因だからです。

なぜこれほど IAM ロールが多くなるのか

コストの大部分(8,186件分)を占めているのは IAM ロールです。 先に記載した通り、今回の調査で本当に棚卸ししたいと考えていた対象は、侵害の危険がある 802 件の IAM ユーザー(に紐づく各アクセスキー)のみでした。

では、なぜこれほど大量の IAM ロールが存在するのでしょうか?

これは、AWS Organizations 環境で AWS の各種サービスを有効化する際に、自動生成されるロールが原因です。先ほどの Resource Explorer による調査結果をダウンロードして Pivot テーブルで分析してみました。

Excel で分析

まず、以下のリソースが「127」ずつあることが確認できます。

  1. AWSServiceRoleForOrganizations
  2. AWSServiceRoleForCostOptimizationHub
  3. AWSServiceRoleForSecurityLake
  4. AWSServiceRoleForAmazonSSM
  5. AWSServiceRoleForIPAM
  6. AWSServiceRoleForCloudTrail
  7. AWSServiceRoleForResourceExplorer
  8. AWSServiceRoleForComputeOptimizer
  9. AWSServiceRoleForSSMQuickSetup
  10. AWSServiceRoleForSupport
  11. AWSServiceRoleForTrustedAdvisor

これらは AWS のサービスを組織レベルで使う時に自動的に作成される IAM ロールであり、これは各 AWS アカウントごとに強制的に1つ作成されます。

11種×127アカウント=1397 です。Unused Access Analyzer を使うと、これらの IAM ロールにもコストが発生してしまいます。

  1. AWS-QuickSetup-ResourceExplorerRole-izd6m-us-east-1
  2. AWS-QuickSetup-ResourceExplorerRole-izd6m-us-west-2
  3. AWS-QuickSetup-ResourceExplorerRole-izd6m-ap-northeast-1
  4. AWS-QuickSetup-ResourceExplorerRole-izd6m-eu-north-1
  5. AWS-QuickSetup-ResourceExplorerRole-izd6m-us-west-1
  6. AWS-QuickSetup-ResourceExplorerRole-izd6m-eu-west-2
  7. AWS-QuickSetup-ResourceExplorerRole-izd6m-sa-east-1
  8. AWS-QuickSetup-ResourceExplorerRole-izd6m-ca-central-1
  9. AWS-QuickSetup-ResourceExplorerRole-izd6m-eu-central-1
  10. AWS-QuickSetup-ResourceExplorerRole-izd6m-us-east-2
  11. AWS-QuickSetup-ResourceExplorerRole-izd6m-eu-west-1
  12. AWS-QuickSetup-ResourceExplorerRole-izd6m-ap-south-1
  13. AWS-QuickSetup-ResourceExplorerRole-izd6m-eu-west-3
  14. AWS-QuickSetup-ResourceExplorerRole-izd6m-ap-southeast-1
  15. AWS-QuickSetup-ResourceExplorerRole-izd6m-ap-southeast-2
  16. AWS-QuickSetup-ResourceExplorerRole-izd6m-ap-northeast-2

次にこれらは何でしょうか?これは、Resource Explorer をマルチアカウント検索で使うために作られたロールです。CFn のスタックで作成されるこれらは、各リージョンごとに作成されるという仕様のため、「アカウント数×有効化されているリージョン」の数に膨れ上がります。

16リージョン×126アカウント = (およそ) 2016 です*4

このように、組織でマルチアカウント戦略を行うと、大量に IAM ロールが自動生成されることがわかります。

さてこれらは記載した通り AWS によって管理・使用されるものであり、AWS を信用する前提であれば、今回の「アクセスキー棚卸し」という観点では分析の優先度は低くなります。

しかし、IAM Access Analyzer はこれらも課金対象としてカウントしてしまいます*5

余談:SSM デフォルトホスト管理設定について

AWS Systems Manager のデフォルトホスト管理設定(Default Host Management Configuration setting)を利用した場合も、Resource Explorer をマルチアカウント検索で使うために作られたロール同様に、各リージョンごとに IAM ロールが作成されます。しかも2つ。倍です

これについては、以下のブログでも詳しく解説しています。

blog.serverworks.co.jp

こちらも是非ご参考ください。

IAM ユーザーのみを分析対象とする方法は存在しない

この高額な費用を回避するため、「IAM ユーザーだけを分析対象にできないか?」と AWS サポートに確認しましたが、以下の回答でした。

1. サービス機能での絞り込み(結論としては不可能)

できません

2025年11月現在、IAM Access Analyzer Unused Access の分析対象をリソースタイプ(IAM User or IAM Role)で絞り込む機能は提供されていません。

これは機能リクエストとしてフィードバック済みです。

2. タグによる除外(実際問題として非現実的)

「タグ」を使って特定のリソースを分析から「除外」する機能は存在します。

In the Exclude IAM users and roles with tags section, you can specify key-value pairs for IAM users and roles to exclude from unused access analysis. Findings will not be generated for excluded IAM users and roles that match the key-value pairs.

https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-create-unused.html

しかし、これは「分析対象にしたくないリソース」すべて(今回の場合は 8,186 件のロール)に、我々が手動またはスクリプトで特定のタグを付与していく必要があります。

AWS が自動生成した大量のロールに一つ一つタグ付けして回るのは、非常に手間がかかり、現実的な運用とは言えません。

3. コストを最適化する選択肢

以上のことから、我々が取れる選択肢は以下の2つです。

  • A. 費用を許容し、一時的に有効化する
    • 月額 $1,797.60 のコストを受け入れ、例えば調査が必要な1か月間だけ有効化する
    • AWS 利用料は発生しますが、作業工数は最小限で済み、自動で分析結果が得られます。
    • 補足: IAM Access Analyzer の月額は、日割りが行われません。仮に機能を有効化した状況で、10月30日に新しい IAM ユーザーを作成した場合、$0.2 がそのタイミングで月額として課金されます。
  • B. 手動で棚卸しを行う
    • Resource Explorer で IAM ユーザーが存在する AWS アカウントを特定します。
    • 各 AWS アカウントにのみ手動でログインし、それぞれ「IAM 認証情報レポート」をダウンロードします*6
    • 取得したレポート(CSV)を集約し、アクセスキーの有無や最終使用日を確認します。
    • AWS 利用料は発生しませんが、人的リソースが稼働するため先の方法よりも単純に「作業工数」がかかります。

Credentials report of IAM users in this account

どちらが棚卸時に推奨される方法なのか?

一概に正解はありませんが、IAM Access Analyzer Unused Access を期間限定で実行するのが早道でしょう。特に指定の期間(例:365日に指定)の間、利用されなかったアクセスキーを一覧にできる上に、その他「長期間使われていない IAM ユーザーのパスワード」なども合わせて棚卸できるためです。

ですが、IAM Access Analyzer Unused Access を意図せず長期間有効化した場合には、利用料が継続するため、一時的な利用時にはその機能をオフにする事後対応を忘れずに行うことが肝要であり、それを漏らすとコストが跳ね上がる点には要注意です。

まとめ

Findings overview(再掲)

本ブログでは、IAM の最小権限を実現するためのサービスである IAM Access Analyzer に関して、その中でも「Unused Access (未使用アクセス)」機能の利用料を「事前に」「組織を横断して」見積もる方法を記載しました。

IAM Access Analyzer Unused Access は非常に強力なセキュリティ監査ツールですが、AWS Organizations 環境で利用する場合、自動生成される大量の IAM ロールによって想定外の高額請求につながる可能性があります。

利用を検討する際は、まず AWS Resource Explorer を使用し、Resource type = iam:role, iam:user のクエリを実行し、組織内の IAM プリンシパル(ユーザーとロール)の総数を把握してください。その総数に $0.20 を乗じることで、月額の最大コストを試算できます。

この見積りの金額と、手動(クレデンシャルレポート)で棚卸しする工数を天秤にかけ、どちらの方式で監査を進めるかをご判断いただくのが良いでしょう。

そして最後に念のための大事な話なのですが...、AWS Resource Explorer は無料です。良い機能ですね。

ただし、先にも記載した通り Resource Explorer が作成する IAM ロールも Unused Access の課金対象であるため、試算が完了した後に Resource Explorer を使う予定がない場合は、Unused Access を有効化される前に Resource Explorer のセットアップを削除されたほうが、コスト最適化の視点ではコストパフォーマンスが高くなるでしょう。

では、またお会いしましょう。

*1:IAM Access Analyzer Unused Access はマネコン上では IAM Access Analyzer の Unused Access となっているのですが、機能説明としては Unused Access Analyzer として記載されていたりします。ここでは基本的には、IAM Access Analyzer Unused Access という表記を使っていきます

*2:Roles with unused permissions 及び Users with unused permissions が該当

*3:初期設定で行うことが可能な指定範囲は「1~365 days」です。なお Analyzer を作成した後に Edit ができないのは不便だなと思ったりします

*4:先の 127 のアカウント数とズレているのですが一旦ここでは重要ではないので、細かい数字はスルーしてください

*5:逆説的に Unused Access を利用する場合には、Resource Explorer のクイックセットアップを先に消してしまう、というのもコスト最適化の観点では有用と思われます

*6: AWS アカウント の認証情報レポートを生成 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_getting-report.html

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

セキュリティサービス部所属。AWS資格全冠。2010年1月からAWSを業務利用してきています。主な表彰歴 2021-2022 AWS Ambassadors/2020-2025 Japan AWS Top Engineers/2020-2025 All Certifications Engineers。AWSのコスト削減やマルチアカウント管理と運用を得意としています。