什么是容器注册安全?

容器注册表安全侧重于保护容器注册表,即容器映像的集中存储和分发系统。容器注册机构在容器生态系统中发挥着举足轻重的作用,可确保容器化应用程序的完整性和安全性。正确的容器注册表安全包括使用可信的注册表、实施严格的访问控制、监控漏洞并确保托管服务器的安全。此外,它还要求拒绝不安全的连接并删除陈旧的图像。通过优先考虑容器注册安全,组织可以保障其容器化环境的安全,并维护用户和客户的信任。

 

容器注册安全详解

容器注册表安全是容器生态系统的一个重要组成部分--容器注册表。在更广泛的 容器安全叙述中,注册中心充当容器映像(容器化应用程序的构件)的保管人。因此,集装箱登记处不仅仅是一个存储单元。相反,它是维护和分发应用程序映像完整性的连接点。

了解容器注册表

众所周知,在 容器化 环境中,应用程序连同其依赖项都被包进容器中,使其具有可移植性,便于跨平台部署。容器注册中心为这一过程提供了一个位置,在这里可以以一致的方式对容器映像进行版本控制、检索和部署。

那么,容器注册中心就是容器映像的集中存储和分发系统。该注册中心允许开发人员和运营团队存储、管理和共享容器映像,他们将使用这些映像来创建和部署容器化应用程序和 微服务

公共和私人登记处

组织可能会结合使用公共和私有容器注册表来管理其容器映像以及其他工件。

Docker Hub 和 GitHub 包的子功能 GitHub Container Registry 等公共注册中心提供了大量开源映像,组织可将其用作应用程序的基础。这些注册表通常可供任何人访问,使开发人员可以轻松查找和使用预置图像。

但各组织往往有特定的要求和专有软件,因此必须使用私营登记处。

容器注册表/存储库的公共与私有之分

图 1:容器注册表/存储库的公共与私有之分

Azure 容器注册中心、亚马逊弹性容器注册中心和谷歌容器注册中心等私有容器注册中心为存储和管理专有映像及相关工件提供了安全、受控的环境。只有组织内的授权用户才能访问这些注册表,以帮助确保敏感信息和定制图像的安全。

通过结合使用公共和私人注册表,组织可以利用开源图像的优势,同时保持对其专有软件的控制。这种双重方法使组织能够优化其容器管理工作流程,并简化部署过程。

 

容器注册安全的组成部分

鉴于注册表对于容器化环境的运行方式至关重要,而且组织中很容易存储数以万计的映像,因此确保注册表的安全对于 软件开发生命周期的完整性不可或缺。

漏洞可能危及的不仅仅是应用程序。利用配置错误的攻击者可以在未经授权的情况下访问 CI/CD 系统 ,并横向移动以访问底层操作系统。他们有可能操纵合法的 CI/CD 流程,获取敏感的令牌,并转移到生产环境,在生产环境中识别暴露的凭证可能会让他们进入组织的网络。

相关文章云供应管道攻击剖析

注册表安全始于只使用受信任的注册表和库。持续监控漏洞变化是基础,同时还要确保托管服务器的安全,并实施实质性的访问策略。正确的注册表安全性应拒绝不安全的连接,标记或删除过期图像,并执行严格的身份验证和授权限制。

让我们来详细了解一下这些测量方法。

 

在 CI/CD 中促进图像和人工制品的完整性

了解了与图像和人工制品相关的风险,我们就知道实施严格检查以确保其完整性的重要性。考虑实施以下策略。

拒绝不安全的连接

虽然公共注册机构可能允许匿名访问容器映像,但为了防止中间人攻击、未经授权的篡改和未经授权的敏感信息访问,您必须保持安全连接。

要拒绝不安全的连接,可将系统配置为只接受 HTTPS 或 TLS 加密连接等安全协议。首先从可信的证书颁发机构(CA)获取并安装有效的 SSL/TLS 证书。然后,更新服务器或服务配置,强制使用 HTTPS 或 TLS,禁用 HTTP 等不安全协议。根据您的设置,这可能需要调整网络服务器(如 Nginx、Apache)、负载平衡器或应用程序的设置。此外,还可考虑使用 HSTS(HTTP 严格传输安全)等安全功能,指示浏览器在访问您的网站或服务时始终使用安全连接。

删除过期图片

制定一项政策来定义陈旧图像--超过特定时间范围或在一定时间内未使用的图像--并使用注册表工具或应用程序接口来根据政策列出和过滤图像。例如,在 Docker Registry 中,使用 Docker Registry API 检索图像元数据,并按最后推送日期或标签进行过滤。在其他注册表中,可能也有类似的 API 或 CLI 工具。识别出过期镜像后,使用相应的命令或应用程序接口删除它们,确保遵循注册表的垃圾回收最佳实践。

避免第三方注册机构出现 IAM 问题

身份和访问管理(IAM) 对于组织来说至关重要,尤其是在 GitHub 这样的源控制管理系统(SCM)中,代码存储库存储着宝贵的代码和资产。不适当的 IAM 会导致 CI/CD 管道中的安全风险。为了优化资源库的安全和治理,组织可以使用单点登录(SSO)和跨域身份管理系统(SCIM)来管理访问控制。不过,SSO 只适用于 GitHub 企业版,其他许可证可能会面临风险。

为减少涉及 GitHub 账户中的私人电子邮件地址、ghost GitHub 账户和未完成离线操作的问题,应执行双因素身份验证 (2FA)、建立使用专用企业账户的入职协议,并维护用户账户清单。对于支持 SSO 的组织来说,实施 SCIM 可确保自动取消用户配置,并消除通过过期凭证进行访问的情况。应对 IAM 风险有助于保护存储库和 CI/CD 生态系统,并在所有系统中保持较高的安全级别。

相关文章GitHub 组织中的三大 IAM 风险

采用充分的身份验证和授权限制

被授予超过存储库所需权限的身份为权限升级提供了机会,并可能导致未经授权的代码更改、篡改构建流程和访问敏感数据。自动化可帮助验证访问控制、检查用户权限和识别潜在漏洞,使组织能够制定常规的主动措施,如

  • 分析和映射整个工程生态系统中的所有身份。对于每个身份,持续映射身份提供者、授予的权限和使用的权限。确保分析涵盖所有计划访问方法。
  • 删除环境中各系统中每个身份的不必要权限。
  • 确定禁用或删除过期账户的可接受期限。禁用和删除超过此静止期的身份。
  • 摸清所有外部合作者的情况,并根据最少特权原则调整他们的身份。在可能的情况下,为人工账户和程序账户授予有有效期的权限。
  • 禁止员工使用个人电子邮件地址或不属于组织的域名地址访问 SCM、CI 或其他 CI/CD 平台。监控不同系统中的非域名地址,并删除不合规的用户。
  • 禁止用户自行注册系统,并根据需要授予权限。
  • 避免将系统中的基本权限授予所有用户和自动分配用户账户的大型群组。
  • 为每个特定上下文创建专用账户,而不是使用共享账户,并授予特定上下文所要求的确切权限集。

实施安全存储

建立一个安全的防篡改存储库来存储人工制品。启用版本管理以维护人工制品更改的历史记录,实施实时监控以跟踪可疑活动并发出警报。在工件受损的情况下,配置系统以方便回滚到以前的已知良好版本。

进行从开发到生产的完整性验证检查

实施在整个软件交付链中验证资源完整性的流程和技术。开发人员在生成资源时,应使用外部资源签名基础设施对其进行签名。在后续管道阶段使用资源之前,应根据签名机构交叉检查其完整性。

代码签名

SCM 解决方案可为每个贡献者的提交使用唯一密钥签名,防止未签名的提交在管道中继续进行。

人工制品验证软件

专为签名和验证代码及工件而设计的工具,如 Linux 基金会的 Sigstore,可以阻止未经验证的软件在管道中前进。

配置漂移检测

实施措施检测配置漂移,如云环境中的资源未使用已签名的 基础设施即代码 模板进行管理。这种漂移可能表明部署来自不受信任的来源或流程。

采用加密签名

在 CI/CD 管道的每个阶段使用公钥基础设施(PKI)对工件进行加密签名。这种做法是在使用前根据受信任的证书颁发机构验证签名。配置您的 CI/CD 管道,拒绝接受签名无效或缺失的工件,以降低部署被篡改的资源或未经授权的更改的风险。

只使用安全的容器映像

容器映像可能包含漏洞,攻击者可利用这些漏洞未经授权访问容器及其主机。为防止出现这种情况,请使用可靠来源的安全可信容器映像,并定期对其进行扫描。从公共注册表部署容器时,首先扫描容器是否存在恶意软件和漏洞尤为重要。

执行多源验证

采用多源验证策略,利用校验和、数字签名和安全哈希算法等各种来源以及可信存储库验证人工制品的完整性。及时更新加密算法和密钥,以保持其有效性。

第三方资源验证

纳入构建和部署管道的第三方资源,如在构建过程中执行的脚本,应经过严格验证。在使用这些资源之前,先计算它们的哈希值,然后与资源提供者提供的官方哈希值进行比较。

整合安全扫描

在创建镜像时,CI/CD 管道应只使用经过审核的代码(生产批准)。将漏洞扫描工具以及 软件组成分析(SCA)静态应用程序安全测试(SAST) 纳入 CI/CD 管道,以确保在将映像推送到注册表之前映像的完整性,生产部署将从注册表中提取映像。还要确保遵循最佳做法。例如,在删除所有不必要的软件组件、库、配置文件、机密等之前,不要构建镜像。

采取保守、谨慎的方法,可以让小组在开发过程中尽早解决漏洞问题,保持较高的代码质量,同时降低安全事故的风险。选择能与所有注册表类型集成的容器映像扫描解决方案。Prisma Cloud 等平台为管理员提供了灵活的一站式影像扫描解决方案。

映像分析沙箱

在开发和部署容器化应用程序期间,使用映像分析沙箱将增强您的容器安全策略,使您能够安全地从外部资源库中提取和运行可能包含过时、易受攻击的包和嵌入式恶意软件的容器映像。

沙箱的功能将允许您在受控环境中扫描可疑的异常容器行为,如加密货币挖矿、端口扫描、修改二进制文件和修改内核模块。您可以揭露风险,识别隐藏在软件供应链中的 可疑依赖关系 ,否则静态分析可能会漏掉它们。

制定验证政策和审核时间表

为确保正确的图像和人工制品完整性验证,组织应制定明确的政策来定义验证流程。一旦建立,定期审计内部政策的合规性,以发现和解决薄弱环节以及不合规的地方。持续监控和分析有助于发现异常和未经授权的活动。

 

集装箱注册安全一览表

  • 使用可信的注册表和库
  • 确保托管服务器安全,实施稳健的访问策略
  • 实施充分的身份验证和授权限制
  • 为文物建立安全的储存库
  • 在整个 CI/CD 过程中执行完整性验证检查
  • 采用加密签名
  • 执行多源验证
  • 验证第三方资源
  • 将安全扫描集成到 CI/CD 管道中
  • 制定验证政策和定期审计计划

 

集装箱注册常见问题

持续集成(CI)是一种开发实践,开发人员经常将代码变更合并到中央存储库,然后进行自动构建和测试。CI 的主要目标是尽快发现并修复集成错误,从而提高软件质量并缩短交付时间。自动化工具会对每次集成进行测试,以确保新代码不会破坏或降低应用程序的性能。CI 是现代软件开发的基本组成部分,它使团队能够保持开发流程的高速度和敏捷性。
持续部署(CD)是一种软件发布流程,通过自动测试阶段的每项变更都会自动部署到生产环境中。它通过在构建阶段后将所有代码变更部署到测试或生产环境中来扩展持续集成。CI 可确保将变更快速、一致地传送到生产中,使团队能够快速、可靠地向客户交付功能、更新和修复。CD 可最大限度地减少人工干预,使部署过程变得高效。

CI/CD 管道 将软件从版本控制到最终用户手中的过程自动化。它包含持续集成(CI)和持续部署(CD),实现了软件交付和基础设施变更过程的自动化。管道通常包括代码编译、单元测试、集成测试和部署等阶段。这种自动化可确保软件始终处于可部署状态,从而促进快速、可靠的软件发布周期。CI/CD 管道对于 DevOps 实践至关重要,它使团队能够更频繁、更可靠地交付代码变更。

源代码控制管理 (SCM) 是一种跟踪源代码和其他开发相关资产变化的系统,允许开发人员进行协作、对代码进行版本控制并维护代码变化的历史记录。流行的 SCM 工具包括 Ansible、GitHub、Mercurial 和 Puppet。
  • SCM 有助于保持用于构建容器映像的代码的一致性和可追溯性,使开发人员能够轻松识别用于创建容器映像的特定代码版本。
  • SCM 使开发人员能够对代码进行协作,确保构建并存储在注册表中的容器映像符合组织的质量要求。
  • SCM 工具通过与 CI/CD 管道集成,将构建、测试和向注册中心推送容器映像的流程自动化,从而增强了工作流程。
映像签名是对容器映像进行数字签名以验证其真实性和完整性的过程。通过在图像上附加数字签名,图像签名可确保图像未被篡改且来源可信。Docker Content Trust 和 Notary 等工具常用于签署容器映像,为容器化应用部署提供了额外的安全层。
内容信任是指确保只接收、传输和部署可信内容的安全做法。就容器化应用而言,它涉及使用数字签名验证容器映像的完整性和来源。内容信任机制可确保图像未经篡改且来源可靠,从而降低中间人攻击和恶意代码注入等风险。实施内容信任对于维护云原生环境中软件供应链的安全至关重要。
映像加密包括对容器映像进行编码,以保护其中包含的敏感数据和配置。这一过程可确保只有拥有解密密钥的实体才能访问或使用图像,从而防止未经授权的访问和数据泄露。当图像在潜在的不安全环境(如公共云存储或共享注册表)中存储或传输时,图像加密尤为重要。它增加了一个关键的安全层,保护容器化应用中的专有信息和合规性敏感数据。
映像保留策略是组织为管理注册表中容器映像的生命周期而设置的规则。这些政策决定了图像的保存期限、何时归档或删除,以及保留哪些版本。实施此类政策有助于管理存储成本,保持合规性,符合数据管理标准,并确保只有相关的最新镜像可供部署。

网络钩子是一种通过自定义回调来增强或改变网页或网络应用程序行为的方法。这些回调可能由第三方用户和开发人员维护、修改和管理,他们不一定能访问网页或应用程序的源代码。在云计算和 DevOps 中,网络钩子用于在存储库或部署环境中发生特定事件时触发自动化工作流程,如 CI/CD 管道。Webhooks 可实现对事件的实时通知和自动反应,增强云服务和工具之间的自动化和集成。

容器技术中的映像标签是在注册表中应用于容器映像的标签。它是一种机制,用于识别同一镜像的不同版本,如最新版、稳定版、1.2.3 版或测试版。标签允许开发人员和操作人员参考映像的特定版本进行部署,确保应用程序部署的正确性和一致性。在容器化环境中,使用图像标签对于版本控制和部署管理至关重要。
Quay 是红帽公司推出的私有容器映像注册中心,用户可以通过它构建、存储和分发容器映像。它提供先进的功能,如图像漏洞扫描、地理复制和广泛的访问控制。Quay 旨在与 CI/CD 系统集成,为 Kubernetes 和其他容器环境提供安全高效的容器映像处理方式。
Docker Content Trust (DCT) 是 Docker 中的一项安全功能,用于签署和验证容器映像。它可以确保所使用的图像与出版商的意图完全一致,未经修改,并经过验证。DCT 使用更新框架(TUF)和公证人进行安全图像签名和验证。启用该功能后,Docker 客户端会验证其提取的所有映像的完整性和发布者,从而防止使用被篡改的映像。

Notary 是一款开源工具,为发布和验证容器映像等内容的签名提供了一个框架。它实施了更新框架(TUF)规范,以确保内容传输和更新的安全性。公证人确保用户收到的内容与发布者的意图完全一致,防止未经授权的修改。

公证人通常与 Docker Content Trust 结合使用,对 Docker 映像进行签名和验证。

更新框架(TUF)是一种旨在确保软件更新系统安全的规范,可防范密钥泄露和中间人攻击等常见攻击。TUF 提供了一个灵活的框架,开发人员可以将其集成到软件更新系统中,确保软件更新的完整性和真实性。这在分布式环境中尤为重要,因为软件通常是通过不安全的渠道交付的。TUF 的设计有助于防止篡改更新文件,确保只应用安全的授权更新。
容器注册表 API 是一组编程接口,允许用户以编程方式与容器注册表进行交互。它可以执行推送、拉动、列出和删除容器映像等任务。该 API 对于在容器化环境中实现工作流程自动化至关重要,可与持续集成和部署管道无缝集成。通过使用容器注册 API,开发人员和运营团队可以高效地管理容器映像,提高工作效率并确保部署的一致性。
容器注册中的不可变存储库是一种存储模型,一旦推送映像,就无法修改或删除。不可变存储库对于保持软件供应链的一致性和安全性至关重要,尤其是在合规性和可追溯性非常重要的环境中。它们可防止意外或恶意更改,并确保始终可检索图像的特定版本。
容器映像推广是以受控和可追踪的方式将容器映像从一个环境移动到另一个环境的过程,通常是 CI/CD 管道的一部分。它涉及通过不同阶段推进映像,如从开发到测试再到生产,确保只部署经过验证和测试的映像。图像推广实践提高了部署的可靠性和稳定性,因为它们在每个阶段都执行质量检查和验证。
映像镜像是指将容器映像从一个注册表复制到另一个注册表的过程。这种做法用于冗余、性能优化和合规性数据主权要求。通过镜像,组织可确保在主注册表出现故障或无法访问时的可用性。此外,它还能将图像定位在更靠近使用地点的位置,减少延迟,从而加快部署时间。
地理复制涉及在多个地理位置复制数据,以提高数据可用性和灾难恢复能力。在云计算中,它能确保应用程序即使在区域性中断或网络问题的情况下也能保持可用性和性能。地理复制提供冗余,确保数据在不同地区的完整性和可用性。
容器注册表代理是专用网络和公共容器注册表之间的中介。它在本地缓存容器映像,减少了从公共注册表重复下载映像的需要。这不仅加快了部署过程,还减少了带宽使用,提高了可靠性。在有严格网络安全控制或互联网访问受限的环境中,容器注册代理尤其有用,因为它可以在遵守安全策略的同时高效管理容器映像。
Skaffold 是一款开源命令行工具,可促进 Kubernetes 应用程序的持续开发。它将构建、推送和部署应用程序的工作流程自动化,让开发人员能够实时迭代应用程序。Skaffold 负责处理构建容器映像、将其推送到注册表并部署到 Kubernetes 集群的工作流程。它可以在开发生命周期的不同阶段工作,从本地开发到持续集成。Skaffold 简化了开发和部署流程,使其更加高效和一致。
Flux 是一款开源工具,可为 Kubernetes 实施 GitOps,确保集群状态与存储在 Git 仓库中的配置相匹配。它能自动将版本库中的新变更应用到集群中,从而实现持续和自动化的部署。Flux 支持复杂的工作流程和多环境设置,提供自动化更新、回滚和警报等功能。它增强了 Kubernetes 中部署的可靠性和一致性,符合声明式基础架构和版本控制配置的原则。
上一页 什么是容器协调?