

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

# 從自然語言提示建立 CloudTrail Lake 查詢
<a name="lake-query-generator"></a>

您可以使用 CloudTrail Lake 查詢產生器，從您提供的英文提示產生查詢。查詢產生器使用生成式人工智慧 （生成式 AI) 從提示產生ready-to-use SQL 查詢，然後您可以選擇在 Lake 的查詢編輯器中執行，或進一步微調。您不需要具備 SQL 或 CloudTrail 事件欄位的廣泛知識，即可使用查詢產生器。

提示可以是有關 CloudTrail Lake 事件資料存放區中事件資料的問題或陳述式。例如，您可以輸入提示，例如 "What are my top errors in the past month?"和 “Give me a list of users that used SNS.”

提示最少可以有 3 個字元，最多 500 個字元。

產生查詢不收取費用；不過，當您執行查詢時，會根據掃描的最佳化和壓縮資料量產生費用。為了協助控制成本，建議您將開始和結束`eventTime`時間戳記新增至查詢，以限制查詢。

**注意**  
您可以選擇出現在所產生查詢下方的拇指向上或拇指向下按鈕，以提供所產生查詢的意見回饋。當您提供意見回饋時，CloudTrail 會儲存您的提示和產生的查詢。  
請勿在提示中包含任何個人識別、機密或敏感資訊。  
此功能使用生成式 AI 大型語言模型 LLMs)；我們建議再次檢查 LLM 回應。

**注意**  
CloudTrail 會自動選取地理位置內的最佳區域，以在產生查詢時處理推論請求。這可將可用的運算資源、模型可用性最大化，並提供最佳客戶體驗。您的資料只會存放在發出請求的區域，但輸入提示和輸出結果可能會在該區域之外處理。所有資料都會透過 Amazon 的安全網路進行加密傳輸。  
 CloudTrail 會將您的推論請求安全地路由到發出請求的地理區域內的可用運算資源，如下所示：  
來自美國的推論請求將在美國境內處理
來自日本的推論請求將在日本內處理
來自澳洲的推論請求將在澳洲處理。
源自歐盟的推論請求將在歐盟內處理
來自印度的推論請求將在印度處理
 若要選擇退出查詢產生功能，您可以明確拒絕或移除您正在使用的 iam 政策中的`cloudtrail:GenerateQuery`動作。

您可以使用 CloudTrail 主控台 和 存取查詢產生器 AWS CLI。

------
#### [ CloudTrail console ]

**在 CloudTrail 主控台上使用查詢產生器**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/cloudtrail/](https://console.aws.amazon.com/cloudtrail/) 的 CloudTrail 主控台。

1.  在導覽窗格中，選擇 **Lake** 下方的**查詢**。

1. 在**查詢**頁面上，選擇**編輯器**索引標籤。

1. 選擇您要為其建立查詢的事件資料存放區。

1. 在**查詢產生器**區域中，以純英文輸入提示。如需範例，請參閱 [範例提示](#lake-query-generator-examples)。

1. 選擇**產生查詢**。查詢產生器將嘗試從您的提示產生查詢。如果成功，查詢產生器會在編輯器中提供 SQL 查詢。如果提示失敗，請重新說出您的提示，然後再試一次。

1. （選用） 您可以提供有關所產生查詢的意見回饋。若要提供意見回饋，請選擇出現在提示下方的拇指向上或拇指向下按鈕。當您提供意見回饋時，CloudTrail 會儲存您的提示及所產生的查詢。

1. （選用） 選擇**執行**以執行查詢。
**注意**  
當您執行查詢時，會根據掃描的最佳化和壓縮資料量產生費用。為了協助控制成本，建議您將開始和結束`eventTime`時間戳記新增至查詢，以限制查詢。

1. （選用） 如果您執行查詢且有結果，您可以選擇**摘要結果**，以產生查詢結果英文的自然語言摘要。此選項使用生成式人工智慧 （生成式 AI) 來產生摘要。如需有關此選項的詳細資訊，請參閱 [以自然語言摘要查詢結果](query-results-summary.md)。

   您可以選擇出現在所產生摘要下方的拇指向上或拇指向下按鈕，以提供有關摘要的意見回饋。
**注意**  
查詢摘要功能目前為 CloudTrail Lake 的預覽版本，可能會有所變更。此功能適用於下列區域：亞太區域 （東京）、美國東部 （維吉尼亞北部） 和美國西部 （奧勒岡）。

------
#### [ AWS CLI ]

**使用 產生查詢 AWS CLI**

執行 `generate-query`命令，從英文提示產生查詢。針對 `--event-data-stores`，提供您要查詢之事件資料存放區的 ARN （或 ARN 的 ID 尾碼）。您只能指定一個事件資料存放區。針對 `--prompt`，提供英文提示。

```
aws cloudtrail generate-query 
--event-data-stores arn:aws:cloudtrail:us-east-1:123456789012:eventdatastore/EXAMPLE-ee54-4813-92d5-999aeEXAMPLE \
--prompt "Show me all console login events for the past week?"
```

如果成功，命令會輸出 SQL 陳述式`QueryAlias`，並提供您將與 `start-query`命令搭配使用的 ，以針對您的事件資料存放區執行查詢。

```
{
  "QueryStatement": "SELECT * FROM $EDS_ID WHERE eventname = 'ConsoleLogin' AND eventtime >= timestamp '2024-09-16 00:00:00' AND eventtime <= timestamp '2024-09-23 00:00:00' AND eventSource = 'signin.amazonaws.com'",
  "QueryAlias": "AWSCloudTrail-UUID"
}
```

**使用 執行查詢 AWS CLI**

在上一個範例中，使用 `start-query`命令`QueryAlias`輸出的 執行 `generate-query`命令。您也可以選擇透過提供 來執行 `start-query`命令`QueryStatement`。

```
aws cloudtrail start-query --query-alias {{AWSCloudTrail-UUID}}
```

回應為 `QueryId` 字串。若要取得查詢的狀態，請使用 `start-query` 傳回的 `QueryId` 值執行 `describe-query`。如果查詢成功，則可以執行 `get-query-results` 取得結果。

```
{
    "QueryId": "EXAMPLE2-0add-4207-8135-2d8a4EXAMPLE"
}
```

**注意**  
執行時間超過一小時的查詢可能會逾時。您仍然可以取得在查詢逾時之前處理的部分結果。  
如果您使用選用的 `--delivery-s3uri` 參數將查詢結果傳送到 S3 儲存貯體，則儲存貯體政策必須授予 CloudTrail 許可，才能將查詢結果傳送到儲存貯體。如需手動編輯儲存貯體政策的資訊，請參閱「[適用於 CloudTrail Lake 查詢結果的 Amazon S3 儲存貯體政策](s3-bucket-policy-lake-query-results.md)」。

------

## 所需的許可
<a name="lake-query-generator-permissions."></a>

[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudTrail_FullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudTrail_FullAccess.html) 和 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html)受管政策都提供使用此功能的必要許可。

也可以在新的或現有的客戶管理政策或內嵌政策中包含 `cloudtrail:GenerateQuery` 動作。

## 區域支援
<a name="lake-query-generator-regions"></a>

下列支援此功能 AWS 區域：
+ 亞太區域 (孟買) 區域 (ap-south-1)
+ 亞太區域 (雪梨) 區域 (ap-southeast-2)
+ 亞太區域 (東京) 區域 (ap-northeast-1)
+ 加拿大 (中部) 區域 (ca-central-1)
+ 歐洲 (倫敦) 區域 (eu-west-2)
+ 美國東部 (維吉尼亞北部) 區域 (us-east-1)
+ 美國西部 (奧勒岡) 區域 (us-west-2)

## 限制
<a name="lake-query-generator-limitations"></a>

以下是查詢產生器的限制：
+ 查詢產生器只能接受英文提示。
+ 查詢產生器只能為收集 CloudTrail 事件 （管理事件、資料事件、網路活動事件） 的事件資料存放區產生查詢。
+ 查詢產生器無法針對與 CloudTrail Lake 事件資料無關的提示產生查詢。

## 範例提示
<a name="lake-query-generator-examples"></a>

本節提供範例提示，以及從提示產生的 SQL 查詢。

如果您選擇執行本節中的範例查詢，請將 {{eds-id}} 取代為您要查詢的事件資料存放區的 ID，並將時間戳記取代為您的使用案例的適當時間戳記。時間戳記的格式如下：`YYYY-MM-DD HH:MM:SS`。

**提示**：What are my top errors in the past month?

**SQL 查詢：**

```
SELECT
    errorMessage,
    COUNT(*) as eventCount
FROM
    {{eds-id}}
WHERE
    errorMessage IS NOT NULL
AND eventTime >= timestamp '{{2024-05-01 00:00:00}}'
AND eventTime <= timestamp '{{2024-05-31 23:59:59}}'
GROUP BY 1
ORDER BY 2 DESC
LIMIT 2;
```

**提示**：Give me a list of users that used Amazon SNS.

**SQL 查詢：**

```
SELECT
    DISTINCT userIdentity.arn AS user
FROM
    {{eds-id}}
WHERE
    eventSource = 'sns.amazonaws.com'
```

**提示**：What are my API counts each day for read and write events in the past month?

**SQL 查詢：**

```
SELECT date(eventTime) AS event_date,
    SUM(
        CASE
            WHEN readonly = true THEN 1
            ELSE 0
        END
    ) AS read_events,
    SUM(
        CASE
            WHEN readonly = false THEN 1
            ELSE 0
        END
    ) AS write_events
FROM
    {{eds-id}}
WHERE
    eventTime >= timestamp '{{2024-05-04 00:00:00}}'
AND eventTime <= timestamp '{{2024-06-04 23:59:59}}'
GROUP BY 1
ORDER BY 1 ASC;
```

**提示**：Show any events with access denied errors for the past three weeks.

**SQL 查詢：**

```
SELECT *
FROM 
  {{eds-id}}
WHERE
  WHERE (errorCode = 'AccessDenied' OR errorMessage = 'Access Denied')
AND eventTime >= timestamp '{{2024-05-16 01:00:00}}'
AND eventTime <= timestamp '{{2024-06-06 01:00:00}}'
```

**提示**：Query the number of calls each operator performed on the date *2024-05-01*. The operator is a principal tag.

**SQL 查詢：**

```
SELECT element_at(
        eventContext.tagContext.principalTags,
        'operator'
    ) AS operator,
    COUNT(*) AS eventCount
FROM
    {{eds-id}}
WHERE eventtime >= '2024-05-01 00:00:00'
    AND eventtime < '2024-05-01 23:59:59'
GROUP BY 1
ORDER BY 2 DESC;
```

**提示**：Give me all event IDs that touched resources within the CloudFormation stack with name *myStack* on the date *2024-05-01*.

**SQL 查詢：**

```
SELECT eventID
FROM
    {{eds-id}}
WHERE any_match(
        eventContext.tagcontext.resourcetags,
        rt->element_at(rt.tags, 'aws:cloudformation:stack-name') = 'myStack'
    )
    AND eventtime >= '2024-05-01 00:00:00'
    AND eventtime < '2024-05-01 23:59:59'
```

**提示**：Count the number of events grouped by resource tag '*solution*' values, listing them in descending order of count.

**SQL 查詢：**

```
SELECT element_at(rt.tags, 'solution'),
    count(*) as event_count
FROM
    {{eds-id}},
    unnest(eventContext.tagContext.resourceTags) as rt
WHERE eventtime < '2025-05-14 19:00:00'
GROUP BY 1
ORDER BY 2 DESC;
```

**提示**：Find all Amazon S3 data events where resource tag Environment has value *prod*.

**SQL 查詢：**

```
SELECT *
FROM
    {{eds-id}}
WHERE eventCategory = 'Data'
    AND eventSource = 's3.amazonaws.com'
    AND eventtime >= '2025-05-14 00:00:00'
    AND eventtime < '2025-05-14 20:00:00'
    AND any_match(
        eventContext.tagContext.resourceTags,
        rt->element_at(rt.tags, 'Environment') = 'prod'
    )
```