

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS소스 버전 2(OCSF 1.1.0)에 대한 Security Lake 쿼리
<a name="subscriber-query-examples2"></a>

다음 섹션에서는 Security Lake에서 데이터를 쿼리하는 방법에 대한 지침을 제공하고AWS소스 버전 2에서 기본적으로 지원되는AWS소스에 대한 몇 가지 쿼리 예제를 포함합니다. 이러한 쿼리는 특정의 데이터를 검색하도록 설계되었습니다AWS 리전. 이 예시에서는 us-east-1 (미국 동부 (버지니아 북부))을 사용합니다. 또한 예제 쿼리는 최대 25개의 레코드를 반환하는 `LIMIT 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 데이터 레이크 관리자는 데이터를 쿼리하는 IAM ID에 관련 데이터베이스 및 테이블에 대한 `SELECT` 권한을 부여해야 합니다. 또한 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)
...
```

이 절은 Amazon S3와 Apache Iceberg 간의 데이터 또는 시간 중복을 방지하기 위해 59일(60일 아님)을 사용합니다.

## 로그 소스 테이블
<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 Resolver 쿼리 로그
+ `sh_findings_2_0` –AWS Security Hub CSPM조사 결과
+ `vpc_flow_2_0` – Amazon Virtual Private Cloud(VPC) 흐름 로그
+ `eks_audit_2_0` – Amazon Elastic Kubernetes Service(Amazon EKS) 감사 로그
+ `waf_2_0` –AWS WAF v2 로그

**예: us-east-1 리전`sh_findings_2_0`의 테이블에 있는 모든 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 활동 나열**

다음 예제에서는 {{us-west}}-2의 vpc\_flow\_2\_0 테이블에 {{20230301}}{{(2023년 3월 1일) 이후에 기록된 소스 IP 192.0.}}2.1의 모든 Amazon VPC 활동을 나열합니다`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의 모든 시간 기반 필드와 마찬가지로 쿼리할 수 있습니다.

다음은 2023년 3월 1일 이후 파티션을` time_dt` 사용하여 로그를 쿼리하는 예제 쿼리입니다.

```
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'`

**예: 2023년 3월 1일 또는 이후 소스 IP `192.0.2.1`의 모든 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}}
```

**예: 최근 30일 동안 소스 IP `192.0.2.1`의 모든 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 유형 정보와 같은 항목으로 제한할 수 있습니다.

이는 관찰 가능한 배열을 사용하여 IP 값 '172.01.02.03'이 포함된 VPC 흐름 및 Route53 테이블에서 로그를 쿼리하는 예제 쿼리입니다.

```
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
```