在云计算环境中,操作系统镜像作为用户创建云实例的基础模板,其安全性和可靠性直接影响着用户应用和数据的安全。一旦操作系统镜像存在安全漏洞,可能导致大规模的安全事件,如数据泄露、恶意软件传播等。因此,研究如何给云计算用户提供安全可靠的操作系统镜像具有极为重要的现实意义。

操作系统镜像的分类

  • 云平台镜像(stock image):云平台镜像是指云计算平台官方提供的,经过平台定制化、验证过的操作系统镜像。由云平台负责镜像的生命周期管理。
  • 用户自定义镜像(custom image):用户自定义的镜像通常保存了用户特定的配置,安装了特定的软件。由用户自己管理镜像的生命周期。
  • 第三方镜像(catalog image):第三方镜像是指第三方的供应商提供的操作系统镜像,由第三方供应商负责管理镜像的生命周期,由云平台负责审核与验证。

操作系统镜像的生命周期

  • 可用/已验证(Available):表示镜像可以正常用于创建虚拟机、裸金属实例。
  • 已弃用(Deprecated):表示镜像的操作系统版本已经不是最新的稳定版本。
  • 已淘汰(Obsolete):表示镜像的操作系统版本已经结束支持。

如何保证操作系统镜像的安全与可靠

保证操作系统镜像的安全与可靠需要贯穿其生命周期的每一个环节。

构建阶段

  • 选择最新的稳定版本。操作系统供应商们一般都有专门的安全团队,他们会定期的发布安全补丁和更新,能够及时地修复已知的安全漏洞。使用最新的稳定版本可以有效的降低已知安全漏洞带来的隐患。
  • 构建脚本的开发应该符合职责分离原则(Separation of Duties),如开发者提交的代码需要其他人的评审才能合进主干等,以避免来自团队内部有意或者无意的安全隐患。
  • 构建脚本的集成应该符合一定的条件,如单元测试覆盖率大于某个阈值、静态代码扫描没有Code Smell等。
  • 最小化安装原则。根据用户的需求,之在镜像中包含必要的软件包。这样可以减少不必要软件带来的安全风险,因为每一个额外的软件都可能存在潜在的安全漏洞。
  • 及时更新构建服务器本身的操作系统版本和软件包。
  • 建立和维护Devops pipeline,仅允许特定的人可以访问构建服务器,其他开发人员只需要利用Pipeline来开发和构建镜像。
  • 下载供应商镜像时,需要检验其检验和。既可以保证其合法性,又能利用本地缓存避免重复下载。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [[ ${downloaded_checksum} == ${calculated_checksum} ]]
    then
    msg "Valid checksum"
    else
    msg "Downloading iso failed: invalid checksum."
    msg "Removing existing iso: ${iso_fullpath}..."
    rm -rf ${iso_fullpath}
    msg "Existing iso ${iso_fullpath} removed."
    exit 1
    fi
  • 根据操作系统官方给定的安全指南来定制化镜像。如SUSE的安全规范:https://documentation.suse.com/sles/15-SP2/html/SLES-all/book-security.html
  • 周期性配合平台做安全与合规评估,如GDPR等。

测试阶段

  • 要要完备的测试流程,包括构建代码的单元测试UT,镜像的功能测试FVT,渗透测试(Penetration Test)等
  • 功能测试用例示例:
    • image_responds_to_ping
    • linux_image_allows_ssh
    • does_linux_vm_have_a_resolv_conf_file
    • linux_ping_by_ip
    • linux_ping_by_name
    • linux_check_boot_disk_size
    • linux_check_distribution
    • linux_check_for_required_modules
    • linux_check_valid_rhel_license
    • linux_check_valid_software_update
    • linux_vm_with_two_nics_and_two_volumes
    • does_vm_stop_and_start_correctly
    • does_vm_reboot_correctly
    • linux_check_eth_interfaces_are_up
    • linux_check_eth_interface_addresses
    • attach_and_detach_volume_to_vsi
    • linux_check_anyuser_login_over_ssh
    • attach_and_detach_nic_to_vsi
    • linux_check_no_swap
    • check_kernel_boot_options
    • check_cloud_init
    • check_source_repos
    • check_no_vagrant_account
    • check_no_user_account_present
    • check_for_lock_files
    • check_systemd_service_units
    • linux_check_for_no_mail_packages

发布阶段

  • 开发环境、预发布环境(staging)、产品环境要有严格的访问权限控制,SOD原则同样适用
  • 产品环境的发布需要相关负责人审批
  • 提供镜像签名以便用户或者其他云服务检验
  • 记录完备的镜像生命周期审计日志
  • 定期发布新的版本以包含最新的安全补丁
  • 提示用户及时更新软件包

为云计算用户提供安全可靠的操作系统镜像需要从构建源头到使用过程的全方位考量和精心设计。通过选择安全的基础操作系统、遵循最小化安装原则、在构建过程中进行安全加固、保障镜像存储与分发的安全以及建立使用过程中的安全监控与更新机制等一系列措施,可以有效提高操作系统镜像的安全性和可靠性,为云计算用户提供一个安全稳定的运行环境。