Amazon EFS에 연결된 Amazon EC2 인스턴스 목록을 확인하려면 어떻게 해야 하나요?

5분 분량
0

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

간략한 설명

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

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

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

로그 그룹 생성

  1. CloudWatch 콘솔을 엽니다.
  2. 탐색 창에서 **로그(Logs)**를 선택한 다음, **로그 그룹(Log groups)**을 선택합니다.
  3. **로그 그룹 생성(Create log group)**을 선택합니다.
  4. 로그 그룹 이름, 보존 설정 및 선택적 KMS 키 ARN을 입력합니다. 여기에 태그를 추가할 수도 있습니다.
  5. **생성(Create)**을 선택합니다.

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

  1. IAM 콘솔을 엽니다.
  2. 탐색 창의 **액세스 관리(Access management)**에서 **역할(Roles)**을 선택합니다.
  3. 역할 생성(Create role)새 IAM 역할 생성(create a new IAM role)을 선택합니다.
  4. IAM 역할에 연결된 IAM 정책에는 VPC 흐름 로그를 CloudWatch에 게시할 수 있는 권한이 포함되어 있어야 합니다. 마찬가지로 역할에 흐름 로그 서비스로 하여금 해당 역할을 맡도록 허용하는 신뢰 관계가 있어야 합니다.

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

참고: Amazon EFS의 탑재 대상은 가용 영역마다 다릅니다.

  1. Amazon EFS 콘솔을 엽니다.
  2. **파일 시스템(File systems)**에서 특정 Amazon EFS를 선택하고 **세부 정보 보기(View details)**를 선택합니다.
  3. **네트워크(Network)**를 클릭하고 각 탑재 대상의 네트워크 인터페이스 ID를 기록합니다.

흐름 로그 생성

  1. Amazon EC2 콘솔을 엽니다.
  2. **네트워크 및 보안(Network & Security)**를 선택한 다음, **네트워크 인터페이스(Network Interfaces)**를 선택합니다.
  3. 탑재 대상에서 사용 중인 모든 탄력적 네트워크 인터페이스를 선택합니다.
  4. 작업(Actions) 메뉴에서 **흐름 로그 생성(Create flow log)**을 선택합니다. 흐름 로그를 생성할 때 다음 값을 사용합니다.
  • 이름(Name): 선택 사항
  • 필터(Filter): 모두(All) 선택
  • 최대 집계 간격(Maximum aggregation interval): 기본값 10분 또는 1분 중에서 선택
  • 대상(Destination): CloudWatch Logs로 전송(Send to CloudWatch logs) 선택
  • 대상 로그 그룹(Destination log group): 사용자가 생성한 로그 그룹 선택
  • IAM 역할(IAM role): 사용자가 생성한 IAM 역할 선택
  • 로그 레코드 형식(Log record format): AWS 기본 형식(AWS default format) 또는 사용자 지정 형식(Custom format) 중에서 선택합니다.
  • 태그(Tag): 선택 사항
  1. **생성(Create)**을 선택합니다.
  2. 흐름 로그를 생성한 특정 탄력적 네트워크 인터페이스를 선택하여 흐름 로그 상태를 모니터링합니다. 화면 하단에서 **흐름 로그(Flow logs)**를 선택합니다. **상태(Status)**가 **활성(Active)**인지 확인합니다.
  3. 첫 번째 흐름 로그는 약 10분 후에 CloudWatch Logs로 푸시됩니다.

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

  1. CloudWatch 콘솔을 열고 **로그(Logs)**를 선택합니다.
  2. 1단계에서 생성한 로그 그룹을 선택합니다.
  3. 생성한 모든 로그 스트림이 지금 나타나는지 확인합니다. 탄력적 네트워크 인터페이스마다 로그 스트림이 다릅니다.

쿼리 실행

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

  1. CloudWatch 콘솔에서 **로그(Logs)**를 선택한 다음, **로그 인사이트(Logs Insight)**를 선택합니다.
  2. 드롭다운 메뉴에서 생성한 로그 그룹을 선택합니다.
  3. 흐름 로그를 검토할 기간(5분, 30분, 1시간, 3시간, 12시간 또는 사용자 지정)을 선택합니다.
  4. 아래 쿼리를 실행합니다.
fields @timestamp, @message | 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      111.22.33.44                 78
2      111.55.66.77                36
3      111.88.99.000                33

AWS CLI를 사용하여 쿼리 실행 <br>

AWS CLI에서 쿼리를 실행하려면 다음 단계를 수행합니다.

  1. VPC 흐름 로그를 설정한 후 AWS CLI 명령을 사용하여 쿼리를 실행할 수 있습니다.
  2. AWS CLI가 최신 버전으로 업데이트되었는지 확인합니다.
$ pip install --upgrade awscli
  • jq가 설치되었는지 확인합니다.
yum install -y jq
  • 해당 쿼리 파라미터를 사용하여 다음 AWS CLI 쿼리를 실행합니다.
  • log-group-name: 사용자가 생성한 로그 그룹 이름을 입력합니다.
  • start-time/end-time: 이 값은 Unix/Epoch 시간으로 지정됩니다. epoch converter를 사용하여 사람이 읽을 수 있는 타임스탬프를 Unix/Epoch 시간으로 변환합니다.
  • test.json: 이 명령을 실행할 때마다 json 파일 이름을 선택적으로 변경할 수 있습니다. 이름을 변경하면 이전 출력이 새 출력과 병합되지 않습니다.
  • sleep: CloudWatch Logs Insights 쿼리가 실행되는 동안 이 값(초)이 지연 시간으로 사용됩니다. 입력되는 값은 흐름 로그를 검토하려는 기간에 따라 달라집니다. 더 긴 기간(예: 주) 동안 로그를 검토하려면 sleep 시간을 늘립니다.
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

AWS 공식
AWS 공식업데이트됨 2년 전