转换为使用 实例元数据服务版本 2
如果要将实例配置为仅接受实例元数据服务版本 2(IMDSv2)调用,我们建议您使用以下工具和转换途径。
转换为 IMDSv2 的工具
以下工具可以帮助您识别、监控和管理软件从 imdsv1 到 imdsv2 的转换。有关如何使用这些工具的说明,请参阅要求 IMDSv2 的建议途径。
- Amazon 软件
-
最新版本的 Amazon CLI 和 Amazon SDK 均支持 IMDSv2。要使用 IMDSv2,请更新 EC2 实例以使用最新版本。有关支持 IMDSv2 的最低 Amazon 开发工具包版本,请参阅 使用支持的 Amazon 开发工具包。
所有的 Amazon Linux 2 和 Amazon Linux 2023 软件包都支持 IMDSv2。Amazon Linux 2023 默认禁用 IMDSv1。
- IMDS Packet Analyzer
-
IMDS Packet Analyzer 是一个开源工具,用于识别和记录您的实例启动阶段和运行时阶段的 IMDSv1 调用。通过分析这些日志,您可以精确地识别对您的实例进行 imdsv1 调用的软件,并确定需要更新哪些内容以仅在您的实例上支持 IMDSv2。您可以从命令行运行 IMDS Packet Analyzer,也可以将其作为服务安装。有关更多信息,请参阅 GitHub 上的 Amazon ImdsPacketAnalyzer
。 - CloudWatch
-
CloudWatch 提供以下两个指标来监控实例:
MetadataNoToken:IMDSv2 使用由令牌支持的会话,而 IMDSv1 不使用。MetadataNoToken指标跟踪对使用 IMDSv1 的实例元数据服务(IMDS)的调用次数。通过查看该指标是否为零,您可以确定是否以及何时将所有软件升级为使用 IMDSv2。MetadataNoTokenRejected:禁用 IMDSv1 后,您可以使用MetadataNoTokenRejected指标来跟踪 IMDSv1 调用被尝试和拒绝的次数。通过跟踪该指标,您可以确定您的软件是否需要更新以使用 IMDSv2。有关更多信息,请参阅 实例指标。
- 启动 API
-
新实例:使用 RunInstances API 启动要求使用 IMDSv2 的新实例。有关更多信息,请参阅 为新实例配置实例元数据选项。
现有实例:使用 ModifyInstanceMetadataOptions API 要求在现有实例上使用 IMDSv2。有关更多信息,请参阅 为现有实例修改实例元数据选项。
Amazon EC2 Auto Scaling 组启动的新实例:为了要求在 Amazon EC2 Auto Scaling 组启动的所有新实例上使用 IMDSv2,您的 Amazon EC2 Auto Scaling 组可以使用启动模板或启动配置。当您创建启动模板或创建启动配置时,必须配置
MetadataOptions参数以要求使用 IMDSv2。Amazon EC2 Auto Scaling 组将使用新的启动模板或启动配置来启动新实例,但现有实例不受影响。Amazon EC2 Auto Scaling 组中的现有实例:使用 ModifyInstanceMetadataOptions API 以要求在现有实例上使用 IMDSv2,或者终止实例,Amazon EC2 Auto Scaling 组将使用在新的启动模板或启动配置中定义的实例元数据选项设置启动新的替换实例。
- AMI
-
将
ImdsSupport参数设置为v2.0的 AMI 将启动默认需要 imdsv2 的实例。Amazon Linux 2023 配置了ImdsSupport = v2.0。新 AMI:创建新 AMI 时,使用 register-image CLI 命令将
v2.0参数设置为ImdsSupport。现有 AMI:修改现有 AMI 时,使用 modify-image-attribute CLI 命令将
ImdsSupport参数设置为v2.0。有关更多信息,请参阅 配置 AMI。
- IAM policy 和 SCP
-
您可以使用 IAM policy 或 Amazon Organizations 服务控制策略(SCP)来控制用户,具体如下所示:
-
除非将实例配置为使用 IMDSv2,否则无法使用 RunInstances API 启动实例。
-
无法使用 ModifyInstanceMetadataOptions API 修改正在运行的实例以重新启用 IMDSv1。
IAM policy 或 SCP 必须包含以下 IAM 条件键:
-
ec2:MetadataHttpEndpoint -
ec2:MetadataHttpPutResponseHopLimit -
ec2:MetadataHttpTokens
如果 API 或 CLI 调用中的参数与包含该条件键的策略中指定的状态不一致,则 API 或 CLI 调用将失败并显示
UnauthorizedOperation响应。此外,您还可以选择额外的保护层以强制从 IMDSv1 更改为 IMDSv2。在与通过 EC2 角色凭证调用的 API 相关的访问管理层上,您可以在 IAM 策略或 Amazon Organizations 服务控制策略(SCP)中使用条件键。具体来说,通过在 IAM policy 中使用值为
ec2:RoleDelivery的条件键2.0,使用从 IMDSv1 获取的 EC2 角色凭证进行的 API 调用将会收到UnauthorizedOperation响应。通过使用 SCP 所需的该条件,可以更广泛地实现相同的效果。这会确保通过 IMDSv1 提供的凭证不能实际用于调用 API,因为任何不符合指定条件的 API 调用将会收到UnauthorizedOperation错误。有关示例 IAM policies,请参阅 使用实例元数据。有关 SCP 的更多信息,请参阅《Amazon Organizations User Guide》中的 Service control policies。
-
- 声明性策略
-
使用声明性策略(Amazon Organizations 的一项功能)可以集中设置并强制执行 IMDSv2,使其成为整个组织的默认 IMDS 版本。有关策略示例,请参阅《Amazon Organizations 用户指南》中的支持的声明性策略部分中的实例元数据默认值选项卡。
要求 IMDSv2 的建议途径
在使用上述工具时,我们建议您按照以下途径转换为 IMDSv2:
步骤1:识别 IMDSv2=optional 的实例,并审核 imdsV1 使用情况
要评测 IMDSv2 迁移范围,请识别配置为允许 IMDSv1 或 IMDSv2 的实例,并审核 imdsv1 调用。
-
识别配置为允许 IMDSv1 或 IMDSv2 的实例:
-
审核每个实例上的 IMDSv1 调用:
使用 CloudWatch 指标
MetadataNoToken。此指标显示对实例上 IMDS 的 IMDSv1 调用次数。有关更多信息,请参阅实例指标。 -
识别您的实例上进行 IMDSv1 调用的软件:
使用开源 IMDS Packet Analyzer
在实例启动阶段和运行时操作期间识别和记录 IMDSv1调用。使用此信息确定要更新的软件,以使您的实例准备好仅使用 IMDSv2。您可以从命令行运行 IMDS Packet Analyzer,也可以将其作为服务安装。
步骤 2:将软件更新为 IMDSv2
将在您的实例上使用角色凭证的所有 SDK、CLI 和软件更新为与 IMDSv2 兼容的版本。有关更新 CLI 的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的安装或更新最新版本的 Amazon CLI。
步骤 3:在实例上要求 IMDSv2
在通过 MetadataNoToken 指标确认零个 IMDSv1 调用后,请将现有实例配置为需要 IMDSv2。此外,将所有新实例配置为需要 IMDSv2。换句话说,在所有现有实例和新实例上禁用 IMDSv1。
-
将现有实例配置为需要 IMDSv2:
注意
您可以在正在运行的实例上修改此设置。此更改立即生效,无需重启实例。
有关更多信息,请参阅 要求使用 IMDSv2。
-
禁用 IMDSv1 后监控是否存在问题:
-
使用 CloudWatch 指标
MetadataNoTokenRejected跟踪 IMDSv1 调用尝试次数以及被拒绝的次数。 -
如果
MetadataNoTokenRejected指标记录了遇到软件问题的实例上的 IMDSv1 调用,则表明该软件需要更新才能使用 IMDSv2。
-
-
将新实例配置为需要 IMDSv2:
步骤 4:将 IMDSv2=required 设置为默认值
您可以将 IMDSv2=required 设置为账户或组织级别的默认配置。这确保所有新启动的实例都自动配置为需要 IMDSv2。
-
设置账户级别默认值:
有关更多信息,请参阅 将 IMDSv2 设置为账户默认设置。
-
或者,使用声明性策略设置组织级别默认值:
使用声明性策略将 IMDSv2 的组织默认值为 required。有关策略示例,请参阅《Amazon Organizations 用户指南》中的支持的声明性策略部分中的实例元数据默认值选项卡。
步骤 5:强制实例要求 IMDSv2
使用以下 IAM 或 SCP 条件键强制使用 IMDSv2:
-
ec2:MetadataHttpTokens -
ec2:MetadataHttpPutResponseHopLimit -
ec2:MetadataHttpEndpoint
这些条件键控制 RunInstances 和 ModifyInstanceMetadataOptions API 及相应 CLI 的使用。如果创建了策略,并且 API 调用中的参数与使用条件键的策略中指定的状态不匹配,API 或 CLI 调用将失败并显示 UnauthorizedOperation 响应。
有关示例 IAM policies,请参阅 使用实例元数据。