VPC의 보안 요구 사항 결정 - AWS 권장 가이드

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

VPC의 보안 요구 사항 결정

중요

테스트 환경에서 VPC의 아웃바운드 트래픽 보안 아키텍처를 설계하고 테스트하는 것이 가장 좋습니다. 개발 환경에서 아키텍처 변경을 테스트하면 의도하지 않은 시스템 동작을 실시간으로 푸시할 위험을 줄일 수 있습니다.

네트워크의 아웃바운드 트래픽 패턴을 변경하기 전에 애플리케이션이 의도한 대로 작동하는 데 필요한 트래픽 패턴을 이해하는 것이 중요합니다. 이 정보는 네트워크를 재설계할 때 허용할 트래픽 패턴과 거부할 트래픽 패턴을 식별하는 데 도움이 될 수 있습니다.

VPC의 기존 아웃바운드 트래픽 패턴을 분석하려면 먼저 VPC Flow Logs를 켭니다. 그런 다음 테스트 환경을 사용하여 다양한 사용 시나리오를 통해 애플리케이션을 실행하고 흐름 로그에서 시뮬레이션된 트래픽을 분석합니다.

VPC Flow Logs는 VPC의 인바운드 및 아웃바운드 IP 트래픽을 기록합니다. 그러면 Amazon VPC가 Amazon Simple Storage Service(S3)나 Amazon CloudWatch로 로그를 보냅니다. 다음 도구 중 하나를 사용하여 로그를 보고 분석할 수 있습니다.

  • (Amazon S3용) Amazon Athena

  • (CloudWatch용) CloudWatch Logs Insights

자세한 내용과 예제 쿼리는 다음을 참조하세요.

VPC Flow Logs가 캡처하는 정보 유형에 대한 자세한 내용은 Amazon VPC 사용 설명서의 Flow log record examples를 참조하세요.

Note

VPC Flow Logs는 DNS 호스트 이름과 같은 애플리케이션 계층(계층 7) 정보를 캡처하지 않습니다. 보안 요구 사항에 따라 애플리케이션 계층 데이터 분석이 필요한 경우 AWS Network Firewall을 배포하여 필요한 세부 정보를 캡처할 수 있습니다. 자세한 내용은이 가이드의 AWS Network Firewall 및 DNS 호스트 이름을 사용하여 VPC의 아웃바운드 트래픽 제한 섹션을 참조하세요.

VPC Flow Logs를 사용할 때 VPC의 아웃바운드 트래픽 분석 모범 사례

Amazon Athena 또는 CloudWatch Logs Insights 쿼리를 사용하여 VPC Flow Logs를 분석할 때는 다음을 수행해야 합니다.

  • 애플리케이션이 사용하는 리소스에 연결된 탄력적 네트워크 인터페이스를 통해 흐르는 인바운드 및 아웃바운드 트래픽을 식별하고 분석합니다.

  • NAT 게이트웨이에 연결된 네트워크 인터페이스를 통해 흐르는 애플리케이션 트래픽을 식별하고 분석합니다.

  • 쿼리의 소스 주소를 네트워크 인터페이스의 사설 IP 주소로 설정하여 네트워크 인터페이스의 모든 아웃바운드 트래픽을 캡처해야 합니다.

  • 예상치 못한 트래픽 패턴에만 초점을 맞추도록 쿼리를 작성합니다. (예를 들어, 애플리케이션이 HTTPS API 엔드포인트 같은 타사 엔터티와 통신하는 경우 해당 엔터티를 포함하지 않도록 쿼리를 구성할 수 있습니다.)

  • 각 포트 및 대상 IP 주소의 유효성을 조사합니다. (예를 들어, 아웃바운드 대상 포트 22는 Bastion Host의 경우 정상이거나 SSH를 사용하여 Git에서 리포지토리를 복제하는 호스트일 수 있습니다.)

Note

Amazon Athena를 처음 사용하는 경우 쿼리 결과 위치를 구성해야 합니다. 지침은 Amazon Athena 사용 설명서Athena 콘솔을 사용하여 쿼리 결과 위치 지정을 참조하세요.

Amazon Athena 쿼리 예제

특정 네트워크 인터페이스에서 아웃바운드 관리자 트래픽을 반환하는 Athena 쿼리의 예

다음 Athena 쿼리는 IP 주소가 10.100.0.10인 네트워크 인터페이스에서 아웃바운드 관리 트래픽의 처음 200줄을 반환합니다.

SELECT * FROM "<vpc_flow_logs_table_name>" WHERE interface_id = 'eni-1234567890000000' AND srcaddr LIKE '10.100.0.10' AND dstport < 1024 LIMIT 200;

출력 예제

#

1

version

2

account_id

<account-id>

interface_id

eni-123456789000000

srcaddr

10.32.0.10

dstaddr

11.22.33.44

srcport

36952

dstport

443

protocol

6

packets

25

bytes

5445

start

1659310200

end

1659310225

action

ACCEPT

log_status

정상

date

2022-07-16

Note

이 패턴의 출력 형식은 프레젠테이션용이며 시스템에서 다르게 나타날 수 있습니다.

특정 VPC로부터 가장 많은 트래픽을 수신하는 외부 IP 주소를 반환하는 Athena 쿼리의 예

다음 Athena 쿼리는 '10.32'로 시작하는 CIDR 블록이 있는 VPC에서 가장 많은 아웃바운드 트래픽을 수신하는 외부 IP 주소와 포트를 반환합니다.

SELECT dstport, dstaddr, count(*) AS count FROM "<vpc_flow_logs_table_name>" WHERE dstaddr not like '10.32%' AND interface_id = 'eni-1234567890000000' GROUP BY dstport, dstaddr ORDER BY count desc LIMIT 200;

출력 예제

#

Dstport

Dstaddr

count

1

443

52.x.x.x

1442

2

443

63.x.x.x

1201

3

443

102.x.x.x

887

특정 VPC에서 거부된 아웃바운드 트래픽을 반환하는 Athena 쿼리의 예

다음 Athena 쿼리는 '10.32'로 시작하는 CIDR 블록이 있는 VPC에서 거부된 아웃바운드 트래픽을 반환합니다.

SELECT *              FROM "<vpc_flow_logs_table_name>"  WHERE srcaddr like '10.32%' AND action LIKE 'REJECT'

출력 예제

#

1

version

2

account_id

<account-id>

interface_id

eni-123456789000000

srcaddr

10.32.0.10

dstaddr

11.22.33.44

srcport

36952

dstport

443

protocol

6

packets

25

bytes

5445

start

1659310200

end

1659310225

action

REJECT

log_status

정상

date

2022-07-16

Note

이 패턴의 출력 형식은 프레젠테이션용이며 시스템에서 다르게 나타날 수 있습니다.

흐롬 로그 레코드에 대한 자세한 내용은 Amazon VPC 사용 설명서의 흐름 로그 레코드를 참조하세요.

CloudWatch 로그 인사이트 쿼리 예제

특정 네트워크 인터페이스에서 아웃바운드 관리자 트래픽을 반환하는 CloudWatch Logs Insights 쿼리의 예

다음 CloudWatch Logs Insights 쿼리는 IP 주소가 10.100.0.10인 네트워크 인터페이스에서 아웃바운드 관리 트래픽의 처음 200개 결과를 반환합니다.

fields @timestamp, @message | filter interfaceId = 'eni-1234567890000000' | filter srcAddr = '10.100.0.10' | filter dstPort < 1024 | limit 200

출력 예제

필드

@ingestionTime

1659310250813

@log

<account-id>:/aws/vpc/flowlogs

@logStream

eni-123456789000000-all

@message

2 <account-id> eni-123456789000000 10.100.0.10 11.22.33.44 36952 443 6 25 5445 1659310200 1659310225 ACCEPT OK

@timestamp

1659310200000

accountId

<account-id>

작업

ACCEPT

bytes

5445

dstAddr

11.22.33.44

dstPort

443

end

1659310225

interfaceId

eni-123456789000000

logStatus

정상

packets

25

프로토콜

6

srcAddr

10.100.0.10

srcPort

36952

시작

1659310200

version

2

특정 VPC로부터 가장 많은 트래픽을 수신하는 외부 IP 주소를 반환하는 CloudWatch Logs Insights 쿼리의 예

다음 CloudWatch Logs Insights 쿼리는 '10.32'로 시작하는 CIDR 블록이 있는 VPC에서 가장 많은 아웃바운드 트래픽을 수신하는 외부 IP 주소와 포트를 반환합니다.

filter @logstream = 'eni-1234567890000000' | stats count(*) as count by dstAddr, dstPort | filter dstAddr not like '10.32' | order by count desc | limit 200

출력 예제

#

dstAddr

dstPort

count

1

52.x.x.x

443

439

2

51.79.x.x

63.x.x.x

25

특정 VPC에서 거부된 아웃바운드 트래픽을 반환하는 CloudWatch Logs Insights 쿼리의 예

다음 CloudWatch Logs Insights 쿼리는 '10.32'로 시작하는 CIDR 블록이 있는 VPC에서 거부된 아웃바운드 트래픽을 반환합니다.

filter @logstream = 'eni-0123456789000000' | fields @timestamp, @message | filter action='REJECT'

출력 예제

필드

@ingestionTime

1666991000899

@log

<account-id>:/aws/vpc/flowlogs

@logStream

eni-0123456789000000-all

@message

2 <account-id> 'eni-0123456789000000' 185.x.x.x 10.10.2.222 55116 11211 17 1 43 1666990939 1666990966 REJECT OK

@timestamp

1666990939000

accountId

<account-id>

작업

REJECT

bytes

43

dstAddr

10.10.2.222

dstPort

11211

end

1666990966

interfaceId

'eni-0123456789000000'

logStatus

정상

packets

1

프로토콜

17

srcAddr

185.x.x.x

srcPort

55116

시작

1666990939

version

2