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

上次更新时间:2022 年 2 月 1 日

我想查看挂载到 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 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI

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

创建一个日志组

  1. 打开 CloudWatch console(CloudWatch 控制台)。
  2. 在导航窗格中,选择 Logs(日志),然后选择 Log groups(日志组)。
  3. 选择 Create log group(创建日志组)。
  4. 输入Log group name(日志组名称)、Retention setting(保留设置)和可选的 KMS key ARN(KMS 密钥 ARN)。您也可以在此处添加 Tags(标签)。
  5. 选择 Create(创建)。

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

  1. 打开 IAM console(IAM 控制台)。
  2. 在导航窗格中的 Access management(访问管理)下,选择 Roles(角色)。
  3. 选择 Create role(创建角色)并创建新的 IAM 角色
  4. 附加到该 IAM 角色的 IAM 策略必须包含将 VPC 流日志发布到 CloudWatch 的权限,并且必须具有允许流日志服务代入该角色的信任关系

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

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

  1. 打开 Amazon EFS 控制台
  2. File systems(文件系统)下,选择特定的 Amazon EFS,然后选择 View details(查看详细信息)。
  3. 单击 Network(网络),记下每个挂载目标的 Network Interface ID(网络接口 ID)。

创建流日志

  1. 打开 Amazon EC2 控制台
  2. 选择 Network & Security(网络和安全,)然后选择 Network Interfaces(网络接口)。
  3. 选择挂载目标正在使用的所有弹性网络接口。
  4. Actions(操作)菜单中,选择 Create flow log(创建流日志)。创建流日志时请使用以下值:
    • Name:(名称)可选
    • Filter(筛选条件):请选择 All(全部)
    • Maximum aggregation interval(最长聚合间隔):从默认 10 分钟或 1 分钟中选择
    • Destination:(目标)请选择 Send to CloudWatch logs(发送到 CloudWatch Logs)
    • Destination log group(目标日志组):请选择您创建的日志组
    • IAM role(IAM 角色):选择您创建的 IAM 角色
    • Log record format(日志记录格式):从 AWS default format(AWS 默认格式)或 Custom format(自定义格式)中选择。
    • 标签:可选
  5. 选择 Create(创建)。
  6. 选择您为其创建了日志流的特定弹性网络接口,从而监控流日志状态。在屏幕底部,选择 Flow logs(流日志)。验证 Status(状态)为 Active(活动)。
  7. 大约 10 分钟后,第一个流日志将被推送到 CloudWatch 日志中。

验证流日志已在 CloudWatch Logs 中

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

运行查询

要在 CloudWatch Logs Insights 中运行查询:

  1. CloudWatch console(CloudWatch 控制台)中,选择 Logs(日志),然后选择 Logs Insights(日志见解)。
  2. 从下拉菜单中选择您创建的日志组。
  3. 选择要查看流日志的持续时间(5 分钟、30 分钟、1 小时、3 小时、12自定义)。
  4. 输入下面的查询。
| filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

注意:此查询会查看为所有挂载目标生成的所有流日志。它会筛选目标端口设置为 Port=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 运行查询

    要从 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 转换器将人类可读的时间戳转换为 Unix/Epoch 时间。
    • test.json:您可以在每次运行此命令时根据需要更改 json 文件名称。更改名称可确保以前的输出不会与新输出合并。
    • sleep:此值(单位为秒)在 CloudWatch Logs Insights 执行查询时作为延迟使用。输入的值取决于您要查看多久的流日志。如果您要查看较长时间段(例如数周)的日志,则应增加休眠时间值。
    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

    这篇文章对您有帮助吗?


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