

# Amazon S3에 흐름 로그 게시
<a name="flow-logs-s3"></a>

흐름 로그는 흐름 로그 데이터를 Amazon S3에 게시할 수 있습니다. Amazon Simple Storage Service(S3)는 확장성과 내구성이 뛰어난 객체 스토리지 서비스입니다. 이는 웹을 통해 어디서든 원하는 양의 데이터를 저장하고 검색하도록 설계되었습니다. S3는 데이터 버전 관리, 암호화 및 액세스 제어를 위한 내장 기능으로 업계 최고의 내구성과 가용성을 제공합니다.

Amazon S3에 게시하는 경우 흐름 로그 데이터가 지정해 놓은 기존 Amazon S3 버킷에 게시됩니다. 모니터링된 모든 네트워크 인터페이스에 대한 흐름 로그 레코드는 버킷에 저장된 일련의 로그 파일 객체에 게시됩니다. 흐름 로그가 VPC에 대한 데이터를 캡처하면, 흐름 로그가 모든 네트워크 인터페이스에 대한 흐름 로그 레코드를 선택된 VPC에 게시합니다.

흐름 로그와 함께 사용할 Amazon S3 버킷을 만드는 방법은 *Amazon S3 사용 설명서*의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요.

VPC 흐름 로그 수집, 흐름 로그 처리 및 흐름 로그 시각화를 간소화하는 방법에 대한 자세한 내용은 AWS Solutions Library의 [OpenSearch를 통한 중앙 집중식 로깅](https://aws.amazon.com/solutions/implementations/centralized-logging-with-opensearch/)을 참조하세요.

CloudWatch Logs에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3로 전송된 로그](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)를 참조하세요.

**가격 책정**  
Amazon S3에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세히 알아보려면 [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/)(Amazon CloudWatch 요금)을 열고, **Logs**(로그)를 선택하고, **Vended Logs**(벤딩 로그)를 찾으세요.

**Topics**
+ [흐름 로그 파일](flow-logs-s3-path.md)
+ [Amazon S3 버킷의 흐름 로그에 대한 권한](flow-logs-s3-permissions.md)
+ [SSE-KMS를 사용할 경우 필요한 키 정책](flow-logs-s3-cmk-policy.md)
+ [Amazon S3 로그 파일 권한](flow-logs-file-permissions.md)
+ [Amazon S3에 게시하는 흐름 로그 생성](flow-logs-s3-create-flow-log.md)
+ [Amazon S3로 흐름 로그 레코드 보기](view-flow-log-records-s3.md)

# 흐름 로그 파일
<a name="flow-logs-s3-path"></a>

 VPC Flow Logs는 VPC에서 들어오고 나가는 IP 트래픽에 대한 데이터를 로그 레코드로 수집하고 해당 레코드를 로그 파일로 집계한 다음 5분 간격으로 Amazon S3 버킷에 로그 파일을 게시합니다. 여러 파일이 게시될 수 있으며 각 로그 파일에는 이전 5분 동안 기록된 IP 트래픽에 대한 흐름 로그 레코드의 일부 또는 전체가 포함될 수 있습니다.

Amazon S3에서 흐름 로그 파일의 **마지막 수정(Last modified)** 필드는 파일이 Amazon S3 버킷에 업로드된 날짜와 시간을 나타냅니다. 파일 이름의 타임스탬프보다 이후이며 파일을 Amazon S3 버킷에 업로드하는 데 걸리는 시간에 따라 다릅니다.

**로그 파일 형식**

로그 파일에 대해 다음 형식 중 하나를 지정할 수 있습니다. 각 파일은 단일 Gzip 파일로 압축됩니다.
+ **텍스트(Text)** – 일반 텍스트. 이것은 기본 형식입니다.
+ **Parquet** – Apache Parquet은 열 기반 데이터 형식입니다. Parquet 형식의 데이터에 대한 쿼리는 일반 텍스트 데이터에 대한 쿼리에 비해 10배에서 100배 빠릅니다. Gzip 압축을 사용하는 Parquet 형식 데이터는 Gzip 압축을 사용하는 일반 텍스트보다 스토리지 공간을 20% 적게 사용합니다.

**참고**  
Gzip 압축을 사용하는 Parquet 형식 데이터가 집계 기간별로 100KB 미만이라면 데이터를 Parquet 형식으로 저장할 경우 Parquet 파일 메모리 요구 사항으로 인해 Gzip 압축을 사용하는 일반 텍스트보다 더 많은 공간을 차지할 수 있습니다.

**로그 파일 옵션**

필요한 경우 다음과 같은 옵션을 지정할 수 있습니다.
+ **Hive 호환 S3 접두사** – 분할을 Hive 호환 도구로 가져오는 대신 Hive 호환 접두사를 활성화합니다. 쿼리 실행 전에 **MSCK REPAIR TABLE** 명령을 사용합니다.
+ **시간당 분할** – 대량의 로그가 있고 일반적으로 특정 시간까지 쿼리를 타겟팅하는 경우 로그를 시간별로 분할하여 더 결과를 빠르게 얻고 쿼리 비용을 절감할 수 있습니다.

**로그 파일 S3 버킷 구조**  
로그 파일은 흐름 로그의 ID, 리전, 생성된 날짜 및 대상 옵션에 따라 폴더 구조를 사용하여 지정된 Amazon S3 버킷에 저장됩니다.

기본적으로 파일은 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/
```

Hive 호환 S3 접두사를 사용하도록 설정하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/
```

시간별 분할을 사용하도록 설정하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/hour/
```

Hive 호환 분할을 사용하도록 설정하고 시간당 흐름 로그를 분할하면 파일이 다음 위치로 전달됩니다.

```
bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/hour=hour/
```

**로그 파일 이름**  
로그 파일의 파일 이름은 흐름 로그 ID, 리전 및 생성 날짜 및 시간을 기반으로 합니다. 파일 이름은 다음 형식을 사용합니다.

```
aws_account_id_vpcflowlogs_region_flow_log_id_YYYYMMDDTHHmmZ_hash.log.gz
```

예를 들어, 다음은 June 20, 2018, 16:20 UTC에 us-east-1 리전의 리소스에 대해 AWS 계정 123456789012에서 생성한 흐름 로그에 대한 로그 파일의 예를 보여 줍니다. 종료 시간이 16:20:00에서 16:24:59 사이인 흐름 로그 레코드가 파일에 포함됩니다.

```
123456789012_vpcflowlogs_us-east-1_fl-1234abcd_20180620T1620Z_fe123456.log.gz
```

# Amazon S3 버킷의 흐름 로그에 대한 권한
<a name="flow-logs-s3-permissions"></a>

기본적으로 Amazon S3 버킷과 버킷에 포함된 객체는 비공개입니다. 버킷 소유자만이 해당 버킷과 그 안에 저장된 객체에 액세스할 수 있습니다. 그러나 버킷 소유자는 액세스 정책을 작성하여 다른 리소스 및 사용자에게 액세스 권한을 부여할 수 있습니다.

흐름 로그를 생성하는 사용자가 버킷을 소유하고 해당 버킷에 대한 `PutBucketPolicy` 및 `GetBucketPolicy` 권한을 소유한 경우, 다음 정책을 해당 버킷에 자동으로 연결합니다. 이 정책은 버킷에 연결된 모든 기존 정책을 덮어씁니다.

그렇지 않으면 버킷 소유자가 이 정책을 버킷에 추가하고 흐름 로그 작성자의 AWS 계정 ID 지정 또는 흐름 로그 생성이 실패합니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [버킷 정책 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012",
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:*"
                }
            }
        }
    ]
}
```

------

*my-s3-arn*에 지정한 ARN은 Hive 호환 S3 접두사를 사용하는지 여부에 따라 다릅니다.
+ 기본 접두사

  ```
  arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*
  ```
+ Hive 호환 S3 접두사

  ```
  arn:aws:s3:::bucket_name/optional_folder/AWSLogs/aws-account-id=account_id/*
  ```

개별 AWS 계정 ARN 대신 로그 전송 서비스 보안 주체에 이 권한들을 부여하는 것이 좋습니다. 또한 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)로부터 보호하려면 `aws:SourceAccount` 및 `aws:SourceArn` 조건 키를 사용하는 것 좋습니다. 소스 계정은 흐름 로그의 소유자이고 원본 ARN은 로그 서비스의 와일드카드(\$1) ARN입니다.

로그 전송 서비스는 `HeadBucket` Amazon S3 API 작업을 호출하여 S3 버킷의 존재 및 위치를 확인합니다. 로그 전송 서비스에 이 작업을 호출할 수 있는 권한을 부여할 필요는 없습니다. S3 버킷과 그 위치를 확인할 수 없더라도 VPC 흐름 로그가 전송됩니다. 하지만 CloudTrail 로그에서 `HeadBucket`에 대한 호출에 `AccessDenied` 오류가 발생합니다.

# SSE-KMS를 사용할 경우 필요한 키 정책
<a name="flow-logs-s3-cmk-policy"></a>

해당 S3 버킷에서 Amazon S3-관리형 키(SSE-S3)를 사용한 서버 측 암호화 또는 KMS 키(SSE-KMS)를 사용한 서버 측 암호화를 활성화하여 Amazon S3 버킷의 데이터를 보호할 수 있습니다. 자세한 내용은 *Amazon S3 사용 설명서*의 [서버 측 암호화를 사용하여 데이터 보호](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)를 참조하세요.

SSE-S3를 선택하면 추가 구성이 필요하지 않습니다. Amazon S3는 암호화 키를 처리합니다.

SSE-KMS를 선택하면 고객 관리형 키 ARN을 사용해야 합니다. 키 ID를 사용하는 경우 흐름 로그를 생성할 때 [LogDestination 전송 불가](flow-logs-troubleshooting.md#flow-logs-troubleshooting-kms-id) 오류가 발생할 수 있습니다. 또한 로그 전달 계정이 S3 버킷에 쓸 수 있도록 고객 관리형 키에 대한 키 정책을 업데이트해야 합니다. SSE-KMS와 함께 사용하는 데 필요한 키 정책에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [Amazon S3 버킷 서버 측 암호화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-SSE-KMS-S3)를 참조하세요.

# Amazon S3 로그 파일 권한
<a name="flow-logs-file-permissions"></a>

필요한 버킷 정책 외에도, Amazon S3는 ACL(액세스 제어 목록)을 사용하여 흐름 로그에서 생성한 로그 파일에 대한 액세스를 관리합니다. 기본적으로 버킷 소유자는 각 로그 파일에 대한 `FULL_CONTROL` 권한을 보유합니다. 로그 전송 소유자가 버킷 소유자와 다른 경우에는 권한이 없습니다. 로그 전송 계정에는 `READ` 및 `WRITE` 권한이 부여됩니다. 자세한 내용은 *Amazon S3 사용 설명서*의 [액세스 제어 목록(ACL) 개요](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)를 참조하세요.

# Amazon S3에 게시하는 흐름 로그 생성
<a name="flow-logs-s3-create-flow-log"></a>

Amazon S3 버킷을 생성하고 구성한 후에는 네트워크 인터페이스, 서브넷 및 VPC에 대한 흐름 로그를 생성할 수 있습니다.

**사전 조건**

흐름 로그를 생성하는 IAM 보안 주체는 대상 Amazon S3 버킷에 흐름 로그를 게시하는 데 필요한 다음 권한이 있는 IAM 역할을 사용해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogDelivery",
        "logs:DeleteLogDelivery"
      ],
      "Resource": "*"
    }
  ]
}
```

------

**콘솔을 사용하여 흐름 로그를 생성하는 방법**

1. 다음 중 하나를 수행하세요.
   + [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다. 탐색 창에서 **Network Interfaces**를 선택합니다. 네트워크 인터페이스의 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Your VPCs**를 선택합니다. VPC에 대한 확인란을 선택합니다.
   + [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)에서 Amazon VPC 콘솔을 엽니다. 탐색 창에서 **Subnets**를 선택합니다. 서브넷의 확인란을 선택합니다.

1. **작업**, **흐름 로그 생성**을 선택합니다.

1. **필터(Filter)**에서 로깅할 IP 트래픽 데이터의 유형을 지정합니다.
   + **수락** - 수락한 트래픽만 로그합니다.
   + **거부** - 거부한 트래픽만 로그합니다.
   + **모두** – 허용 및 거부된 트래픽을 로그합니다.

1. **최대 집계 간격(Maximum aggregation interval)**에서 흐름이 캡처되어 흐름 로그 레코드로 집계되는 최대 기간을 선택합니다.

1. **대상**에서 **Amazon S3 버킷으로 전송(Send to an Amazon S3 bucket)**을 선택합니다.

1. **S3 버킷 ARN**의 경우 기존 Amazon S3 버킷의 Amazon 리소스 이름(ARN)을 지정합니다. 필요한 경우 하위 폴더를 포함할 수 있습니다. 예를 들어 `my-bucket`이란 이름의 버킷에 `my-logs`란 이름의 하위 폴더를 지정하려면 다음 ARN을 사용하세요.

   `arn:aws:s3:::my-bucket/my-logs/`

   버킷에 `AWSLogs`를 하위 폴더 이름으로 사용할 수 없습니다. 이것은 예약된 용어입니다.

   버킷을 소유한 경우, 자동으로 리소스 정책을 생성하여 버킷에 연결합니다. 자세한 내용은 [Amazon S3 버킷의 흐름 로그에 대한 권한](flow-logs-s3-permissions.md) 단원을 참조하세요.

1. **로그 레코드 형식**에서 흐름 로그 레코드의 형식을 지정합니다.
   + 기본 흐름 로그 레코드 형식을 사용하려면 **AWS 기본 형식**을 선택하세요.
   + 사용자 지정 형식을 만들려면 **사용자 지정 형식**을 선택하세요. **로그 형식**에 대해 흐름 로그 레코드에 포함할 필드를 선택하세요.

1. **추가 메타데이터**에서 Amazon ECS의 메타데이터를 로그 형식으로 포함할지 선택합니다.

1. **로그 파일 형식**의 경우 로그 파일의 형식을 지정합니다.
   + **Text** – 일반 텍스트. 이것은 기본 형식입니다.
   + **Parquet** – Apache Parquet은 열 기반 데이터 형식입니다. Parquet 형식의 데이터에 대한 쿼리는 일반 텍스트 데이터에 대한 쿼리에 비해 10배에서 100배 빠릅니다. Gzip 압축을 사용하는 Parquet 형식 데이터는 Gzip 압축을 사용하는 일반 텍스트보다 스토리지 공간을 20% 적게 사용합니다.

1. (선택 사항) Hive 호환 S3 접두사를 사용하려면 **Hive 호환 S3 접두사**,**활성화**를 선택합니다.

1. (선택 사항) 흐름 로그를 시간당 분할하려면**1시간마다 (60분)**을 선택합니다.

1. (선택 사항) 흐름 로그에 태그를 추가하려면**새 태그 추가**를 선택하여 태그 키와 값을 지정하십시오.

1. **흐름 로그 생성**을 선택합니다.

**명령줄 도구를 사용하여 Amazon S3에 게시하는 흐름 로그 생성**

다음 명령 중 하나를 사용합니다.
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html)(AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html)(AWS Tools for Windows PowerShell)

다음 AWS CLI 예시에서는 지정된 VPC의 모든 트래픽을 캡처하고 지정된 Amazon S3 버킷에 흐름 로그를 전송하는 흐름 로그를 생성합니다. `--log-format` 파라미터는 흐름 로그 레코드의 사용자 지정 형식을 지정합니다.

```
aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-00112233344556677 --traffic-type ALL --log-destination-type s3 --log-destination arn:aws:s3:::flow-log-bucket/custom-flow-logs/ --log-format '${version} ${vpc-id} ${subnet-id} ${instance-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${tcp-flags} ${type} ${pkt-srcaddr} ${pkt-dstaddr}'
```

# Amazon S3로 흐름 로그 레코드 보기
<a name="view-flow-log-records-s3"></a>

Amazon S3 콘솔을 사용하여 흐름 로그 레코드를 볼 수 있습니다. 흐름 로그를 생성하면 콘솔에 표시되는 데 몇 분 정도 걸릴 수도 있습니다.

로그 파일은 압축된 상태입니다. Amazon S3 콘솔을 사용해 로그 파일을 열면 압축이 해제되고 흐름 로그 레코드가 표시됩니다. 파일을 다운로드하는 경우, 압축을 해제해야 흐름 로그 레코드를 볼 수 있습니다.

**Amazon S3에 게시된 흐름 로그 레코드를 보려면**

1. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. 버킷 이름을 선택하여 세부 정보 페이지를 엽니다.

1. 로그 파일이 있는 폴더로 이동합니다. 예: *prefix*/AWSLogs/*account\$1id*/vpcflowlogs/*region*/*year*/*month*/*day*/.

1. 파일 이름 옆에 있는 확인란을 선택한 다음에 **Download**(다운로드)를 선택합니다.

또한 Amazon Athena를 사용해 로그 파일의 흐름 로그 레코드를 쿼리할 수도 있습니다. Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 더 쉽게 분석할 수 있는 대화식 쿼리 서비스입니다. 자세한 내용은 *Amazon Athena 사용 설명서*의 [Amazon VPC 흐름 로그 쿼리 방법](https://docs.aws.amazon.com/athena/latest/ug/vpc-flow-logs.html)을 참조하세요.