

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

# 執行時期監控疑難排解
<a name="ecs-guard-duty-troubleshooting"></a>

您可能需要對執行時期監控進行疑難排解，或驗證執行時期監控已啟用且在任務與容器上執行。

**Topics**
+ [

## 如何判斷帳戶上的執行時期監控是否處於作用中狀態？
](#verify-ecs-runtime-enabled)
+ [

## 如何判斷叢集上的執行時期監控是否處於作用中狀態？
](#verify-ecs-runtime-enabled)
+ [

## 如何判斷 GuardDuty 安全代理程式是否正在 Fargate 任務上執行？
](#verify-ecs-runtime-fargate-run)
+ [

## 如何判斷 GuardDuty 安全代理程式是否正在 EC2 容器執行個體上執行？
](#verify-ecs-runtime-ec2-run)
+ [

## 當叢集上執行的任務沒有任務執行角色時會如何？
](#no-task-execution-role)
+ [

## 如何判斷我是否具備為叢集新增執行時期監控標籤的正確許可？
](#tag-permissions)
+ [

## 無法連線至 Amazon ECR 時會如何？
](#no-ecr-connection)
+ [

## 啟用執行時期監控後如何解決 Fargate 任務出現記憶體不足的錯誤？
](#memory-error)

## 如何判斷帳戶上的執行時期監控是否處於作用中狀態？
<a name="verify-ecs-runtime-enabled"></a>

在 Amazon ECS 主控台中，**帳戶設定**頁面上顯示此資訊。

您也可以使用 `list-account-settings` 選項執行 `effective-settings`。

```
aws ecs list-account-settings --effective-settings
```

Output

**名稱**設定為 `guardDutyActivate` 且**值**設定為 `on`，表示帳戶已完成設定。您必須與 GuardDuty 管理員確認管理是自動進行還是手動進行。

```
{
    "setting": {
        "name": "guardDutyActivate",
        "value": "enabled",
        "principalArn": "arn:aws:iam::123456789012:root",
        "type": "aws-managed"
    }
}
```

## 如何判斷叢集上的執行時期監控是否處於作用中狀態？
<a name="verify-ecs-runtime-enabled"></a>

您可以在 GuardDuty 主控台中檢閱涵蓋範圍統計量。其中包含與您帳戶或會員帳戶相關聯的 Amazon ECS 叢集資源的資訊，即運作狀態良好的叢集在所選 AWS 區域中所有叢集中所佔的百分比。這包括使用 Fargate 與 EC2 的叢集覆蓋率。如需詳細資訊，請參閱 *Amazon GuardDuty User Guide* 中的 [Reviewing coverage statistics](https://docs.aws.amazon.com/guardduty/latest/ug/gdu-assess-coverage-ecs.html#ecs-review-coverage-statistics-ecs-runtime-monitoring)。

## 如何判斷 GuardDuty 安全代理程式是否正在 Fargate 任務上執行？
<a name="verify-ecs-runtime-fargate-run"></a>

GuardDuty 安全代理程式會作為 Fargate 任務的邊車容器執行。

在 Amazon ECS 主控台中，邊車容器顯示在**任務詳細資訊**頁面的**容器**下。

您可以執行 `describe-tasks` 並尋找**名稱**設定為 `aws-gd-agent` 且 **lastStatus** 設定為 `RUNNING` 的容器。

下列範例顯示了任務 `aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE` 預設叢集的輸出。

```
aws ecs describe-tasks --cluster default --tasks aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE
```

Output

名為 `gd-agent` 的容器處於 `RUNNING` 狀態。

```
"containers": [ 
      {
        "containerArn": "arn:aws:ecs:us-east-1:123456789012:container/4df26bb4-f057-467b-a079-96167EXAMPLE", 
        "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/0b69d5c0-d655-4695-98cd-5d2d5EXAMPLE", 
        "lastStatus": "RUNNING",
        "healthStatus": "UNKNOWN",
        "memory": "string",
        "name": "aws-gd-agent" 
      }
    ]
```

## 如何判斷 GuardDuty 安全代理程式是否正在 EC2 容器執行個體上執行？
<a name="verify-ecs-runtime-ec2-run"></a>

執行以下命令來檢視狀態：

```
sudo systemctl status amazon-guardduty-agent
```

日誌檔案位於下列位置：

```
/var/log/amzn-guardduty-agent
```

## 當叢集上執行的任務沒有任務執行角色時會如何？
<a name="no-task-execution-role"></a>

對於 Fargate 任務，任務會在沒有 GuardDuty 安全代理程式邊車容器的情況下啟動。GuardDuty 儀表板會在涵蓋範圍統計量儀表板中顯示任務缺少保護的狀態。

## 如何判斷我是否具備為叢集新增執行時期監控標籤的正確許可？
<a name="tag-permissions"></a>

若要標記叢集，您必須同時具備對 `ecs:TagResource` 與 `CreateCluster` 執行 `UpdateCluster` 動作的許可。

以下是範例政策的程式碼片段。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ecs:TagResource"
      ],
      "Resource": "*",
      "Condition": {
         "StringEquals": {
             "ecs:CreateAction" : "CreateCluster",
             "ecs:CreateAction" : "UpdateCluster",
          }
       }
    }
  ]
}
```

## 無法連線至 Amazon ECR 時會如何？
<a name="no-ecr-connection"></a>

對於 Fargate 任務，任務會在沒有 GuardDuty 安全代理程式邊車容器的情況下啟動。GuardDuty 儀表板會在涵蓋範圍統計量儀表板中顯示任務缺少保護的狀態。

## 啟用執行時期監控後如何解決 Fargate 任務出現記憶體不足的錯誤？
<a name="memory-error"></a>

GuardDuty 安全代理程式是一種輕量型程序。不過，程序仍會根據工作負載的大小耗用資源。我們建議使用容器資源追蹤工具 (例如 Amazon CloudWatch Container Insights)，在叢集中分階段部署 GuardDuty。這些工具可協助您探索應用程式 GuardDuty 安全代理程式的耗用設定檔。然後，您可以視需要調整 Fargate 任務大小，避免可能出現的記憶體不足狀況。