

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

# AWS來源版本 2 (OCSF 1.1.0) 的 Security Lake 查詢
<a name="subscriber-query-examples2"></a>

下一節提供從 Security Lake 查詢資料的指引，並包含AWS一些來源版本 2 原生支援AWS來源的查詢範例。這些查詢旨在擷取特定 中的資料AWS 區域。這些範例使用 us-east-1 （美國東部 （維吉尼亞北部）)。此外，範例查詢使用 `LIMIT 25` 參數，最多可傳回 25 筆記錄。您可以省略此參數，或根據您的偏好設定進行調整。如需更多範例，請參閱 [Amazon Security Lake OCSF 查詢 GitHub 目錄](https://github.com/awslabs/aws-security-analytics-bootstrap/tree/main/AWSSecurityAnalyticsBootstrap/amazon_security_lake_queries)。

您可以查詢 Security Lake 存放在AWS Lake Formation資料庫和資料表中的資料。您也可以在 Security Lake 主控台、API 或 中建立第三方訂閱者AWS CLI。第三方訂閱者也可以從您指定的來源查詢 Lake Formation 資料。

Lake Formation 資料湖管理員必須將相關資料庫和資料表的`SELECT`許可授予查詢資料的 IAM 身分。訂閱者也必須在 Security Lake 中建立，才能查詢資料。如需如何建立具有查詢存取權的訂閱者的詳細資訊，請參閱 [管理 Security Lake 訂閱者的查詢存取權](subscriber-query-access.md)。

下列查詢包含使用 的時間型篩選條件`eventDay`，以確保您的查詢位於設定的保留設定內。如需詳細資訊，請參閱[Querying data with retention settings](subscriber-query-examples.md#security-lake-retention-setting-query-data)。

例如，如果超過 60 天的資料已過期，您的查詢應包含時間限制，以防止存取過期的資料。對於 60 天的保留期，請在查詢中包含下列子句：

```
...
WHERE time_dt > DATE_ADD('day', -59, CURRENT_TIMESTAMP)
...
```

此子句使用 59 天 （而不是 60 天），以避免 Amazon S3 和 Apache Iceberg 之間的任何資料或時間重疊。

## 日誌來源資料表
<a name="log-source-table"></a>

當您查詢 Security Lake 資料時，必須包含資料所在的 Lake Formation 資料表名稱。

```
SELECT *
FROM "amazon_security_lake_glue_db_DB_Region"."amazon_security_lake_table_DB_Region_SECURITY_LAKE_TABLE"
WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP
LIMIT 25
```

日誌來源資料表的常見值包括下列項目：
+ `cloud_trail_mgmt_2_0` –AWS CloudTrail管理事件
+ `lambda_execution_2_0` – Lambda 的 CloudTrail 資料事件
+ `s3_data_2_0` – S3 的 CloudTrail 資料事件
+ `route53_2_0` – Amazon Route 53 解析程式查詢日誌
+ `sh_findings_2_0` –AWS Security Hub CSPM尋找
+ `vpc_flow_2_0` – Amazon Virtual Private Cloud (Amazon VPC) 流程日誌
+ `eks_audit_2_0` – Amazon Elastic Kubernetes Service (Amazon EKS) 稽核日誌
+ `waf_2_0` –AWS WAF v2 日誌

**範例：`sh_findings_2_0`us-east-1 區域資料表中的所有 Security Hub CSPM 調查結果**

```
SELECT *
    FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_sh_findings_2_0"
    WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP
LIMIT 25
```

## 資料庫區域
<a name="database-region"></a>

當您查詢 Security Lake 資料時，您必須包含要從中查詢資料的資料庫區域名稱。如需目前可使用 Security Lake 的資料庫區域完整清單，請參閱 [Amazon Security Lake 端點](https://docs.aws.amazon.com/general/latest/gr/securitylake.html)。

**範例：從來源 IP 列出 Amazon Virtual Private Cloud 活動**

下列範例列出來自來源 IP {{192.0.2.1}} 的所有 Amazon VPC 活動，這些活動是在 {{20230301}} (2023 年 3 月 1 日） 之後記錄在 {{us-west-2}} 的資料表 {{vpc\_flow\_2\_0}} 中`DB_Region`。

```
SELECT * 
    FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_vpc_flow_2_0"
    WHERE time_dt > TIMESTAMP '2023-03-01' 
    AND src_endpoint.ip = '192.0.2.1'
    ORDER BY time_dt desc
LIMIT 25
```

## 分割區日期
<a name="partition-date"></a>

透過分割資料，您可以限制每個查詢掃描的資料量，從而改善效能並降低成本。與 Security Lake 1.0 相比，Security Lake 2.0 中的分割區運作方式略有不同。Security Lake 現在會透過 `time_dt`、 `region`和 實作分割`accountid`。不過，Security Lake 1.0 透過 `eventDay`、 `region`和 `accountid` 參數實作分割。

查詢`time_dt`會自動從 S3 產生日期分割區，並且可以像 Athena 中的任何時間型欄位一樣進行查詢。

這是使用 ` time_dt`分割區在 2023 年 3 月 1 日之後查詢日誌的範例查詢：

```
SELECT *
    FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_vpc_flow_2_0"
WHERE time_dt > TIMESTAMP '2023-03-01'
AND src_endpoint.ip = '192.0.2.1'
ORDER BY time desc
LIMIT 25
```

的常見值`time_dt`包括下列項目：

**過去 1 年發生的事件**  
`WHERE time_dt > CURRENT_TIMESTAMP - INTERVAL '1' YEAR`

**過去 1 個月內發生的事件**  
`WHERE time_dt > CURRENT_TIMESTAMP - INTERVAL '1' MONTH`

**過去 30 天內發生的事件**  
`WHERE time_dt > CURRENT_TIMESTAMP - INTERVAL '30' DAY`

**過去 12 小時內發生的事件**  
`WHERE time_dt > CURRENT_TIMESTAMP - INTERVAL '12' HOUR`

**過去 5 分鐘內發生的事件**  
`WHERE time_dt > CURRENT_TIMESTAMP - INTERVAL '5' MINUTE`

**7–14 天前發生的事件**  
`WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '14' DAY AND CURRENT_TIMESTAMP - INTERVAL '7' DAY`

**在特定日期或之後發生的事件**  
`WHERE time_dt >= TIMESTAMP '2023-03-01'`

**範例：資料表中 `192.0.2.1` 2023 年 3 月 1 日或之後來源 IP 的所有 CloudTrail 活動清單 `cloud_trail_mgmt_1_0`**

```
SELECT *
    FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0
    WHERE eventDay >= '{{20230301}}'
    AND src_endpoint.ip = '192.0.2.1'
    ORDER BY time desc
    LIMIT {{25}}
```

**範例：資料表`192.0.2.1`中過去 30 天來自來源 IP 的所有 CloudTrail 活動清單 `cloud_trail_mgmt_1_0`**

```
SELECT *
    FROM amazon_security_lake_glue_db_us_east_1.amazon_security_lake_table_us_east_1_cloud_trail_mgmt_1_0
    WHERE eventDay > cast(date_format(current_timestamp - INTERVAL '{{30}}' day, '%Y%m%d%H') as varchar) 
    AND src_endpoint.ip = '192.0.2.1'
    ORDER BY time desc
    LIMIT {{25 }}
```

## 查詢 Security Lake 可觀測項目
<a name="querying-observables-examples"></a>

Observables 是 Security Lake 2.0 中提供的新功能。可觀測物件是一種樞紐元素，其中包含事件中許多位置中找到的相關資訊。查詢可觀測項目可讓使用者從其資料集衍生高階安全洞見。

透過查詢可觀測項目中的特定元素，您可以將資料集限制為特定使用者名稱、資源 UIDs、IPs、雜湊和其他 IOC 類型資訊

這是使用可觀測陣列來查詢跨 VPC Flow 和 Route53 資料表日誌的範例查詢，其中包含 IP 值 '172.01.02.03'

```
WITH a AS 
    (SELECT 
    time_dt,
    observable.name,
    observable.value
    FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_vpc_flow_2_0",
    UNNEST(observables) AS t(observable)
    WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP
    AND observable.value='172.01.02.03'
    AND observable.name='src_endpoint.ip'),
b as 
    (SELECT 
    time_dt,
    observable.name,
    observable.value
    FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_route53_2_0",
    UNNEST(observables) AS t(observable)
    WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP
    AND observable.value='172.01.02.03'
    AND observable.name='src_endpoint.ip')
SELECT * FROM a
LEFT JOIN b ON a.value=b.value and a.name=b.name
LIMIT 25
```

## Amazon EKS 稽核日誌的範例 Security Lake 查詢
<a name="example-queries-eks-sourceversion2"></a>

Amazon EKS 日誌追蹤控制平面活動會將稽核和診斷日誌直接從 Amazon EKS 控制平面提供給帳戶中的 CloudWatch Logs。這些日誌可讓您輕鬆執行叢集並確保叢集的安全。訂閱者可以查詢 EKS 日誌，以了解下列類型的資訊。

以下是AWS來源版本 2 的 Amazon EKS 稽核日誌的一些範例查詢：

**過去 7 天內對特定 URL 的請求**

```
SELECT 
    time_dt,
    actor.user.name,
    http_request.url.path,
    activity_name
FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_eks_audit_2_0" 
WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP 
AND activity_name = 'get'
and http_request.url.path = '/apis/coordination.k8s.io/v1/'
LIMIT 25
```

**更新過去 7 天內來自 '10.0.97.167' 的請求**

```
SELECT 
    activity_name,
    time_dt,
    api.request,
    http_request.url.path,
    src_endpoint.ip,
    resources
FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_eks_audit_2_0" 
WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP 
AND src_endpoint.ip = '10.0.97.167'
AND activity_name = 'Update'
LIMIT 25
```

**過去 7 天內與資源 'kube-controller-manager' 相關聯的請求和回應**

```
SELECT 
    activity_name,
    time_dt,
    api.request,
    api.response,
    resource.name
FROM "amazon_security_lake_glue_db_us_east_1"."amazon_security_lake_table_us_east_1_eks_audit_2_0",
UNNEST(resources) AS t(resource)
WHERE time_dt BETWEEN CURRENT_TIMESTAMP - INTERVAL '7' DAY AND CURRENT_TIMESTAMP 
AND resource.name = 'kube-controller-manager'
LIMIT 25
```