Amazon EFS에 연결된 Amazon EC2 인스턴스 목록을 보려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 11월 7일

Amazon Elastic File System(Amazon EFS)을 마운트한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 목록을 보려고 합니다. 어떻게 해야 합니까?

간략한 설명

각 Amazon EFS 마운트 대상의 탄력적 네트워크 인터페이스에 대한 트래픽은 VPC 흐름 로그를 사용하여 추적됩니다. 이 흐름 로그를 Amazon CloudWatch Logs로 푸시할 수 있습니다. CloudWatch Logs Insights를 사용하면 마운트 대상의 탄력적 네트워크 인터페이스에 대한 트래픽 흐름이 필터링되어 특정 타임스탬프에 Amazon EFS를 마운트한 Amazon EC2 인스턴스의 목록이 제공됩니다.

​해결 방법

다음 단계를 한 번 수행합니다. 이 단계를 완료한 후 Amazon EFS를 마운트하는 클라이언트의 IP 주소를 나열하고 싶을 때마다 쿼리를 실행하여 현재 목록을 생성합니다.

1.    로그 그룹 생성:

CloudWatch 콘솔을 열고 [Logs]를 선택합니다.
[Actions] 메뉴를 선택한 다음 [Create Log Group]을 선택합니다.
[Log Group Name]을 입력한 다음 [Create Log Group]을 선택합니다.

2.    CloudWatch Logs에 흐름 로그를 게시할 권한이 있는 Identity and Access Management(IAM) 역할 생성:

IAM 콘솔을 열고 새 IAM 역할을 생성합니다.
IAM 역할에 연결된 IAM 정책에 VPC 흐름 로그를 CloudWatch에 게시할 수 있는 권한이 포함되어야 하며, 흐름 로그 서비스가 이 역할을 부여받도록 허용하는 신뢰 관계가 있어야 합니다.

3.    Amazon EFS의 마운트 대상에 사용되는 탄력적 네트워크 인터페이스 목록 가져오기:

참고: Amazon EFS의 마운트 대상은 각 가용 영역마다 다릅니다.

Amazon EFS 콘솔을 엽니다.
특정 Amazon EFS를 선택하고 각 마운트 대상의 [Network Interface ID]를 기록해 둡니다.

4.    흐름 로그 생성:

Amazon EC2 콘솔을 열고 [Network Interfaces]를 선택합니다.
3단계에서 기록해 둔, 마운트 대상에 사용 중인 탄력적 네트워크 인터페이스를 모두 선택합니다.
[Actions] 메뉴를 선택한 다음 [Create flow log]을 선택합니다. 흐름 로그를 생성할 때 다음 값을 사용합니다.

    필터: [All] 선택
    대상: [Send to CloudWatch Logs]    
    대상 로그 그룹: 1단계에서 생성한 로그 그룹 선택
    IAM 역할: 2단계에서 생성한 IAM 역할 선택

[Create]를 선택합니다.
흐름 로그를 생성한 특정 탄력적 네트워크 인터페이스를 선택하여 흐름 로그 상태를 모니터링합니다. 화면 하단에서 [Flow Logs]를 선택합니다. [Status]가 [Active]인지 확인합니다.
첫 번째 흐름 로그는 약 10분 후에 CloudWatch Logs로 푸시됩니다.

5.    흐름 로그가 CloudWatch Logs에 있는지 확인:

CloudWatch 콘솔을 열고 [Logs]를 선택합니다.
1단계에서 생성한 [Log Group]을 선택합니다.
4단계에서 생성한 모든 로그 스트림이 표시되는지 확인합니다. 탄력적 네트워크 인터페이스마다 로그 스트림이 다릅니다.

6.    쿼리 실행:

CloudWatch Logs Insights에서 쿼리를 실행하려면 다음을 수행합니다.

CloudWatch 콘솔에서 [Insights]를 선택합니다.
드롭다운 메뉴에서 1단계에서 생성한 로그 그룹을 선택합니다.
흐름 로그를 검토할 기간을 선택합니다(최근 15분, 30분, 1시간).
다음 쿼리를 입력합니다.

filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

위의 쿼리는 모든 마운트 대상에 대해 생성된 모든 흐름 로그를 검토하고 대상 포트가 포트=2049로 설정된 로그를 필터링합니다(Amazon EFS 클라이언트는 NFS 포트 2049를 통해 마운트 대상에 연결함). 모든 고유 소스 IP(Amazon EFS 클라이언트 IP)가 검색되고 클라이언트 연결의 사용 빈도를 기준으로 정렬됩니다. 사용 빈도는 흐름 로그의 항목 수에 따라 결정됩니다.

[Run Query]를 선택합니다. Amazon EFS를 마운트한 모든 Amazon EC2 인스턴스의 프라이빗 IP 목록이 출력에 포함되어 있습니다.

다음은 쿼리 출력의 예입니다.

#          srcAddr              FlowLogEntries
1      172.31.12.60                 78
2      172.31.57.233                36
3      172.31.53.144                33
4      172.31.74.79                 30
5      172.31.23.86                 26
6      172.31.63.215                25

AWS 명령줄 인터페이스(AWS CLI)에서 쿼리를 실행하려면 다음을 수행합니다.

VPC 흐름 로그를 설정한 후 AWS CLI 명령을 사용하여 쿼리를 실행할 수 있습니다.

AWS CLI가 최신 버전으로 업데이트되었는지 확인합니다.

$ pip install --upgrade awscli

jq가 설치되었는지 확인합니다.

yum install -y jq

해당 쿼리 파라미터를 사용하여 다음 AWS CLI 쿼리를 실행합니다.

log-group-name: 1단계에서 생성한 로그 그룹 이름을 입력합니다.

start-time/end-time: 이 값은 Unix/Epoch 시간으로 지정됩니다. epochconverter.com에서 제공하는 변환기를 사용하여 사람이 읽을 수 있는 타임스탬프를 Unix/Epoch 시간으로 변환합니다.

test.json: 이 명령을 실행할 때마다 json 파일 이름을 선택적으로 변경할 수 있습니다. 이름을 변경하면 이전 출력이 새 출력과 병합되지 않습니다.

sleep: CloudWatch Logs Insights 쿼리가 실행되는 동안 이 값(초)이 지연 시간으로 사용됩니다. 입력되는 값은 흐름 로그를 검토하려는 기간에 따라 달라집니다. 더 긴 기간(예: 주) 동안 로그를 검토하려면 sleep 시간을 늘립니다.

aws logs start-query --log-group-name EFS-ENI-logs --start-time 1549002413 --end-time 1553063276 --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

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?