如何查看已连接到 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 控制台,然后选择日志。
选择操作菜单,然后选择创建日志组。
输入日志组名称,然后选择创建日志组。
2. 创建具有将流日志发布到 CloudWatch Logs 的权限的 Identity and Access Management (IAM) 角色:
打开 IAM 控制台,然后创建一个新的 IAM 角色。
附加到该 IAM 角色的 IAM 策略必须包含将 VPC 流日志发布到 CloudWatch 的权限,并且必须具有允许流日志服务代入该角色的信任关系。
3. 获取 Amazon EFS 的挂载目标使用的弹性网络接口列表:
注意:Amazon EFS 在每个可用区都将有不同的挂载目标。
打开 Amazon EFS 控制台。
选择特定的 Amazon EFS 并记下每个挂载目标的网络接口 ID。
4. 创建流日志:
打开 Amazon EC2 控制台,然后选择网络接口。
选中您在第 3 步中记下的被该挂载目标使用的所有弹性网络接口。
选择操作菜单,然后选择创建流日志。创建流日志时请使用以下值:
筛选条件:请选择全部
目标:请选择发送到 CloudWatch Logs
目标日志组:请选择您在第 1 步中创建的日志组。
IAM 角色:请选择您在第 2 步中创建的 IAM 角色。
选择创建。
选择您为其创建了日志流的特定弹性网络接口,从而监控流日志状态。选择屏幕底部的流日志。验证状态为活动。
第一个流日志应会在大约 10 分钟内推送到 CloudWatch Logs。
5. 验证流日志已到达 CloudWatch Logs:
打开 CloudWatch 控制台,然后选择日志。
选择您在第 1 步中创建的日志组。
验证您在第 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 地址)后按最活跃的客户端连接排序。活跃性更具流日志中的条目数量来确定。
选择运行查询。输出将包含所有挂载到 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