如何查看已连接到 Amazon EFS 的 Amazon EC2 实例列表?

上次更新时间:2021 年 2 月 17 日

我想查看挂载到 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 实例列表。

解决方法

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI

执行以下步骤一次。完成这些步骤后,每次您需要列出挂载到 Amazon EFS 的客户端 IP 地址时,只需运行查询以创建当前列表即可。

创建一个日志组

1.   打开 CloudWatch 控制台,然后选择 Logs(日志)
2.   选择 Actions(操作)菜单,然后选择 Create Log Group(创建日志组)
3.   输入日志组名称,然后选择 Create Log Group(创建日志组)

创建具有将流日志发布到 CloudWatch Logs 的权限的 Identity and Access Management (IAM) 角色

获取 Amazon EFS 的挂载目标使用的弹性网络接口列表

注意:Amazon EFS 在每个可用区都将有不同的挂载目标。

1.   打开 Amazon EFS 控制台
2.   选择特定的 Amazon EFS 并记下每个挂载目标的网络接口 ID

创建流日志

1.   打开 Amazon EC2 控制台,然后选择 Network Interfaces(网络接口)
2.   选中您在第 3 步中记下的被该挂载目标使用的所有弹性网络接口。
3.   选择 Actions(操作)菜单,然后选择 Create flow log(创建流日志)。创建流日志时请使用以下值:

      筛选条件:请选择 All(全部)
    目标:请选择Send to CloudWatch Logs(发送到 CloudWatch Logs)    
      目标日志组:请选择您在第 1 步中创建的日志组。
      IAM 角色:请选择您在第 2 步中创建的 IAM 角色。

4.   选择 Create(创建)
5.   选择您为其创建了日志流的特定弹性网络接口,从而监控流日志状态。选择屏幕底部的流日志。验证状态活动
6.   第一个流日志应会在大约 10 分钟内推送到 CloudWatch Logs。

验证流日志已在 CloudWatch Logs 中

1.   打开 CloudWatch 控制台,然后选择 Logs(日志)
2.   选择您在第 1 步中创建的日志组
3.   验证您在第 4 步中创建的所有日志流都已出现。每个弹性网络接口都有不同的日志流。

运行查询

要在 CloudWatch Logs Insights 中运行查询:

1.   在 CloudWatch 控制台中,选择 Insights
2.   从下拉菜单中选择您在第 1 步中创建的日志组。
3.   选择您要查看流日志的时间段(最近 15 分钟、30 分钟、1 小时)。
4.   输入以下查询:

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

注意:上述查询会检查为所有挂载目标生成的所有流日志,然后筛选目标端口设置为“端口=2049”(Amazon EFS 客户端通过 NFS 端口 2049 连接到挂载目标)的日志。检索出所有的唯一源 IP(Amazon EFS 客户端 IP 地址)后按最活跃的客户端连接排序。活跃性更具流日志中的条目数量来确定。

5.   选择 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) 运行查询:

1.   设置好 VPC 流日志后,您可以使用 AWS CLI 命令来运行查询。

2.   验证 AWS CLI 已更新到最新版本:

$ pip install --upgrade awscli

3.   验证已经安装 jq:

yum install -y jq

4.   使用以下查询参数运行下面的 AWS CLI 查询:

log-group-name:输入您在第 1 步中创建的日志组名称。

start-time/end-time:这些值位于 Unix/Epoch 时间中。使用 epochconverter.com 中的转换器将类可读的时间戳转换为 Unix/Epoch 时间。

test.json:您可以在每次运行此命令时根据需要更改 json 文件名称。更改名称可确保以前的输出不会与新输出合并。

sleep:此值(单位为秒)在 CloudWatch Logs Insights 执行查询时作为延迟使用。输入的值取决于您要查看多久的流日志。如果您要查看较长时间段(例如数周)的日志,则应增加休眠时间值。

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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?