我最近读到了新的 实例元数据服务 - IMDSv2,它修复了 EC2 环境中的 SSRF 攻击。 我了解当我通过 cli 直接使用 EC2 时它是如何工作的。 但我找不到任何信息,需要采取哪些步骤在代表我处理 EC2 实例创建的 Elastic beanstalk 中使用它,以及如何在那里强制执行它。
有人可以告诉我这是否已经或将来可能吗? 我找不到这方面的信息。
提前致谢。
您可以配置 Lambda 函数,以便在 Auto Scaling 组中启动新实例时触发
使用启动模板而不是启动配置可以让您灵活地在 CloudFormation 中设置此参数,但目前没有明确记录的方法。
首先,AWS 提供了一个新的 Cloudwatch 指标,可让您了解正在进行的 IMDS v1 调用的数量。您可以使用它来监控实例上进行 IMDS v1 调用的频率。您可以对其进行设置以监控您的 Elastic Beanstalk 实例。
接下来,我们需要在实例上启用 IMDS v2。为此,我们需要最新版本的 AWS CLI (aws-cli/1.16.287 Python/3.6.8)。 AWS CLI 发布了更新,可以选择在 EC2 下启用/禁用 IMDSv2。
在迁移方面,Elastic Beanstalk 允许您配置所使用的实例。
您可以按照在 Linux 服务器上自定义软件中提供的步骤进行操作,
确保存在最新版本的 AWS CLI。
设置完成后,您可以运行
中所述aws ec2 修改实例元数据选项 --instance-id --profile --http-endpoint 已启用 --http-tokens 需要
您还可以指定要在 Elastic Beanstalk 中的实例启动时运行的命令,如要包含的在 Linux 服务器上自定义软件中所示。
这应该负责在启动时为相应实例配置 IMDSv2。curlhttp://169.254.169.254/latest/meta-data/instance-id | \ xargs -I {} aws ec2 修改实例元数据选项 --instance-id {} --profile --http-端点已启用 --http-tokens 需要
参考资料:
Sandesh 的回答中描述的要简单一些。
如此处所述,对于 AL2023,IMDSv2 由 默认 启用,但对于 AL2 则不启用。
要显式启用 IMDSv2,您可以将以下内容添加到您的.ebextensions
(或在您的 cloudformation 模板中),或使用 Web 控制台,如IMDS 文档中所述:
option_settings:
aws:autoscaling:launchconfiguration:
DisableIMDSv1: true
然后您可以在 Elastic Beanstalk 平台挂钩中使用 IMDSv2,如许多 IMDSv2 文档示例中所述。
举一个例子:您可以在.platform
挂钩中获取 EC2 实例的公共主机名,如下所示:
#!/bin/bash
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") failed"
EC2_PUBLIC_HOSTNAME=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname)
echo "hostname: $EC2_PUBLIC_HOSTNAME"
...
请注意,ip 169.254.169.254
是由 AWS 指定的。