如何查看已连接到 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

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?