Amazon S3에 흐름 로그 게시 - Amazon Virtual Private Cloud

Amazon S3에 흐름 로그 게시

흐름 로그는 흐름 로그 데이터를 Amazon S3에 게시할 수 있습니다. Amazon S3에 흐름 로그를 게시할 때는 Vended 로그에 대한 데이터 수집 및 아카이브 요금이 부과됩니다. 자세한 내용은 Amazon CloudWatch 요금을 참조하세요.

흐름 로그와 함께 사용할 Amazon S3 버킷을 만드는 방법은 Amazon Simple Storage Service 시작 안내서버킷 생성을 참조하세요.

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

다중 계정 로깅에 대한 자세한 내용은 AWS 솔루션 라이브러리의 중앙 로깅을 참조하세요.

흐름 로그 파일

플로우 로그는 플로우 로그 레코드를 수집하여 로그 파일로 통합한 다음 해당 로그 파일을 5분 간격으로 Amazon S3 버킷에 게시합니다. 각 로그 파일에는 이전 5분 동안 기록된 IP 트래픽에 대한 흐름 로그 레코드가 포함됩니다.

로그 파일의 최대 크기는 75MB입니다. 로그 파일이 5분 내에 파일 크기 제한에 도달하면 흐름 로그가 흐름 로그 레코드 추가를 중지합니다. 그런 다음 플로우 로그를 Amazon S3 버킷에 게시하고 새 로그 파일을 만듭니다.

로그 파일은 플로우 로그의 ID, 리전 및 생성된 날짜에 따라 결정된 폴더 구조를 사용하여 지정된 Amazon S3 버킷에 저장됩니다. 버킷 폴더 구조는 다음 형식을 사용합니다.

bucket_ARN/optional_folder/AWSLogs/aws_account_id/vpcflowlogs/region/year/month/day/log_file_name.log.gz

마찬가지로 로그 파일의 파일 이름은 흐름 로그의 ID, 리전 및 흐름 로그 서비스에 의해 생성된 날짜와 시간에 따라 결정됩니다. 파일 이름은 다음 형식을 사용합니다. 타임스탬프는 YYYYMMDDTHHmmZ 형식을 사용합니다.

aws_account_id_vpcflowlogs_region_flow_log_id_timestamp_hash.log.gz

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

arn:aws:s3:::my-flow-log-bucket/AWSLogs/123456789012/vpcflowlogs/us-east-1/2018/06/20/123456789012_vpcflowlogs_us-east-1_fl-1234abcd_20180620T1620Z_fe123456.log.gz

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

Amazon S3에 플로우 로그를 게시하는 IAM 보안 주체에 대한 IAM 정책

계정에 있는 IAM 사용자 같은 IAM 보안 주체에는 Amazon S3 버킷에 플로우 로그를 게시할 충분한 권한이 있어야 합니다. 여기에는 흐름 로그를 생성하고 게시하기 위한 특정 logs: 작업을 수행할 수 있는 권한이 포함됩니다. IAM 정책에 다음 권한이 포함되어야 합니다.

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

Amazon S3 버킷의 플로우 로그에 대한 권한

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

다음 버킷 정책은 흐름 로그에 로그를 게시할 수 있는 권한을 부여합니다. 버킷에 다음 권한이 포함된 정책이 이미 있는 경우 정책은 그대로 유지됩니다. 개별 AWS 계정 ARN 대신 로그 전송 서비스 보안 주체에 이 권한들을 부여하는 것이 좋습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} }, { "Sid": "AWSLogDeliveryCheck", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": ["s3:GetBucketAcl", "s3:ListBucket"], "Resource": "arn:aws:s3:::bucket_name" } ] }

흐름 로그를 생성하는 사용자가 버킷을 소유하고 버킷에 대한 PutBucketPolicy 권한을 보유하고 있으며, 버킷에 적합한 로그 전송 권한이 포함된 정책이 없는 경우, 이전 정책이 버킷에 자동으로 연결됩니다. 이 정책은 버킷에 연결된 모든 기존 정책을 덮어씁니다.

흐름 로그를 생성하는 사용자가 버킷을 소유하지 않거나 해당 버킷에 대한 GetBucketPolicyPutBucketPolicy가 없는 경우, 흐름 로그 생성이 실패합니다. 이 경우 버킷 소유자가 위의 정책을 수동으로 버킷에 추가하고 흐름 로그 생성자의 AWS 계정 ID를 지정해야 합니다. 자세한 내용은 Amazon Simple Storage Service Console 사용 설명서S3 버킷 정책을 추가하려면 어떻게 해야 합니까?를 참조하십시오. 버킷이 여러 계정으로부터 흐름 로그를 수신하는 경우, Resource 요소 입력 내용을 각 계정의 AWSLogDeliveryWrite 정책 설명에 추가합니다. 예를 들어, 다음 버킷 정책이 AWS 계정 123123123123456456456456이 흐름 로그를 log-bucket이란 이름의 버킷의 flow-logs란 이름의 폴더에 게시하도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/123123123123/*", "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/456456456456/*" ], "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} }, { "Sid": "AWSLogDeliveryCheck", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": ["s3:GetBucketAcl", "s3:ListBucket"], "Resource": "arn:aws:s3:::log-bucket" } ] }

SSE-KMS 사용할 경우 필요한 CMK 키 정책

Amazon S3-관리형 키(SSE-S3)를 사용한 서버 측 암호화 또는 AWS Key Management Service(SSE-KMS)에 저장된 고객 관리형 키(CMK)를 사용한 서버 측 암호화를 활성화하여 Amazon S3 버킷의 데이터를 보호할 수 있습니다. 자세한 내용은 Amazon S3 사용 설명서서버 측 암호화를 사용하여 데이터 보호를 참조하세요.

SSE-KMS를 사용하면 AWS 관리형 CMK 또는 고객 관리형 CMK를 사용할 수 있습니다. AWS 관리형 CMK에서는 교차 계정 전송을 사용할 수 없습니다. 흐름 로그는 로그 배달 계정에서 전달되므로 교차 계정 전달에 대한 액세스 권한을 부여해야 합니다. S3 버킷에 대한 교차 계정 액세스 권한을 부여하려면 버킷 암호화를 활성화할 때 고객 관리형 CMK를 사용하고 고객 관리형 CMK의 Amazon 리소스 이름(ARN)을 지정합니다. 자세한 내용은 Amazon S3 사용 설명서AWS KMS를 사용한 서버 측 암호화 지정을 참조하세요.

고객 관리형 CMK에서 SSE-KMS를 사용할 때는 S3 버킷의 버킷 정책이 아니라 CMK의 키 정책에 다음을 추가해야 VPC 흐름 로그가 S3 버킷에 쓸 수 있습니다.

{ "Sid": "Allow VPC Flow Logs to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

Amazon S3 로그 파일 권한

필요한 버킷 정책 외에도, Amazon S3는 ACL(액세스 제어 목록)을 사용하여 플로우 로그에서 생성한 로그 파일에 대한 액세스를 관리합니다. 기본적으로 버킷 소유자는 각 로그 파일에 대한 FULL_CONTROL 권한을 보유합니다. 로그 전송 소유자가 버킷 소유자와 다른 경우에는 권한이 없습니다. 로그 전송 계정에는 READWRITE 권한이 부여됩니다. 자세한 내용은 Amazon Simple Storage Service 개발자 안내서ACL(액세스 제어 목록) 개요를 참조하십시오.

Amazon S3에 게시하는 흐름 로그 생성

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

콘솔을 사용하여 네트워크 인터페이스에 대한 흐름 로그를 생성하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 네트워크 인터페이스(Network Interfaces)를 선택합니다.

  3. 하나 이상의 네트워크 인터페이스를 선택하고 작업(Actions), 흐름 로그 생성(Create flow log)을 선택합니다.

  4. 필터(Filter)에서 로깅할 IP 트래픽 데이터의 유형을 지정합니다. 모두(All)를 선택하여 수락된 트래픽 및 거부된 트래픽을 로깅하거나, 거부됨(Rejected)을 선택하여 거부된 트래픽만을 기록하거나, 수락 완료(Accepted)를 선택해 수락된 트래픽만을 기록합니다.

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

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

  7. S3 버킷 ARN에서 기존 Amazon S3 버킷의 Amazon 리소스 이름(ARN)을 지정합니다. 버킷 ARN에 하위 폴더를 포함할 수 있습니다. 버킷에 AWSLogs를 하위 폴더 이름으로 사용할 수 없습니다. 이것은 예약된 용어입니다.

    예를 들어 my-logs이란 이름의 버킷에 my-bucket이란 이름의 하위 폴더를 지정하려면 다음 ARN을 사용하십시오.

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

    버킷을 소유한 경우, 자동으로 리소스 정책을 생성하여 버킷에 연결합니다. 자세한 내용은 Amazon S3 버킷의 플로우 로그에 대한 권한 단원을 참조하십시오.

  8. 형식(Format)에 흐름 로그 레코드의 형식을 지정하십시오.

    • 기본 흐름 로그 레코드 형식을 사용하려면 AWS 기본 형식을 선택하세요.

    • 사용자 지정 형식을 만들려면 사용자 지정 형식을 선택하십시오. 로그 형식(Log format)에 대해 흐름 로그 레코드에 포함할 필드를 선택하십시오.

      작은 정보

      기본 형식 필드가 포함된 사용자 지정 흐름 로그를 생성하려면 먼저 [AWS 기본 형식(AWS default format)]을 선택하고 [형식 미리 보기(Format preview)]에서 필드를 복사한 다음 [사용자 지정 형식(Custom format)]을 선택하고 텍스트 상자에 필드를 붙여 넣습니다.

  9. (선택 사항) 태그 추가(Add Tag)를 선택하여 흐름 로그에 태그를 적용합니다.

  10. Create를 선택합니다.

콘솔을 사용하여 VPC 또는 서브넷에 대한 흐름 로그를 만들려면

  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔을 엽니다.

  2. 탐색 창에서 VPC 또는 서브넷(Subnets)을 선택합니다.

  3. 하나 이상의 VPC 또는 서브넷을 선택한 다음 작업(Actions), 흐름 로그 생성(Create flow log)을 선택합니다.

  4. 필터(Filter)에서 로깅할 IP 트래픽 데이터의 유형을 지정합니다. 모두(All)를 선택하여 수락된 트래픽 및 거부된 트래픽을 로깅하거나, 거부됨(Rejected)을 선택하여 거부된 트래픽만을 기록하거나, 수락 완료(Accepted)를 선택해 수락된 트래픽만을 기록합니다.

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

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

  7. S3 버킷 ARN에서 기존 Amazon S3 버킷의 Amazon 리소스 이름(ARN)을 지정합니다. 버킷 ARN에 하위 폴더를 포함할 수 있습니다. 버킷에 AWSLogs를 하위 폴더 이름으로 사용할 수 없습니다. 이것은 예약된 용어입니다.

    예를 들어 my-logs이란 이름의 버킷에 my-bucket이란 이름의 하위 폴더를 지정하려면 다음 ARN을 사용하십시오.

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

    버킷을 소유한 경우, 자동으로 리소스 정책을 생성하여 버킷에 연결합니다. 자세한 내용은 Amazon S3 버킷의 플로우 로그에 대한 권한 단원을 참조하십시오.

  8. 형식(Format)에 흐름 로그 레코드의 형식을 지정하십시오.

    • 기본 흐름 로그 레코드 형식을 사용하려면 AWS 기본 형식을 선택하세요.

    • 사용자 지정 형식을 만들려면 사용자 지정 형식을 선택하십시오. 로그 형식에 대해 흐름 로그 레코드에 포함할 각 필드를 선택하십시오.

  9. (선택 사항) 태그 추가(Add Tag)를 선택하여 흐름 로그에 태그를 적용합니다.

  10. Create를 선택합니다.

명령줄 도구를 사용하여 Amazon S3에 게시하는 플로우 로그를 만들려면

다음 명령 중 하나를 사용합니다.

다음 AWS CLI 예제는 VPC vpc-00112233344556677의 모든 트래픽을 캡처하고 flow-log-bucket이라는 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/my-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에서 흐름 로그 레코드 처리

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

또한 Amazon Athena를 사용해 로그 파일의 플로우 로그 레코드를 쿼리할 수도 있습니다. Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 더 쉽게 분석할 수 있는 대화식 쿼리 서비스입니다. 자세한 내용은 Amazon Athena 사용 설명서Amazon VPC 흐름 로그 쿼리 방법을 참조하십시오.