在环境实例上配置实例元数据服务 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在环境实例上配置实例元数据服务

实例元数据是有关 Amazon Elastic Compute Cloud (Amazon EC2) 实例的数据,可供应用程序用来配置或管理正在运行的实例。实例元数据服务(IMDS)是实例上的组件,在实例上进行编码,用于安全访问实例元数据。这些代码可以是您的环境实例上的 Elastic Beanstalk 平台代码 AWS ,也可以是您的应用程序可能正在使用的软件开发工具包,甚至是您的应用程序自己的代码。有关更多信息,请参阅《Amazon EC2 用户指南》中的实例元数据和用户数据

代码可以使用以下两种方法之一从正在运行的实例访问实例元数据:实例元数据服务版本 1 (IMDSv1) 或实例元数据服务版本 2 (IMDSv2)。IMDSv2 使用面向会话的请求,并防范了多种类型的漏洞,这些漏洞可用于尝试访问 IMDS。有关这两种方法的信息,请参阅 Amazon EC2 用户指南中的配置实例元数据服务

IMDS 平台支持

较早的 Elastic Beanstalk 平台版本支持 IMDSv1。较新的 Elastic Beanstalk 平台版本(所有 Amazon Linux 2 平台版本)支持 IMDSv1 和 IMDSv2。您可以将环境配置为支持这两种方法(默认)或禁用 IMDSv1。

注意

禁用 IMDSv1 需要使用 Amazon EC2 启动模板。在创建或更新环境过程中配置此功能时,Elastic Beanstalk 尝试将环境配置为使用 Amazon EC2 启动模板(如果环境尚未使用启动模板)。在这种情况下,如果您的用户策略缺乏必要的权限,则创建或更新环境可能会失败。因此,我们建议您使用托管用户策略,或者将所需的权限添加到自定义策略中。有关所需权限的详细信息,请参阅创建自定义用户策略

选择 IMDS 方法

在确定希望环境支持的 IMDS 方法时,请考虑以下使用案例:

  • AWS SDK — 如果您的应用程序使用 S AWS DK,请确保使用最新版本的 SDK。软件开发工具包会调用 IM AWS DS,而较新版本的 SDK 尽可能使用 imdsv2。如果您禁用了 IMDSv1,或如果您的应用程序使用较早的 SDK 版本,则 IMDS 调用可能会失败。

  • 您的应用程序代码 — 如果您的应用程序发出 IMDS 调用,请考虑使用 AWS SDK,这样您就可以进行调用,而不是直接发出 HTTP 请求。通过这种方式,您无需进行代码更改即可在 IMDS 方法之间切换。S AWS DK 尽可能使用 imdsv2。

  • Elastic Beanstalk 平台代码 — 我们的代码 AWS 通过 SDK 进行 IMDS 调用,因此在所有支持的平台版本上使用 imdsv2。如果您的代码使用 up-to-date AWS SDK 并通过 SDK 进行所有 IMDS 调用,则可以放心地禁用 imdsv1。

使用 Elastic Beanstalk 控制台配置 IMDS

您可以在 Elastic Beanstalk 控制台中修改 Elastic Beanstalk 环境的 Amazon EC2 实例配置。

使用 Elastic Beanstalk 控制台在 Amazon EC2 实例上配置 IMDS
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Instances (实例) 配置类别中,选择 Edit (编辑)

    Elastic Beanstalk 实例配置窗口中的 IMDS 选项
  5. 设置 Disable IMDSv1(禁用 IMDSv1)以强制实施 IMDSv2。清除 Disable IMDSv1(禁用 IMDSv1)可同时启用 IMDSv1 和 IMDSv2。

  6. 要保存更改,请选择页面底部的 Apply(应用)。

aws:autoscaling:launchconfiguration 命名空间

您可以使用 aws:autoscaling:launchconfiguration 命名空间中的配置选项在环境实例上配置 IMDS。

以下配置文件示例使用 DisableIMDSv1 选项禁用 IMDSv1。

option_settings: aws:autoscaling:launchconfiguration: DisableIMDSv1: true