镜像/快照权限管控与数据防泄露

建议限制镜像导出、镜像与快照共享权限,防止数据的意外泄露。

安全风险

镜像的共享与导出功能在提升开发与部署效率的同时,也带来了数据安全挑战。不当的权限配置或疏忽的镜像制作流程,可能导致核心代码、环境配置乃至敏感数据的有意或无意泄露。例如,内部员工可能利用导出权限复制生产环境的服务器镜像,从而获取敏感信息。此外,在镜像制作过程中未能彻底清理测试数据、配置文件或临时凭证,会导致这些信息在镜像的后续使用和共享中意外暴露,构成安全隐患:

  • 静态数据快照: 镜像和快照捕获了云服务器在特定时间点的完整状态。这不仅包括操作系统和应用程序文件,还可能包含各类敏感数据,例如:

    • 身份凭证: SSH私钥、API AccessKey、数据库连接字符串、应用的硬编码密码。

    • 用户数据: 企业核心代码、数据库信息、用户隐私等。

    • 系统痕迹: Shell操作历史 (.bash_history)、临时文件、各类应用的日志与缓存。

  • 权限扩散风险: 共享和导出操作,本质上是将数据的访问权限从一个可控的内部环境,扩散到了一个更广的、甚至不可控的范围。一旦包含敏感信息的镜像被共享给错误的账号,或被导出到线下环境,将导致数据被滥用或被黑产利用。

最佳实践

镜像创建

创建镜像前,请务必登录实例检查是否存在敏感信息。若镜像中存在SSH密钥等登录信息,即使创建实例时选择重新绑定密钥对或使用账密方式登录,镜像中已有的密钥信息也会被写入实例中,即用户使用镜像创建实例后,原镜像中的密钥对、账密在新的实例依然可以使用。

  • 清理用户密码信息: 

    • Linux:检查并清理 /etc/shadow 和 /etc/passwd 中的非必要用户信息。

    • Windows:运行系统准备工具 Sysprep 来通用化镜像,此操作会重置计算机SID、清除当前用户信息并要求在下次启动时创建新账户或重设管理员密码。同时,应在本地用户和组 (lusrmgr.msc) 中手动删除所有非必要的本地账户。

  • 删除所有SSH密钥: 

    • Linux:删除 /root/.ssh 和所有用户家目录 (/home/*/.ssh)下的密钥文件(特别是id_rsaauthorized_keys)。

    • Windows:删除 C:\Users\Administrator\.ssh 和所有用户家目录 (C:\Users\*\\.ssh) 下的密钥文件。同时,检查并清空凭据管理器 (Credential Manager) 中的所有缓存凭据。

  • 清理Shell历史记录: 

    • Linux:执行 history -c 并删除/root/.bash_history和所有用户家目录(/home/*/.bash_history)的 .bash_history 文件。

    • Windows:执行 Clear-History 清除当前 PowerShell 会话历史,并删除所有用户的 PowerShell 历史记录文件(通常位于 AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt)

  • 清理临时文件与日志: 

    • Linux:清空 /tmp、/var/tmp 目录,并对 /var/log 下的日志进行审查和清理。

    • Windows:运行磁盘清理(cleanmgr.exe)工具清空系统临时文件、回收站等。同时,使用 wevtutil cl <LogName> (例如 wevtutil cl System) 命令或在事件查看器中,手动清除所有主要的 Windows 事件日志(如应用程序、安全、系统日志)。

  • 移除硬编码凭证: 检查应用程序代码和配置文件,确保没有硬编码的数据库密码、API密钥等敏感信息。

  • 清理业务数据和应用缓存: 清理Web服务器、数据库等应用中的业务数据和缓存目录。

合规能力

拦截:禁止镜像导出、镜像和快照共享

对于可信度较低的RAM(访问控制)用户或用户组,应明确禁止其对核心镜像资产进行高危操作。通过配置“拒绝”(Deny)策略,强制性地阻止其共享和导出镜像。在组织或账户层面通过RAM Policy策略,主动拦截镜像导出、镜像和快照共享的行为。

  • 针对企业用户:

    1. 使用阿里云主账号登录资源目录控制台,单击左侧菜单栏的管控策略创建自定义权限策略,粘贴以下JSON内容。

      禁止镜像导出、镜像与快照共享的操作。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "ecs:ExportImage",
                      "ecs:ModifyImageSharePermission"
                  ],
                  "Resource": "*",
                  "Effect": "Deny"
              },
              {
                  "Action": [
                      "resourcesharing:CreateResourceShare",
                      "resourcesharing:AssociateResourceShare"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "resourcesharing:RequestedResourceType": [
                              "Snapshot",
                              "Image"
                          ]
                      }
                  },
                  "Effect": "Deny"
              }
          ]
      }
    2. 在资源目录中选择合适的节点绑定策略,策略将对目录下的账号产生拦截效果。

  • 针对非企业用户:

    1. 使用阿里云主账号登录RAM控制台,单击左侧菜单栏的权限策略,创建一条与上述内容相同的自定义策略。

    2. 通过管理权限策略授权将该条权限策略授权给RAM用户、RAM用户组或RAM角色。