← 中文资源

简体中文版本

加固 Cloud-Init 用户数据

用户数据保持最小、绝不内嵌密钥、禁用口令 SSH,并只用于引导,后续配置交由配置管理或镜像承接。

阅读英文原文

概述

把密钥与冗长脚本塞进用户数据,会让它出现在实例元数据中,并形成无人维护的第二套配置系统。正确做法是让 cloud-init 只做引导,密钥在运行时从密钥管理获取,长期配置则交给配置管理或镜像。

关键步骤

  1. 把用户数据限制为引导内容:用户、SSH 公钥与一次性获取真实配置。
  2. 在运行时从密钥管理获取密钥,绝不内嵌。
  3. 禁用口令认证与 root SSH 登录。
  4. 把长期配置交给配置管理或烘焙镜像。

验证

  • 用户数据短小且可审查。
  • 实例元数据中不含任何凭据。
  • SSH 仅接受密钥登录。
  • 配置有单一事实源。

注意事项

  • 用户数据对能查询实例元数据者可见,必须视为非机密。
  • 经 cloud-init 引导会在开机时依赖外部服务提供密钥与配置。

适用范围

本条目围绕「加固 Cloud-Init 用户数据」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

#cloud-config
users:
  - name: deploy
    ssh_authorized_keys: [ssh-ed25519 AAAA...]
ssh_pwauth: false
disable_root: true
runcmd:
  - [ sh, -c, "curl -fsSL https://config.example.com for real config" ]