跳至内容

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

3 分钟阅读
0

我已将 Amazon Elastic File System (Amazon EFS) 中的 Amazon EFS 文件系统挂载到 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。我想查看 Amazon EC2 实例列表。

简短描述

要跟踪每个 Amazon EFS 挂载目标的网络接口流量,请使用 Amazon Virtual Private Cloud (Amazon VPC) 流日志。将流日志发布到 Amazon CloudWatch Logs。然后,使用 CloudWatch Logs Insights 筛选挂载目标网络接口上的流量。CloudWatch Logs Insights 会使用特定时间戳来识别已挂载 EFS 文件系统的 EC2 实例。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。

创建日志组

完成以下步骤:

  1. 打开 Amazon CloudWatch 控制台。
  2. 在导航窗格中,选择 Logs(日志),然后选择 Log groups(日志组)。
  3. 选择 Create log group(创建日志组)。
    对于 Log group name(日志组名称),输入名称。
    对于 Retention setting(保留设置),输入保留设置。
    (可选)添加 AWS Key Management Service (AWS KMS) 密钥 Amazon 资源名称 (ARN) 和标签。
  4. 选择 Create(创建)。

创建具备向 CloudWatch Logs 发布流日志权限的 IAM 角色

完成以下步骤:

  1. 打开 AWS Identity and Access Management (IAM) 控制台。
  2. 在 Access management(访问管理)下,选择 Roles(角色)。
  3. 选择 Create role(创建角色),然后创建新的 IAM 角色。
  4. 在角色的 IAM 策略中,添加权限并包含能够让服务代入角色的信任策略。

获取 Amazon EFS 文件系统的挂载目标网络接口

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

完成以下步骤:

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

创建流日志

完成以下步骤:

  1. 打开 EC2 控制台。
  2. 选择 Network & Security(网络和安全),然后选择 Network Interfaces(网络接口)。
  3. 选择挂载目标所使用的网络接口。
  4. 在 Actions(操作)菜单中,选择 Create flow log(创建流日志)。
  5. 输入以下值:
    (可选)对于 Name(名称),输入流日志名称。
    对于 Filter(筛选),选择 All(全部)。
    对于 Maximum aggregation interval(最大聚合时间间隔),选择默认的 10 分钟或 1 分钟。
    对于 Destination(目标),选择 Send to CloudWatch logs(发送到 CloudWatch 日志)。
    对于 Destination log group(目标日志组),选择您的日志组。
    对于 IAM role(IAM 角色),选择您的 IAM 角色。
    对于 Log record format(日志记录格式),选择 AWS default format(AWS 默认格式)或 Custom format(自定义格式)。
    (可选)对于 Tags(标签),添加标签。
  6. 选择 Create(创建)。
  7. 要监控流日志状态,请选择您的网络接口,然后选择 Flow logs(流日志)。验证 Status(状态)是否为 Active(活动)。

**注意:**流日志系统大约在 10 分钟后会将第一条日志发布到 CloudWatch Logs。

验证流日志是否在 CloudWatch Logs 中

完成以下步骤:

  1. 打开 CloudWatch 控制台。
  2. 在导航窗格中,选择 Log groups(日志组)。
  3. 对于 Log groups(日志组),选择您的日志组。
  4. 验证所有日志流是否均已显示。
    **注意:**每个网络接口都有不同的日志流。

使用 CloudWatch Logs Insights 运行查询

完成以下步骤:

  1. 打开 CloudWatch 控制台。
  2. 在导航窗格中,选择 Logs(日志),然后选择 Logs Insights。
  3. 选择您的日志组。
  4. 选择以下任一持续时间值: 5 分钟、30 分钟、1 小时、3 小时、12 小时或自定义。
  5. 运行以下查询:
    fields @timestamp, @message | filter dstPort="2049" | stats count(*) as FlowLogEntries by srcAddr | sort FlowLogEntries desc

上述查询会查看所有挂载目标的全部流日志。该查询会筛选目标端口设置为 Port=2049 的日志。EFS 客户端通过 NFS 端口 2049 连接到挂载目标。该查询会检索所有唯一的 EFS 客户端 IP 地址,并按客户端连接活跃度从高到低排序。流日志中的条目数量决定了活动级别。

查询输出包含已挂载 EFS 文件系统的所有实例的私有 IP 地址列表。

查询输出示例:

#          srcAddr              FlowLogEntries1      111.22.33.44                 782      111.55.66.77                36
3      111.88.99.000                33

运行 start-query 命令

检查 jq 是否已安装:

yum install -y jq

然后,运行以下 start-query 命令:

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

在命令中,设置以下参数:

  • 对于 log-group-name,输入您的日志组名称。
  • 对于 start-time 和 end-time,输入您的开始时间和结束时间。
    **注意:**这些值以 Unix Epoch 时间格式显示。要转换为可读的时间戳,请使用 Epoch 转换器网站上的 Epoch 和 Unix 时间戳转换工具。
  • (可选)对于 ** test.json**,每次运行命令时都可以更改 JSON 文件名。更改名称后,之前的输出不会与新输出合并。
  • 对于 sleep,若要在查询运行时查看流日志,请以秒为单位指定延迟时间。

要查看当前挂载 EFS 文件系统的客户端的 IP 地址,请运行新的查询。

AWS 官方已更新 1 年前