招待による GuardDuty アカウントの管理 - Amazon GuardDuty

招待による GuardDuty アカウントの管理

組織外のアカウントを管理するには、従来の招待による方法を使用できます。この方法を使用する場合、他のアカウントが招待を承諾してメンバーアカウントになると、アカウントは管理者アカウントとして指定されます。

アカウントが管理者アカウントでない場合、他のアカウントからの招待を承諾することができます。招待を承諾すると、自分のアカウントはメンバーアカウントになります。1 つの AWS アカウントを同時に GuardDuty の管理者アカウントとメンバーアカウントにすることはできません。

GuardDuty 管理者とメンバーアカウントの関係 で説明されているように、招待によって関連付けられたアカウントは、全体的に AWS Organizations によって関連付けられたアカウントと同様に管理者とメンバーの関係性を持ちます。ただし、招待をした管理者アカウントのユーザーは、関連するメンバーアカウントに代わって GuardDuty を有効にしたり、AWS Organizations 組織内の他の非メンバーアカウントを表示することはできません。

重要

この方法で GuardDuty がメンバーアカウントを作成する場合、クロスリージョン内データ転送が発生することがあります。GuardDuty は、メンバーアカウントのメールアドレスを確認するために、米国東部 (バージニア北部) リージョンでのみ動作するメール検証サービスを使用しています。

招待による管理者およびメンバーアカウントの指定 (コンソール)

アカウントの追加、アカウントの招待、または別のアカウントからの招待の承諾の手順は次のとおりです。

ステップ 1 - アカウントを追加する

  1. https://console.aws.amazon.com/guardduty/ で GuardDuty コンソールを開きます。

  2. ナビゲーションペインで、[Accounts] (アカウント) を選択します。

  3. 上部のパネルで [Add accounts by invitation] (招待によってアカウントを追加) を選択します。

  4. [Add member accounts] (メンバーアカウントの追加) ページで、[Enter accounts] (アカウントの入力) に、追加するアカウントの AWS アカウント ID と E メールアドレスを入力します。その後、[Add] (追加) を選択します。

    重要

    このステップで指定する E メールアドレスは、GuardDuty メンバーアカウントとして追加する AWS アカウントに関連付けられた E メールアドレスと同一である必要があります。

    複数のアカウントを追加するには、ID と E メールアドレスを一度に 1 つずつ指定します。[Upload list (.csv)] (リストをアップロード (.csv)) を選択して、アカウントを一括追加することもできます。この機能は、一部のアカウントを招待してすぐに GuardDuty を有効にしたいが、他のアカウントは遅らせたい場合に便利です。

    重要

    次の例のように、CSV ファイルの 1 行目にヘッダー (Account ID,Email など) が含まれている必要があります。後続の各行には、追加するアカウントの 1 つの有効なアカウント ID と 1 つの E メールアドレスが含まれている必要があります。アカウントは 1 行に 1 つずつ記述し、アカウント ID と E メールアドレスはカンマで区切る必要があります。

    Account ID,Email 111111111111,user@example.com
  5. アカウントの追加が完了したら、[Next] (次へ) を選択します。

    追加したアカウントが [Accounts] (アカウント) ページに一覧表示されます。このリストに追加された各アカウントの [Status] (ステータス) 列には [Invite] (招待) リンクがあります。

ステップ 2: アカウントを招待する

  1. https://console.aws.amazon.com/guardduty/ で GuardDuty コンソールを開きます。

  2. ナビゲーションペインで、[Accounts] (アカウント) を選択します。

  3. GuardDuty を有効にするために招待するアカウントについて、追加されたアカウントリストの [Status] (ステータス) 列に表示される [Invite] (招待) リンクを選択します。

  4. [Invitation to GuardDuty] (GuardDuty への招待) ダイアログ ボックスで、招待メッセージ (オプション) を入力し、[Send notification] (通知の送信) を選択します。

    注記

    招待されたアカウントが E メールにアクセスできない場合は、招待状を送信する前に、[Also send an email notification to the root user on the invitee's AWS account and generate an alert in the invitee's Personal Health Dashboard] (また、招待者のアカウントのルートユーザーに E メール通知が送信され、招待者の Personal Health Dashboard にアラートが生成されます) を選択します。

    招待したアカウントの [Status] (ステータス) 列の値が [Pending] (保留中) に変わります。

ステップ 3 - 招待を受け入れる

  1. https://console.aws.amazon.com/guardduty/ で GuardDuty コンソールを開きます。

  2. GuardDuty を有効にしていない場合は、[Enable GuardDuty] (GuardDuty の有効化) ページで [Enable GuardDuty] (GuardDuty の有効化) を選択します。

    重要

    メンバーシップ招待を承諾する前に GuardDuty を有効にする必要があります。

  3. GuardDuty を有効にしている場合は、次の手順を実行します。

    1. ナビゲーションペインで [Settings] (設定) を選択します。

    2. [Accounts] (アカウント) を選択します。

    3. 受け入れたアカウントの所有者を確認します。[ACCEPT] (受け入れる) を選択して招待を受け入れます。

  4. 招待を承諾すると、GuardDuty のメンバーアカウントになります。招待を送信した所有者のアカウントが GuardDuty 管理者アカウントになります。管理者アカウントの所有者は、メンバーアカウントの [Status] (ステータス) 列の値が [Monitored] (モニタリング) に変わったことを確認できます。管理者アカウントの所有者は、メンバーアカウントの GuardDuty の検出結果を表示および管理できるようになりました。

招待による GuardDuty 管理者およびメンバーアカウントの指定 (API)

API オペレーションを使用した招待によって、GuardDuty の管理者アカウントとメンバーアカウントを指定することができます。GuardDuty の管理者アカウントとメンバーアカウントを指定するために、次の GuardDuty API オペレーションを実行します。

GuardDuty 管理者アカウントとして指定する AWS アカウントの認証情報を使用して、次の手順を実行します。

  1. AWS GuardDuty が有効になっているアカウントの認証情報を使用して、CreateMembers API オペレーションを実行します。これは、GuardDuty 管理者アカウントにするアカウントです。

    現在の AWS アカウントのディテクター ID と、GuardDuty メンバーにしたいアカウントの ID および E メールアドレスを指定する必要があります。この API オペレーションを使用して 1 名以上のメンバーを作成できます。

    また、AWS Command Line Tools を使用して、次の CLI コマンドを実行することで、管理者アカウントを指定することができます。自身の有効なディテクター ID、アカウント ID、E メールを使用してください。

    https://console.aws.amazon.com/guardduty/ コンソールの [Settings] (設定) ページで、または ListDetectors API を使用して、現在のリージョンの detectorId を確認できます。

    aws guardduty create-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-details AccountId=123456789012,Email=guarddutymember@amazon.com
  2. GuardDuty が有効になっている AWS アカウントの認証情報を使用して InviteMembers API オペレーションを実行します。これは、GuardDuty 管理者アカウントにするアカウントです。

    現在の AWS アカウントのディテクター ID と、GuardDuty のメンバーにするアカウントのアカウント ID を指定する必要があります。この API オペレーションにより 1 名以上のメンバーを招待できます。

    注記

    message リクエストパラメータを使用してオプションの招待メッセージを指定することもできます。

    AWS Command Line Tools を使用して、次の CLI コマンドを実行することで、メンバーアカウントを指定することもできます 招待するアカウントには、自身の有効なディテクター ID と有効なアカウント ID を使用してください。

    https://console.aws.amazon.com/guardduty/ コンソールの [Settings] (設定) ページで、または ListDetectors API を使用して、現在のリージョンの detectorId を確認できます。

    aws guardduty invite-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-ids 123456789012

GuardDuty メンバーアカウントとして指定する各 AWS アカウントの認証情報を使用して次の手順を実行します。

  1. GuardDuty メンバーアカウントとして招待され、招待を受け入れたい各 AWS アカウントに対して CreateDetector API オペレーションを実行します。

    GuardDuty サービスを使用してディテクターリソースを有効にするかどうかを指定する必要があります。GuardDuty が動作するためには、ディテクターを作成して有効にする必要があります。招待を承諾する前に、まず GuardDuty を有効にする必要があります。

    また、AWS Command Line Tools を使用して、次の CLI コマンドを実行しても可能です。

    aws guardduty create-detector --enable
  2. メンバーへの招待の承諾を求める AWS アカウントごとに、そのアカウントの認証情報を使用して AcceptInvitation API オペレーションを実行します。

    メンバーアカウントの場合はこの AWS アカウントのディテクター ID、招待を送った管理者アカウントの場合はアカウント ID、招待を承諾する場合は招待状 ID を指定する必要があります。管理者アカウントのアカウント ID は、招待メールで見つかります。または、API の ListInvitations オペレーションを使用して検索することもできます。

    AWS Command Line Tools を使用して、次の CLI コマンドを実行することで、招待を承諾することもできます。ディテクター ID、管理者アカウント ID、招待状 ID は必ず有効なものを使用してください。

    https://console.aws.amazon.com/guardduty/ コンソールの [Settings] (設定) ページで、または ListDetectors API を使用して、現在のリージョンの detectorId を確認できます。

    aws guardduty accept-invitation --detector-id 12abc34d567e8fa901bc2d34e56789f0 --master-id 12abc34d567e8fa901bc2d34e56789f0 --invitation-id 84b097800250d17d1872b34c4daadcf5

複数のアカウントで同時に GuardDuty を有効にする

次の方法を使用して、同時に複数のアカウントに対して GuardDuty を有効にします。

Python スクリプトを使用して複数のアカウントで同時に GuardDuty を有効にする

GitHub のサンプルリポジトリ (https://github.com/aws-samples/amazon-guardduty-multiaccount-scripts) にあるスクリプトを使用して、複数のアカウントで GuardDuty の有効化または無効化を自動化することができます。このセクションのプロセスを使用して、Amazon EC2 を使用しているメンバーアカウントのリストに対して GuardDuty を有効にします。disable スクリプトの使用またはローカルでのスクリプトの設定については、GitHub の説明を参照してください。

enableguardduty.py スクリプトは、GuardDuty を有効にし、管理者アカウントからの招待を送信し、すべてのメンバーアカウントで招待を承諾します。その結果、GuardDuty の管理者アカウントには、すべてのメンバーアカウントのすべてのセキュリティに関する検出結果が含まれるようになります。GuardDuty はリージョン別に分離されているため、各メンバーアカウントの検出結果は管理者アカウントの対応するリージョンにロールアップされます。例えば、GuardDuty 管理者アカウントの us-east-1 地域には、関連するすべてのメンバー アカウントのすべての us-east-1 に対するセキュリティ検出結果が含まれています。

これらのスクリプトは、マネージドポリシー AWS マネージドポリシー: AmazonGuardDutyFullAccess を使用する共有 IAM ロールに依存しています。このポリシーではエンティティに GuardDuty へのアクセスを許可します。また、このポリシーは管理者アカウントと、GuardDuty を有効にする各アカウントに適用される必要があります。

次のプロセスを実行すると、デフォルトで、使用可能なすべてのリージョンで GuardDuty が有効になります。オプションの --enabled_regions 引数を使用して、カンマで区切られたリージョンのリストを指定すると、特定のリージョンでのみ GuardDuty を有効にすることができます。オプションで、enableguardduty.py を開いて gd_invite_message 文字列を編集することで、メンバーアカウントに送信される招待メッセージをカスタマイズすることもできます。

  1. GuardDuty 管理者アカウントで IAM ロールを作成し、AWS マネージドポリシー: AmazonGuardDutyFullAccess ポリシーをアタッチして GuardDuty を有効にします。

  2. GuardDuty 管理者アカウントで管理したいメンバーアカウントごとに IAM ロールを作成します。このロールは、ステップ 1 で作成したロールと同じ名前を持つ必要があり、信頼できるエンティティとして管理者アカウントを許可し、前述の AmazonGuardDutyFullAccess マネージドポリシーが適用される必要があります。

  3. インスタンスがサービスのロールを引き受けることができるようにする次の信頼関係のあるロールをアタッチして、新しい Amazon Linux インスタンスを起動します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  4. 新しいインスタンスにログインし、次のコマンドを実行してそのインスタンスを設定します。

    sudo yum install git python sudo yum install python-pip pip install boto3 aws configure git clone https://github.com/aws-samples/amazon-guardduty-multiaccount-scripts.git cd amazon-guardduty-multiaccount-scripts sudo chmod +x disableguardduty.py enableguardduty.py
  5. ステップ 2 でロールを追加したメンバーアカウントのアカウント ID と E メールのリストを含む CSV ファイルを作成します。次の例のように、アカウントは 1 行に 1 つずつ記述し、アカウント ID と E メールアドレスはカンマで区切る必要があります。

    111111111111,user@example.com
    注記

    CSV ファイルは、enableguardduty.py スクリプトと同じ場所にあることが必要です。次の方法で、既存の CSV ファイルを Amazon S3 から現在のディレクトリにコピーできます。

    aws s3 cp s3://my-bucket/my_key_name example.csv
  6. Python スクリプトを実行します。引数として、GuardDuty 管理者アカウント ID、最初のステップで作成したロール名、および CSV ファイル名を必ず指定してください。

    python enableguardduty.py --master_account 111111111111 --assume_role roleName accountID.csv