IAM ルートユーザーのアクティビティを監視する - AWS 規範的ガイダンス

IAM ルートユーザーのアクティビティを監視する

Amazon Web Services、Mostefa Brougui

概要

各Amazon Web Services (AWS) アカウントにはルートユーザーが付いています。AWS Identity and Access Management (IAM) の「セキュリティベストプラクティス」として、ルートユーザーのみが実行可能なタスクに使用することをお勧めします。リスト全文は AWS アカウント管理参照ガイドの「ルートユーザー認証情報が必要なタスク」からご確認ください。ルートユーザーはすべての AWS リソースと請求情報に完全にアクセスできるので、このアカウントを使用せず、ルートユーザーの認証情報が侵害されている可能性があるアクティビティをモニタリングすることをお勧めします。

このパターンを使用して、IAM ルートユーザーをモニタリングする「イベント駆動型アーキテクチャ」を設定します。このパターンは、複数の AWS アカウント (スポークアカウント) をモニタリングし、管理とレポートを 1 つのアカウント (ハブアカウント) に集中させるハブアンドスポークソリューションを確立します。

IAM ルートユーザー認証情報が使用されると、Amazon CloudWatch と AWS CloudTrail は、それぞれログと証跡にアクティビティを記録します。スポークアカウントでは、Amazon EventBridge ルールによってハブアカウントの中央「イベントバス」にイベントが送信されます。ハブアカウントでは、EventBridge ルールがイベントを AWS Lambda 関数に送信します。この関数は、ルートユーザーアクティビティを通知する Amazon Simple Notification Service (Amazon SNS) トピックを使用します。

このパターンでは、AWS CloudFormation テンプレートにより、スポークアカウントにモニタリングサービスとイベント処理サービスをデプロイします。HashiCorp Terraform テンプレートにより、ハブアカウントにイベント管理サービスと通知サービスをデプロイします。

前提条件と制限

前提条件 

  1. AWS 環境に AWS リソースをデプロイする権限。

  2. CloudFormation スタックセットをデプロイするための権限。詳細については、「スタックセットオペレーションの前提条件」(CloudFormation ドキュメント) を参照してください。

  3. Terraform がインストール済みで、すぐに使用できます。詳細については、「AWSを開始する」 (Terraform ドキュメント)を参照してください。

  4. 各スポークアカウントの既存の証跡。詳細については、「AWS CloudTrail で開始する」 (CloudTrail ドキュメント) を参照してください。

  5. 証跡は CloudWatch Logs にイベントを送信するように設定されています。詳細については、「CloudWatch Logs へのイベント送信」(CloudTrail ドキュメント) を参照してください。

  6. ハブアンドスポークアカウントは AWS Organizations によって管理される必要があります。

アーキテクチャ

次の図は、実装の構成要素を示しています。

スポークアカウントでのイベント、ハブアカウントでのメール通知の作成
  1. IAM ルートユーザー認証情報が使用されると、CloudWatch と CloudTrail は、それぞれログと証跡にアクティビティを記録します。

  2. スポークアカウントでは、EventBridge ルールがハブアカウントの中央「イベントバス」にイベントを送信します。

  3. ハブアカウントでは、EventBridge ルールがイベントを Lambda 関数に送信します。

  4. Lambda 関数は、ルートユーザーのアクティビティを通知する Amazon SNS トピックを使用します。

ツール

AWS サービス

  • AWS CloudFormation を使用すると、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクル全体にわたってリソースを管理できます。

  • AWS CloudTrail」は、AWS アカウントのガバナンス、コンプライアンス、運用のリスクの監査をサポートします。

  • Amazon CloudWatch Logs」は、すべてのシステム、アプリケーション、AWS からのログを一元管理できるため、ログを監視して安全にアーカイブできます。

  • Amazon EventBridge」は、アプリケーションをさまざまなソースのリアルタイムデータに接続できるようにするサーバーレスイベントバスサービスです。たとえば、AWS Lambda 関数、API 宛先を使用する HTTP 呼び出しエンドポイント、または他の AWS アカウントのイベントバスなどです。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Notification Service (Amazon SNS)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。

ツールやサービス

  • Terraform」は、設定ファイル形式のコードを使用してクラウドインフラストラクチャとリソースをプロビジョニングし管理するための CLI アプリケーションです。

コードリポジトリ

このパターンのソースコードとテンプレートは、「GitHub リポジトリ」で利用できます。このパターンには次の 2 つのテンプレートがあります。

  • ハブアカウントにデプロイするリソースを含む Terraform テンプレート

  • スポークアカウントにスタックセットインスタンスとしてデプロイする CloudFormation テンプレート

リポジトリの全体構造は以下のようになっています。

.  |__README.md  |__spoke-stackset.yaml  |__hub.tf  |__root-activity-monitor-module      |__main.tf  # contains Terraform code to deploy resources in the Hub account      |__iam      # contains IAM policies JSON files          |__ lambda-assume-policy.json          # contains trust policy of the IAM role used by the Lambda function          |__ lambda-policy.json                 # contains the IAM policy attached to the IAM role used by the Lambda function      |__outputs  # contains Lambda function zip code

エピック セクションでは、テンプレートをデプロイする手順の詳細について説明します。

エピック

タスク説明必要なスキル

サンプルコードリポジトリを複製します。

  1. AWS IAM Root User Activity Monitor」リポジトリを開きます。

  2. ファイルリストの上にあるコードタブで [Code] を選択し、HTTPS URL をコピーします。

  3. コマンドラインインターフェースで、作業ディレクトリをサンプルファイルを保存する場所に変更します。

  4. 次のコマンドを入力します。

    git clone <repoURL>
AWS 全般

Terraform テンプレートを更新します。

  1. 組織 ID を取得します。手順については、「管理アカウントからの組織の詳細の表示」 (AWS Organizations ドキュメント) を参照してください。

  2. クローンしたリポジトリで、hub.tf を開きます。

  3. お使いの環境に対して以下のように適切な値で更新します。

    • OrganizationId — 組織 ID を追加します。

    • SNSTopicName — Amazon SNS トピックの名前を追加します。

    • SNSSubscriptions — Amazon SNS 通知の送信先となる E メールを追加します。

    • Region — リソースをデプロイする AWS リージョンコードを追加します。例えば、eu-west-1

    • Tags — タグを追加します。タグについて、詳しくは「Tagging AWS resources」(AWS General Reference) をご確認ください。

  4. hub.tf ファイルを保存して閉じます。

AWS 全般

リソースを AWS ハブアカウントにデプロイします。

  1. Terraform のコマンドラインインターフェイスで、クローンされたリポジトリのルートフォルダに移動し、次のコマンドを入力します。

    terraform init && terraform plan
  2. 出力を確認し、説明されたリソースを作成することを確認します。

  3. 次のコマンドを入力します。

    terraform apply
  4. プロンプトが表示されたら、yes を入力して展開を確認します。

AWS 全般
タスク説明必要なスキル

CloudFormation のテンプレートをデプロイします。

  1. AWS マネジメントコンソールにサインインし、「CloudFormation コンソール」を開きます。

  2. ナビゲーションペインから [StackSets] を選択します。

  3. [StackSets] ページの上部で [Create StackSet (StackSet の作成)] を選択します。

  4. 権限で、サービス管理権限を選択します。CloudFormation は、AWS Organizations が管理するターゲットアカウントへのデプロイに必要なアクセス許可を自動的に設定します。

  5. [前提条件 − テンプレートの準備] で、[テンプレートの準備完了] を選択します。

  6. [テンプレートの指定] で、[テンプレートファイルのアップロード] を選択します。

  7. [ファイルを選択] を選択し、複製されたリポジトリで spoke-stackset.yaml を選択します。

  8. [次へ] を選択します。

  9. [スタックの詳細の指定] ページで、スタックの名前を入力します。

  10. [パラメータ] で、ハブアカウントのアカウント ID を入力し、[次へ]を選択します。

  11. [StackSet オプションの設定] ページの [タグ] で、タグを追加します。

  12. [実行設定][非アクティブ] を選択して、[次へ] を選択します。

  13. [デプロイオプションの設定] ページで、スタックセットをデプロイする組織単位とリージョンを指定し、[次へ] を選択します。

  14. レビューページで、[AWS CloudFormation が IAM リソースを作成する可能性があることを認めます] を選択し、[送信] を選択します。CloudFormation がスタックセットのデプロイを開始します。

詳細については、「スタックセットの作成」(CloudFormation ドキュメント) を参照してください。

AWS 全般
タスク説明必要なスキル

ルートユーザーの認証情報を使用します。

  1. ルートユーザー認証情報を使用して、スポークアカウントまたはハブアカウントにサインインします。

  2. 指定したメールアカウントが Amazon SNS 通知を受信することを確認します。

AWS 全般

関連リソース

追加情報

Amazon GuardDuty」は、継続的なセキュリティ監視サービスで、ログを分析処理し、AWS 環境における予期せぬ不正な可能性のあるアクティビティを特定します。このソリューションに代わる方法として、GuardDuty を有効にすると、root ユーザーの認証情報が使用された場合に警告が表示されます。GuardDuty の検出結果は Policy:IAMUser/RootCredentialUsage であり、重要度はデフォルトで [低] です。詳しくは「Managing Amazon GuardDuty findings」をご確認ください。