Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 Amazon Elastic File System(Amazon EFS) 파일 시스템을 탑재했습니다. Amazon EC2 인스턴스 목록을 보고 싶습니다.
간략한 설명
각 Amazon EFS 탑재 대상의 네트워크 인터페이스에 대한 트래픽을 추적하려면 Amazon Virtual Private Cloud(Amazon VPC) 흐름 로그를 사용하십시오. 흐름 로그를 Amazon CloudWatch Logs에 게시합니다. 그런 다음, CloudWatch Logs Insights를 사용하여 탑재 대상의 네트워크 인터페이스에서 트래픽 흐름을 필터링합니다. CloudWatch Logs Insights는 특정 타임스탬프를 사용하여 EFS 파일 시스템이 탑재된 EC2 인스턴스를 식별합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
로그 그룹 만들기
다음 단계를 완료하십시오.
- Amazon CloudWatch 콘솔을 엽니다.
- 탐색 창에서,로그를 선택하고 로그 그룹을 선택합니다.
- 로그 그룹 생성을 선택합니다.
로그 그룹 이름에 이름을 입력합니다.
보존 설정에 보존 설정을 입력합니다.
(선택 사항) AWS Key Management Service(AWS KMS) 키 Amazon 리소스 이름(ARN) 및 태그를 추가합니다.
- 생성을 선택합니다.
CloudWatch Logs에 흐름 로그를 게시할 권한이 있는 IAM 역할 만들기
다음 단계를 완료하십시오.
- AWS Identity and Access Management(IAM) 콘솔을 엽니다.
- 액세스 관리에서 역할을 선택합니다.
- 역할 생성을 선택한 다음, 새 IAM 역할을 만듭니다.
- 역할의 IAM 정책에서 권한을 추가하고 서비스가 역할을 수임하도록 신뢰 정책을 포함합니다.
Amazon EFS 파일 시스템의 탑재 대상 네트워크 인터페이스 가져오기
참고: EFS의 탑재 대상은 각 가용 영역마다 다릅니다.
다음 단계를 완료하십시오.
- EFS 콘솔을 엽니다.
- 파일 시스템에서 EFS 파일 시스템을 선택한 다음, 세부 정보 보기를 선택합니다.
- 네트워크를 선택한 다음, 각 탑재 대상의 네트워크 인터페이스 ID를 기록해 둡니다.
흐름 로그 만들기
다음 단계를 완료하십시오.
-
EC2 콘솔을 엽니다.
-
네트워크 및 보안을 선택한 다음, 네트워크 인터페이스를 선택합니다.
-
탑재 대상이 사용하는 네트워크 인터페이스를 선택합니다.
-
작업 메뉴에서 흐름 로그 생성을 선택합니다.
-
다음 값을 입력합니다.
(선택 사항) 이름에 흐름 로그 이름을 입력합니다.
필터에서 모두를 선택합니다.
최대 집계 간격에서 기본값인 10분 또는 1분을 선택합니다.
대상에서 CloudWatch 로그로 전송을 선택합니다.
대상 로그 그룹에서 로그 그룹을 선택합니다.
IAM 역할에서 해당 IAM 역할을 선택합니다.
로그 레코드 형식에서 AWS 기본 형식 또는 사용자 지정 형식을 선택합니다.
(선택 사항) 태그에 태그를 추가합니다.
-
생성을 선택합니다.
-
흐름 로그 상태를 모니터링하려면 네트워크 인터페이스를 선택한 다음, 흐름 로그를 선택합니다. 상태가 활성인지 확인합니다.
참고: 흐름 로그 시스템은 약 10분 후에 첫 번째 로그를 CloudWatch Logs에 게시합니다.
흐름 로그가 CloudWatch Logs에 있는지 확인
다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서 로그 그룹을 선택합니다.
- 로그 그룹에서 해당 로그 그룹을 선택합니다.
- 모든 로그 스트림이 표시되는지 확인합니다.
참고: 각 네트워크 인터페이스에는 서로 다른 로그 스트림이 있습니다.
CloudWatch Logs Insights를 사용하여 쿼리 실행
다음 단계를 완료하십시오.
- CloudWatch 콘솔을 엽니다.
- 탐색 창에서Logs(로그)를 선택하고 Logs Insights를 선택합니다.
- 로그 그룹을 선택합니다.
- 다음 기간 값 중 하나를 선택합니다. 5분, 30분, 1시간, 3시간, 12시간 또는 사용자 지정.
- 다음 쿼리를 실행합니다.
fields @timestamp, @message | filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc
위 쿼리는 모든 탑재 대상의 흐름 로그를 모두 검토합니다. 쿼리는 대상 포트가 Port=2049로 설정된 로그를 필터링합니다. EFS 클라이언트는 NFS 포트 2049의 탑재 대상에 연결됩니다. 쿼리는 모든 고유 EFS 클라이언트 IP 주소를 검색하고 가장 활발한 클라이언트 연결을 기준으로 정렬합니다. 흐름 로그의 항목 수에 따라 활동 수준이 결정됩니다.
쿼리 출력에는 EFS 파일 시스템이 탑재된 모든 인스턴스의 프라이빗 IP 주소 목록이 있습니다.
쿼리 출력 예시:
# srcAddr FlowLogEntries1 111.22.33.44 782 111.55.66.77 36
3 111.88.99.000 33
start-query 명령 실행
jq가 설치되어 있는지 확인합니다.
yum install -y jq
그 후 다음 start-query 명령을 실행합니다.
aws logs start-query --log-group-name EFS-ENI-Flowlogs --start-time 1643127618 --end-time 1643128901 --query-string 'filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc' > test.json && sleep 10 && jq .queryId test.json | xargs aws logs get-query-results --query-id
명령에서 다음 파라미터를 설정합니다.
- log-group-name에 로그 그룹 이름을 입력합니다.
- start-time 및 end-time에 시작 시간과 종료 시간을 입력합니다.
참고: 이 값은 Unix Epoch 시간을 기준으로 합니다. 읽을 수 있는 타임스탬프로 변환하려면 Epoch 변환기 웹 사이트의 Epoch 및 Unix 타임스탬프 변환 도구를 사용하십시오.
- (선택 사항) test.json의 경우 명령을 실행할 때마다 JSON 파일 이름을 변경할 수 있습니다. 이름을 변경할 때 이전 출력은 새 출력과 병합되지 않습니다.
- sleep의 경우 쿼리가 실행 중일 때 흐름 로그를 검토하려면 지연 시간을 초 단위로 지정합니다.
현재 EFS 파일 시스템을 탑재하는 클라이언트의 IP 주소를 보려면 새 쿼리를 실행합니다.