通过邀请管理 GuardDuty 账户 - Amazon GuardDuty
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

通过邀请管理 GuardDuty 账户

要管理您的组织外部的账户,可以使用传统邀请方法。使用此方法时,如果其他账户接受您的邀请成为成员账户,您的账户将被指定为管理员账户。

如果您的账户不是管理员账户,则可以接受来自其他账户的邀请。接受邀请后,您的账户将成为成员账户。一个 Amazon 账户不能同时是 GuardDuty 管理员账户和成员账户。

通过邀请关联的账户与通过 Amazon Organizations 关联的账户具有相同的总体管理员对成员关系,如 了解 GuardDuty 管理员和成员账户之间的关系 中所述。但是,邀请管理员账户用户不能代表关联的成员账户启用 GuardDuty,也不能查看其 Amazon Organizations 组织内的其他非成员账户。

重要

当 GuardDuty 使用此方法创建成员账户时,可能会发生跨区域数据传输。为了验证成员账户的电子邮件地址,GuardDuty 将使用仅在美国东部(弗吉尼亚州北部)区域运营的电子邮件验证服务。

通过邀请添加和管理账户

选择一种访问方法,以 GuardDuty 管理员的身份添加并邀请账户成为 GuardDuty 成员账户。

Console
步骤 1:添加账户
  1. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

  2. 在导航窗格中,选择 Accounts (账户)

  3. 在顶部窗格中选择通过邀请添加账户

  4. 添加成员账户页面的输入账户详细信息下,输入与要添加的账户关联的 Amazon Web Services 账户 ID 和电子邮件地址。

  5. 要添加另一行,以便逐个输入账户详细信息,请选择添加其他账户。您也可以选择上传包含账户详细信息的.csv 文件来批量添加账户。

    重要

    csv 文件的第一行必须包含以下标头,如以下示例所示:Account ID,Email。随后的每一行都必须包含一个有效的 Amazon Web Services 账户 ID 及其关联的电子邮件地址。如果一行仅包含一个 Amazon Web Services 账户 ID 和用逗号分隔的关联电子邮件地址,则该行的格式是有效的。

    Account ID,Email 555555555555,user@example.com
  6. 添加所有账户的详细信息后,选择下一步。您可以在账户表中查看新添加的账户。这些账户的状态未发送邀请。有关向一个或多个添加的账户发送邀请的信息,请参阅 Step 2 - Invite an account

步骤 2:邀请账户
  1. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

  2. 在导航窗格中,选择 Accounts (账户)

  3. 选择一个或多个您要邀请加入 Amazon GuardDuty 的账户。

  4. 选择操作下拉菜单,然后选择邀请

  5. 邀请加入 GuardDuty 对话框中,输入(可选)邀请消息。

    如果受邀请的账户无法访问电子邮件,请选中同时向受邀者的 Amazon Web Services 账户 上的根用户发送电子邮件通知,并在受邀者的 Amazon Health Dashboard 中生成警报

  6. 选择 Send invitation (发送邀请)。如果受邀者有权访问指定的电子邮件地址,则可以打开 GuardDuty 控制台查看邀请:https://console.aws.amazon.com/guardduty/

  7. 受邀者接受邀请后,状态列中的值将变为已邀请。有关接受邀请的信息,请参阅 Step 3 - Accept an invitation

步骤 3:接受邀请
  1. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

    重要

    您必须先启用 GuardDuty,然后才能查看或接受成员资格邀请。

  2. 仅在尚未启用 GuardDuty 的情况下执行以下操作;否则,可以跳过此步骤,继续下一步。

    如果您尚未启用 GuardDuty,请在 Amazon GuardDuty 页面上选择开始

    欢迎使用 GuardDuty 页面上,选择启用 GuardDuty

  3. 为您的账户启用 GuardDuty 后,请按照以下步骤接受成员资格邀请:

    1. 在导航窗格中,选择 Settings (设置)

    2. 选择 账户

    3. 账户上,确保验证您接受邀请的账户的所有者。打开接受以接受成员资格邀请。

  4. 接受邀请后,您的账户将成为 GuardDuty 成员账户。其所有者发送邀请的账户将成为 GuardDuty 管理员账户。管理员账户就会知道您已接受邀请。其 GuardDuty 账户中的账户表将会更新。与您的成员账户 ID 对应的状态列中的值将变为已监控。管理员账户所有者现在可以代表您的账户查看和管理 GuardDuty 和保护计划配置。管理员账户还可以查看和管理为您的成员账户生成的 GuardDuty 调查发现。

API/CLI

您可以指定 GuardDuty 管理员,并使用 API 操作通过邀请创建或添加 GuardDuty 成员账户。运行以下 GuardDuty API 操作,以便在 GuardDuty 中指定管理员和成员账户。

使用您要指定为 GuardDuty 管理员账户的 Amazon Web Services 账户 凭证完成以下过程。

创建或添加成员账户
  1. 使用启用了 GuardDuty 的 Amazon 账户的凭证运行 CreateMembers API 操作。这是要用作管理员 GuardDuty 账户的账户。

    您必须指定当前 Amazon 账户的检测器 ID 以及要成为 GuardDuty 成员的账户的账户 ID 和电子邮件地址。可以使用此 API 操作创建一个或多个成员。

    您还可以使用 Amazon 命令行工具,通过运行以下 CLI 命令来指定管理员账户。务必使用您自己的有效探测器 ID、账户 ID 和电子邮件。

    您可以在 https://console.aws.amazon.com/guardduty/ 控制台的设置页面上,找到自己当前区域的 detectorId

    aws guardduty create-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-details AccountId=111122223333,Email=guardduty-member@organization.com
  2. 使用启用了 GuardDuty 的 Amazon 账户的凭证运行 InviteMembers。这是要用作管理员 GuardDuty 账户的账户。

    您必须指定当前 Amazon 账户的检测器 ID 以及要成为 GuardDuty 成员的账户的账户 ID。可以使用此 API 操作邀请一个或多个成员。

    注意

    您也可以使用 message 请求参数指定可选的邀请消息。

    您还可以通过运行以下命令,使用 Amazon Command Line Interface 来指定成员账户。务必使用您自己的有效探测器 ID,以及您要邀请的账户的有效账户 ID。

    您可以在 https://console.aws.amazon.com/guardduty/ 控制台的设置页面上,找到自己当前区域的 detectorId

    aws guardduty invite-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-ids 111122223333
接受邀请

使用要指定为 GuardDuty 成员账户的每个 Amazon 账户的凭证完成以下过程。

  1. 对受邀成为 GuardDuty 成员账户且您希望接受邀请的每个 Amazon 账户运行 CreateDetector API 操作。

    必须指定是否使用 GuardDuty 服务启用检测器资源。必须创建并启用检测器才能使 GuardDuty 正常运行。您必须先启用 GuardDuty,然后才能接受邀请。

    您也可以使用 Amazon 命令行工具,通过以下 CLI 命令完成此操作。

    aws guardduty create-detector --enable
  2. 对于要使用账户凭证接受成员资格邀请的每个 Amazon 账户,运行 AcceptAdministratorInvitation API 操作。

    您必须为成员账户指定该 Amazon 账户的检测器 ID、发送邀请的管理员账户的账户 ID 以及您接受的邀请的邀请 ID。您可以在邀请电子邮件中或使用 API 的 ListInvitations 操作查找管理员账户的账户 ID。

    您也可以使用 Amazon 命令行工具,通过运行以下 CLI 命令接受邀请。务必使用有效的检测器 ID、管理员账户 ID 和邀请 ID。

    您可以在 https://console.aws.amazon.com/guardduty/ 控制台的设置页面上,找到自己当前区域的 detectorId

    aws guardduty accept-invitation --detector-id 12abc34d567e8fa901bc2d34e56789f0 --administrator-id 444455556666 --invitation-id 84b097800250d17d1872b34c4daadcf5

将 GuardDuty 管理员账户合并到单个组织委托管理员下

GuardDuty 建议使用关联通过 Amazon Organizations 来管理委托管理员账户下的成员账户。您可以使用下面概述的示例流程,将组织中通过邀请关联的管理员和成员合并到单个 GuardDuty 委托管理员下。

注意

不能将由委托管理员管理的账户或与委托管理员账户关联的活跃成员账户添加到其他 GuardDuty 委托管理员账户。每个组织每个区域只能有一个 GuardDuty 委托管理员账户,每个成员账户只能有一个委托管理员。

选择一种访问方法,将 GuardDuty 管理员账户合并到单个委托管理员下。

Console
  1. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

    若要登录,请使用组织的管理账户凭证。

  2. 您用来管理 GuardDuty 的所有账户必须属于您的组织。有关向组织添加账户的信息,请参阅邀请 Amazon Web Services 账户 加入组织

  3. 确保所有成员账户都与要指定为单个委托管理员的账户关联。取消关联仍与原有管理员账户关联的成员账户。

    以下步骤可帮助您取消成员账户与原有管理员账户的关联:

    1. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

    2. 若要登录,请使用原有管理员账户凭证。

    3. 在导航窗格中,选择 Accounts (账户)

    4. 账户页面上,选择一个或多个要与管理员账户取消关联的账户。

    5. 选择操作,然后选择取消关联账户

    6. 选择确认以完成该步骤。

  4. 通过以下网址打开 GuardDuty 控制台:https://console.aws.amazon.com/guardduty/

    若要登录,请使用管理账户凭证。

  5. 在导航窗格中,选择 Settings (设置)。在设置页面上,为组织指定 GuardDuty 委托管理员。

  6. 登录到指定的委托管理员账户。

  7. 添加组织中的成员。有关更多信息,请参阅使用 Amazon Organizations 管理 GuardDuty 账户

API/CLI
  1. 您用来管理 GuardDuty 的所有账户必须属于您的组织。有关向组织添加账户的信息,请参阅邀请 Amazon Web Services 账户 加入组织

  2. 确保所有成员账户都与要指定为单个委托管理员的账户关联。

    1. 运行 DisassociateMembers 以取消关联仍与原有管理员账户关联的成员账户。

    2. 或者,您可以使用 Amazon Command Line Interface 运行以下命令,将 777777777777 替换为您要取消成员账户关联的原有管理员的检测器 ID。将 666666666666 替换为您要取消关联的成员账户的 Amazon Web Services 账户 ID。

      aws guardduty disassociate-members --detector-id 777777777777 --account-ids 666666666666
  3. 运行 EnableOrganizationAdminAccount 以委派 Amazon Web Services 账户 作为 GuardDuty 委托管理员。

    或者,您可以使用 Amazon Command Line Interface 运行以下命令来委派 GuardDuty 委托管理员:

    aws guardduty enable-organization-admin-account --admin-account-id 777777777777
  4. 添加组织中的成员。有关更多信息,请参阅Create or add member member accounts using API

重要

记住,GuardDuty 是一项区域性服务。建议您指定委托管理员账户并添加每个区域的所有成员,以最大限度地提高 GuardDuty 的效率。

同时在多个账户中启用 GuardDuty

使用以下方法可同时在多个账户中启用 GuardDuty。

使用 Python 脚本同时在多个账户中启用 GuardDuty

您可以使用 GitHub 上的示例存储库中的脚本在多个账户上自动启用或禁用 GuardDuty:https://github.com/aws-samples/amazon-guardduty-multiaccount-scripts。按照本部分中介绍的过程操作,使用 Amazon EC2 为成员账户列表启用 GuardDuty。有关使用禁用脚本或在本地设置该脚本的信息,请参阅 GitHub 说明。

enableguardduty.py 脚本会启用 GuardDuty,从管理员账户发送邀请,并接受所有成员账户的邀请。这样可得到一个 GuardDuty 账户,其中包含所有成员账户的所有安全调查发现。由于 GuardDuty 是按区域隔离的,因此每个成员账户的调查发现都会汇总到管理员账户中的相应区域。例如,GuardDuty 管理员账户中的 us-east-1 区域包含来自所有关联成员账户的所有 us-east-1 调查发现的安全调查发现。

这些脚本依赖于具有托管策略 Amazon 托管策略:AmazonGuardDutyFullAccess 的共享 IAM 角色。此策略为实体提供了对 GuardDuty 的访问权限,并且必须存在于管理员账户上以及要启用 GuardDuty 的每个账户中。

默认情况下,以下过程将在所有可用区中启用 GuardDuty。只有使用可选的 --enabled_regions 参数并提供以逗号分隔的区域列表,才能在指定的区域启用 GuardDuty。您还可以选择通过打开 enableguardduty.py 并编辑 gd_invite_message 字符串,自定义发送给成员账户的邀请消息。

  1. 在 GuardDuty 管理员账户中创建一个 IAM 角色,并附加 Amazon 托管策略: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. 创建一个 CSV 文件,其中包含您在步骤 2 中将角色添加到的成员账户的账户 ID 和电子邮件的列表。必须每行显示一个账户,账户 ID 和电子邮件地址必须用逗号分隔,如以下示例中所示。

    111122223333,guardduty-member@organization.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 444455556666 --assume_role roleName accountID.csv