

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

# 根据自然语言提示创建 CloudTrail Lake 查询
<a name="lake-query-generator"></a>

您可以使用 CloudTrail Lake 查询生成器根据您提供的英语提示生成查询。查询生成器使用生成式人工智能（生成式 AI）根据您的提示生成 ready-to-use SQL 查询，然后您可以选择在 Lake 的查询编辑器中运行该查询，也可以进行进一步微调。您无需对 SQL 或 CloudTrail 事件字段有广泛了解即可使用查询生成器。

提示可以是关于 La CloudTrail ke 事件数据存储中事件数据的问题或陈述。例如，您可以输入 "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 控制台和访问查询生成器 Amazon CLI。

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

**在 CloudTrail 控制台上使用查询生成器**

1. 登录 Amazon Web Services 管理控制台 并打开 CloudTrail 控制台，网址为[https://console.aws.amazon.com/cloudtrail/](https://console.amazonaws.cn/cloudtrail/)。

1.  在导航窗格中，在 **Lake** 下，选择**查询**。

1. 在**查询**页面上，选择**编辑器**选项卡。

1. 选择要为其创建查询的事件数据存储。

1. 在**查询生成器**区域中，使用纯英语输入提示。有关示例，请参阅 [提示示例](#lake-query-generator-examples)。

1. 选择**生成查询**。查询生成器将尝试根据您的提示生成查询。如果成功，查询生成器将在编辑器中提供 SQL 查询。如果提示失败，请改写提示并重试。

1. （可选）您可以提供有关生成的查询的反馈。要提供反馈，请选择提示下方出现的竖起大拇指或竖起大拇指按钮。当您提供反馈时， CloudTrail 保存您的提示和生成的查询。

1. （可选）选择**运行**以运行查询。
**注意**  
运行查询时，您需要根据扫描的优化和压缩数据量支付费用。为了帮助控制成本，我们建议您通过为查询添加开始和结束 `eventTime` 时间戳来限制查询。

1. （可选）如果您运行查询并得到结果，则可以选择**汇总结果**来以英语生成查询结果的自然语言摘要。此选项使用生成式人工智能来生成摘要。有关此选项的更多信息，请参阅 [用自然语言汇总查询结果](query-results-summary.md)。

   您可以通过选择显示在所生成摘要下方的赞或踩按钮，来提供有关此摘要的反馈。
**注意**  
La CloudTrail ke 的查询摘要功能处于预览版，可能会发生变化。此功能在以下区域可用：亚太地区（东京）、美国东部（弗吉尼亚州北部）和美国西部（俄勒冈州）。

------
#### [ Amazon CLI ]

**使用生成查询 Amazon 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"
}
```

**要使用运行查询 Amazon CLI**

使用上一个示例中的 `start-query` 命令输出的 `QueryAlias` 运行 `generate-query` 命令。您还可以选择通过提供 `QueryStatement` 来运行 `start-query` 命令。

```
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.amazonaws.cn/aws-managed-policy/latest/reference/AWSCloudTrail_FullAccess.html](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AWSCloudTrail_FullAccess.html) 和 [https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AdministratorAccess.html](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AdministratorAccess.html) 托管式策略都提供了使用此功能所需的权限。

您也可以将 `cloudtrail:GenerateQuery` 操作包含在新的或现有的客户托管策略或内联策略中。

## 区域支持
<a name="lake-query-generator-regions"></a>

以下版本支持此功能 Amazon Web Services 区域：
+ 亚太地区（孟买）区域（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 事件、网络活动事件）的事件数据存储生成查询。
+ 查询生成器无法为与 La CloudTrail ke 事件数据无关的提示生成查询。

## 提示示例
<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 Amazon 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'
    )
```