기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
자세한 내용과 예제 쿼리는 다음을 참조하세요.
Amazon VPC Flow Logs 쿼리(Amazon Athena 사용 설명서)
CloudWatch Logs Insights 쿼리를 VPC 흐름 로그와 함께 사용하려면 어떻게 해야 하나요?
(AWS 지식 센터) CloudWatch Logs Insights 쿼리 구문(Amazon CloudWatch Logs 사용 설명서)
VPC Flow Logs가 캡처하는 정보 유형에 대한 자세한 내용은 Amazon VPC 사용 설명서의 Flow log record examples를 참조하세요.
Note
VPC Flow Logs는 DNS 호스트 이름과 같은 애플리케이션 계층(계층 7) 정보를 캡처하지 않습니다. 보안 요구 사항에 따라 애플리케이션 계층 데이터 분석이 필요한 경우 AWS Network Firewall
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 |