【问题标题】:Unable to SSH into AWS EC2 instance with instance metadata turned off无法通过 SSH 连接到实例元数据已关闭的 AWS EC2 实例
【发布时间】:2022-01-31 03:53:55
【问题描述】:

如果在 instance metadata service 关闭的情况下启动 EC2 实例,我将无法通过 SSH 连接。

ec2.runInstances({ ... MetadataOptions: {
  HttpEndpoint: 'disabled'..
})

但是,如果我在启用 MetadataOptions 的情况下启动并在实例完成启动后通过 modify-instance-metadata-options 调用禁用它,这不是问题。这是记录在案的行为吗?我在任何地方的文档中都找不到明确提到它。

注意 - 这不是安全组、网络 ACL 等问题。

【问题讨论】:

  • 您能否提供您正在使用的命令的完整示例?
  • 那会很有帮助。另外,为什么要关闭元数据?问题是,AWS 实例很难直接通过 SSH 连接。
  • 通过 ec2 js sdk 是普通的ec2.runInstance。如果我将MetadataOptions: {HttpEndpoint: 'disabled'} 添加到该函数的参数中,我将无法再通过 ssh 登录。出于安全原因,我必须关闭元数据(我们的客户可以在我们为他们提供的服务器上运行命令)
  • 您检查过/var/log/cloud-init-output.log 文件吗?它包含用户数据脚本的日志,并且可能表明在启动过程中出现了问题。您收到的错误是什么?尝试ssh -vvv 并编辑您的问题以显示生成的日志消息。
  • 我在通过 Web 界面启动 EC2 并禁用元数据选项时遇到了完全相同的问题。似乎它在配置时从元数据端点提取 SSH 密钥,因此禁用元数据会破坏它。这非常令人困惑,因为从来没有任何警告表明 SSH 对不起作用。

标签: amazon-web-services amazon-ec2


【解决方案1】:

我也注意到了这一点。似乎禁用 IMDS 会破坏以下所有内容:

  • SSH 访问中断;未填充默认用户(即 root 或 ubuntu)的 authorized_keys 文件,因为 EC2 密钥对通常在实例元数据中提供。
  • Cloud-init/Cloud-config(又名“userdata”)不运行。用户数据通常在http://instance-data.:8773 上提供,但在禁用 IMDS 时不可用。

因此,如果您希望从启动的那一刻起禁用 IMDS,似乎唯一可行的解​​决方法是创建您自己的 AMI,并在其中支持您自己的配置(即 SSH 授权密钥)。 Packer 常用于以这种方式构建 AMI。

另一种方法是允许 EC2 实例配置文件在有条件的范围内调用 ModifyInstanceMetadataOptions 实例只能影响自身,然后在设置脚本的末尾调用 aws ec2 modify-instance-metadata-options --http-endpoint disabled。一旦实例以这种方式将自己锁定,它就无法自行解锁,因为它不再能够通过 IMDS 端点访问 STS 令牌。

【讨论】:

    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-10-30
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多