

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Detective Python 指令碼來管理帳戶
<a name="detective-github-scripts"></a>

Amazon Detective 在 GitHub 儲存庫 ([amazon-detective-multiaccount-scripts](https://github.com/aws-samples/amazon-detective-multiaccount-scripts)) 中提供了一組開放原始 Python 指令碼。此類指令碼需要 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)的工作流程，必要的許可如下：
+ detective:CreateGraph
+ detective:CreateMembers
+ detective:DeleteGraph
+ detective:DeleteMembers
+ detective:ListGraphs
+ detective:ListMembers
+ detective: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 執行個體的詳細資訊，請參閱《[Amazon EC2 使用者指南》中的 Amazon EC2 Linux 執行個體入門](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。 *Amazon EC2 *

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_tw/detective/latest/userguide/detective-github-scripts.html)

## 建立要新增或移除的成員帳戶 `.csv` 清單
<a name="github-scripts-csv-file"></a>

若要識別要新增至行為圖表或從行為圖表中移除的成員帳戶，您需要提供包含帳戶清單的 `.csv` 檔案。

在單獨的行上列出各個帳戶。每個成員帳戶項目都包含 AWS 帳戶 ID 和帳戶的根使用者電子郵件地址。

請參閱下列範例：

```
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 支援的所有區域中運作。