

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Detective Python 脚本管理账户
<a name="detective-github-scripts"></a>

Amazon Detective 在 GitHub 存储库中提供了一组开源 Python 脚本[amazon-detective-multiaccount-scripts](https://github.com/aws-samples/amazon-detective-multiaccount-scripts)。这些脚本需要 Python 3。

您可以使用它们执行以下任务：
+ 启用跨区域的管理员账户 Detective。

  启用 Detective 后，您就可以向行为图分配标签值。
+ 在跨区域中，将成员账户添加到管理员账户的行为图中。
+ 可选择向成员账号发送邀请电子邮件。您还可以将请求配置为不发送邀请电子邮件。
+ 在跨区域中，从管理员账户的行为图中删除成员账户。
+ 禁用跨区域的管理员账户 Detective。当管理员账户禁用 Detective 时，每个区域中管理员账户的行为图都会被禁用。

## `enableDetective.py` 脚本概述
<a name="enabledetective-script-overview"></a>

`enableDetective.py` 脚本执行以下操作：

1. 在每个指定区域为管理员账户启用 Detective，前提是该管理员账户尚未在该区域启用 Detective。

   使用脚本启用 Detective 后，您就可以向行为图分配标签值。

1. 可选择从管理员账户向每个行为图的指定成员账户发送邀请。

   邀请电子邮件消息使用默认消息内容，无法自定义。

   您还可以将请求配置为不发送邀请电子邮件。

1. 自动接受成员账户的邀请。

   由于脚本会自动接受邀请，因此成员账户可以忽略这些消息。

   我们建议直接联系成员账户，通知他们自动接受邀请。

## `disableDetective.py` 脚本概述
<a name="disabledetective-script-overview"></a>

`disableDetective.py` 脚本会删除指定区域内管理员账户行为图中的指定成员账户。

此外，还提供了在指定区域内禁用管理员账户 Detective 的选项。

## 脚本所需的权限
<a name="github-scripts-permissions"></a>

这些脚本需要管理员帐户以及您添加或删除的所有成员帐户中预先存在的 AWS 角色。

**注意**  
所有账户中的角色名称必须相同。

IAM 策略[推荐的最佳做法](https://docs.aws.amazon.com/detective/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_service-with-iam-policy-best-practices)是使用范围最小的角色。要执行脚本中[创建图表](https://docs.aws.amazon.com/detective/latest/APIReference/API_CreateGraph.html)、[创建成员](https://docs.aws.amazon.com/detective/latest/APIReference/API_CreateMembers.html)和[向图中添加成员](https://docs.aws.amazon.com/detective/latest/APIReference/API_AcceptInvitation.html)的工作流程，所需的权限是：
+ 侦探：CreateGraph
+ 侦探：CreateMembers
+ 侦探：DeleteGraph
+ 侦探：DeleteMembers
+ 侦探：ListGraphs
+ 侦探：ListMembers
+ 侦探：AcceptInvitation

**角色信任关系**

角色信任关系必须允许实例或本地凭证代入该角色。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/john_doe"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

如果您没有包含所需权限的通用角色，则必须在每个成员账户中创建一个至少具有这些权限的角色。您还必须在管理员账户中创建角色。

创建角色时，请确保执行以下操作：
+ 在每个账户中使用相同的角色名称。
+ 在上面添加所需的权限（推荐）或选择[AmazonDetectiveFullAccess](https://docs.aws.amazon.com/detective/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-amazondetectivefullaccess)托管策略。
+ 如上所述，添加角色信任关系模块。

要自动执行此过程，您可以使用`EnableDetective.yaml` CloudFormation 模板。由于该模板只创建全局资源，因此可以在任何区域运行。

## 为 Python 脚本设置运行环境
<a name="github-script-setup"></a>

您可以通过 EC2 实例或本地计算机运行脚本。

### 启动和配置 EC2 实例
<a name="github-setup-ec2-instance"></a>

运行脚本的一种方法是从 EC2 实例运行脚本。

**要启动和配置 EC2 实例**

1. 在管理员账户中启动 EC2 实例。有关如何启动 EC2 实例的详细信息，请参阅亚马逊 EC2 *用户指南*中的 [Amazon EC2 Linux 实例入门](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 为实例附加一个 IAM 角色，该角色拥有允许实例在管理员账户内调用 `AssumeRole` 的权限。

   如果您使用该`EnableDetective.yaml` CloudFormation 模板，则会创建配置文件名`EnableDetective`为的实例角色。

   否则，有关创建实例角色的信息，请参阅博客文章[使用 EC2 控制台轻松将 IAM 角色替换或附加到现有 EC2 实例](https://aws.amazon.com/blogs//security/easily-replace-or-attach-an-iam-role-to-an-existing-ec2-instance-by-using-the-ec2-console/)。

1. 安装所需的软件：
   + **APT：**`sudo apt-get -y install python3-pip python3 git`
   + **RPM：**`sudo yum -y install python3-pip python3 git`
   + **Boto（最低版本 1.15）：**`sudo pip install boto3`

1. 将存储库克隆到 EC2 实例。

   ```
   git clone https://github.com/aws-samples/amazon-detective-multiaccount-scripts.git
   ```

### 配置本地计算机来运行脚本
<a name="github-setup-local-machine"></a>

您也可以在本地计算机上运行脚本。

**要配置本地计算机来运行脚本**

1. 确保已在本地计算机上设置了管理员账户凭证，该凭证具有调用 `AssumeRole` 的权限。

1. 安装所需的软件：
   + Python 3
   + Boto（最低版本 1.15）
   + GitHub 脚本    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/detective/latest/userguide/detective-github-scripts.html)

## 创建要添加或删除的 `.csv` 成员账户列表
<a name="github-scripts-csv-file"></a>

为确定要添加到行为图或从行为图中删除的成员账户，您需要提供一个包含账户列表的 `.csv` 文件。

将每个账户单独列一行。每个成员账户条目都包含 AWS 账户 ID 和账户的 root 用户电子邮件地址。

请参见以下示例：

```
111122223333,srodriguez@example.com
444455556666,rroe@example.com
```

## 运行 `enableDetective.py`
<a name="github-scripts-execute-enabledetective"></a>

您可以从 EC2 实例或本地计算机运行 `enableDetective.py` 脚本。

**运行 `enableDetective.py`**

1. 将 `.csv` 文件复制到 EC2 实例或本地计算机上的 `amazon-detective-multiaccount-scripts` 目录中。

1. 切换到 `amazon-detective-multiaccount-scripts` 目录。

1. 运行 `enableDetective.py` 脚本。

   ```
   enableDetective.py --master_account administratorAccountID --assume_role roleName --input_file inputFileName --tags tagValueList --enabled_regions regionList  --disable_email
   ```

运行脚本时，请替换以下值：

`administratorAccountID`  
管理员 AWS 账户的账户 ID。

`roleName`  
要在管理员账户和每个成员账户中 AWS 扮演的角色的名称。

`inputFileName`  
包含要添加到管理员账户行为图的成员账户列表的 `.csv` 文件的名称。

`tagValueList`  
（可选）以逗号分隔的标签值列表，用于为新行为图分配标签值。  
每个标签值的格式为 `key=value`。例如：  

```
--tags Department=Finance,Geo=Americas
```

`regionList`  
（可选）以逗号分隔的区域列表，用于将成员账户添加到管理员账户的行为图中。例如：  

```
--enabled_regions us-east-1,us-east-2,us-west-2
```
管理员账户可能尚未在某个区域中启用 Detective。在这种情况下，该脚本会启用 Detective 并为管理员账户创建新的行为图。  
如果您未提供区域列表，则该脚本将在 Detective 支持的所有区域内运行。

`--disable_email`  
（可选）如果包含，Detective 不会向成员账户发送邀请电子邮件。

## 运行 `disableDetective.py`
<a name="github-scripts-execute-disabledetective"></a>

您可以从 EC2 实例或本地计算机运行 `disableDetective.py` 脚本。

**运行 `disableDetective.py`**

1. 将 `.csv` 文件复制到 `amazon-detective-multiaccount-scripts` 目录。

1. 要使用 `.csv` 文件删除指定区域列表中管理员账户行为图中列出的成员账户，请按以下步骤运行 `disableDetective.py` 脚本：

   ```
   disabledetective.py --master_account administratorAccountID --assume_role roleName --input_file inputFileName --disabled_regions regionList
   ```

1. 要在所有区域禁用管理员账户的 Detective，请运行带有 `--delete-master` 标志的 `disableDetective.py` 脚本。

   ```
   disabledetective.py --master_account administratorAccountID --assume_role roleName --input_file inputFileName --disabled_regions regionList --delete_master
   ```

运行脚本时，请替换以下值：

`administratorAccountID`  
管理员 AWS 账户的账户 ID。

`roleName`  
要在管理员账户和每个成员账户中 AWS 扮演的角色的名称。

`inputFileName`  
包含要从管理员账户行为图中删除的成员账户列表的 `.csv` 文件的名称。  
即使禁用了 Detective，您也必须提供 `.csv` 文件。

`regionList`  
（可选）以逗号分隔的区域列表，用于执行以下操作之一：  
+ 从管理员账户的行为图中删除成员账户。
+ 如果包含 `--delete-master` 标志，请禁用 Detective。
例如：  

```
--disabled_regions us-east-1,us-east-2,us-west-2
```
如果您未提供区域列表，则该脚本将在 Detective 支持的所有区域内运行。