离线部署
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
要设置离线环境,请联系您的极狐GitLab 销售代表。或通过官网联系方式联系我们。
运行大多数极狐GitLab 安全扫描器在没有连接到互联网时是可能的。
本文档描述了如何在离线环境中操作安全类别(即扫描器类型)。这些说明也适用于已加密、有安全策略(例如,防火墙策略)或以其他方式限制访问完整互联网的极狐GitLab 私有化部署实例。极狐GitLab 将这些环境称为_离线环境_。其他常用名称包括:
- 隔离环境
- 有限连接环境
- 局域网 (LAN) 环境
- 内联网环境
这些环境具有物理障碍或安全策略(例如,防火墙),以防止或限制互联网访问。这些说明是为物理断开连接的网络设计的,但在这些其他用例中也可以遵循。
定义离线环境
在离线环境中,极狐GitLab 实例可以是一个或多个服务器和服务,可以在本地网络上通信,但对互联网的访问非常有限或没有。假设极狐GitLab 实例内及支持基础设施(例如,私人 Maven 存储库)中的任何内容都可以通过本地网络连接访问。假设任何来自互联网的文件都必须通过物理媒体(USB 驱动器、硬盘驱动器、可写 DVD 等)进入。
概述
极狐GitLab 扫描器通常连接到互联网以下载最新的签名、规则和补丁集。需要一些额外步骤来配置工具,以便使用您本地网络上可用的资源正常运行。
容器注册表和软件包存储库
在高层次上,安全分析器作为 Docker 镜像交付,并可能利用各种软件包存储库。当您在互联网连接的极狐GitLab 安装上运行作业时,极狐GitLab 会检查 JihuLab.com 托管的容器注册表,以确保您拥有这些 Docker 镜像的最新版本,并可能连接到软件包存储库以安装必要的依赖项。
在离线环境中,必须禁用这些检查,以免查询 JihuLab.com。由于 JihuLab.com 注册表和存储库不可用,您必须更新每个扫描器以引用不同的内部托管注册表或提供对单个扫描器镜像的访问。
您还必须确保您的应用程序可以访问不在 JihuLab.com 上托管的常用软件包存储库,例如 npm、yarn 或 Ruby gems。这些存储库中的软件包可以通过临时连接到网络或在您自己的离线网络中镜像软件包来获取。
与漏洞互动
一旦发现漏洞,您可以与其互动。阅读有关如何解决漏洞的更多信息。
在某些情况下,报告的漏洞提供的元数据可能包含在 UI 中暴露的外部链接。这些链接在离线环境中可能无法访问。
解决漏洞
解决漏洞功能可用于离线依赖扫描和容器扫描,但可能因实例的配置而无法工作。我们只能建议解决方案,这通常是已修补的更新版本,当我们能够访问托管该依赖项或镜像最新版本的最新注册表服务时。
扫描器签名和规则更新
连接到互联网时,某些扫描器参考公共数据库以获得最新的签名和规则集进行检查。没有连接,这是不可能的。因此,您必须根据扫描器禁用这些自动更新检查,或者使用它们随附的数据库并手动更新这些数据库,或者提供对您自己在网络内托管的副本的访问。
特定扫描器说明
每个单独的扫描器可能与上述步骤略有不同。您可以在以下页面找到更多信息:
将 Docker 镜像加载到离线主机
要使用许多极狐GitLab 功能,包括安全扫描和 Auto DevOps,runner 必须能够获取相关的 Docker 镜像。
在没有直接访问公共互联网的情况下提供这些镜像的过程包括下载镜像,然后将它们打包并传输到离线主机。以下是这种传输的示例:
- 从公共互联网下载 Docker 镜像。
- 将 Docker 镜像打包为 tar 归档文件。
- 将镜像传输到离线环境。
- 将传输的镜像加载到离线 Docker 注册表。
使用官方极狐GitLab 模板
极狐GitLab 提供了一个 供应商模板,以简化此过程。
该模板应在一个新的空项目中使用,项目中包含一个 .gitlab-ci.yml 文件:
yamlinclude: - template: Security/Secure-Binaries.gitlab-ci.yml
流水线下载安全扫描器所需的 Docker 镜像,并将其保存为 作业产物,或将其推送到流水线执行的项目的 容器注册表。这些归档文件可以被传输到其他位置并在 Docker 守护进程中加载。此方法需要一个同时访问 gitlab.com(包括 registry.gitlab.com)和本地离线实例的 runner。此 runner 必须以 特权模式 运行,才能在作业中使用 docker 命令。此 runner 可以安装在 DMZ 或堡垒上,仅用于此特定项目。
此模板不包括容器扫描分析器的更新。请参阅容器扫描离线说明。
安排更新
默认情况下,该项目的流水线仅在 .gitlab-ci.yml 被添加到存储库时运行一次。要更新极狐GitLab 安全扫描器和签名,必须定期运行此流水线。极狐GitLab 提供了一种 安排流水线的方法。例如,您可以设置每周下载和存储 Docker 镜像。
使用创建的安全包
使用 Secure-Binaries.gitlab-ci.yml 模板的项目现在应该托管所有运行极狐GitLab 安全功能所需的镜像和资源。
接下来,您必须告诉离线实例使用这些资源,而不是默认的 JihuLab.com 上的资源。为此,将 CI/CD 变量 SECURE_ANALYZERS_PREFIX 设置为项目 容器注册表 的 URL。
您可以在项目的 .gitlab-ci.yml 中设置此变量,或在极狐GitLab UI 中设置项目或群组。有关更多信息,请参阅 极狐GitLab CI/CD 变量页面。
变量
下表显示了您可以与 Secure-Binaries.gitlab-ci.yml 模板一起使用的 CI/CD 变量:
CI/CD 变量 | 描述 | 默认值 |
---|---|---|
SECURE_BINARIES_ANALYZERS | 逗号分隔的分析器列表 | "bandit, brakeman, gosec, ..." |
SECURE_BINARIES_DOWNLOAD_IMAGES | 用于禁用作业 | "true" |
SECURE_BINARIES_PUSH_IMAGES | 将文件推送到项目注册表 | "true" |
SECURE_BINARIES_SAVE_ARTIFACTS | 还将镜像归档文件保存为产物 | "false" |
SECURE_BINARIES_ANALYZER_VERSION | 默认分析器版本(Docker 标签) | "2" |
不使用官方模板的替代方法
如果无法遵循上述方法,可以手动传输镜像:
示例镜像打包脚本
shell1#!/bin/bash 2set -ux 3 4# 指定所需的分析器镜像 5analyzers=${SAST_ANALYZERS:-"bandit eslint gosec"} 6gitlab=registry.gitlab.com/security-products/ 7 8for i in "${analyzers[@]}" 9do 10 tarname="${i}_2.tar" 11 docker pull $gitlab$i:2 12 docker save $gitlab$i:2 -o ./analyzers/${tarname} 13 chmod +r ./analyzers/${tarname} 14done
示例镜像加载脚本
此示例将镜像从堡垒主机加载到离线主机。在某些配置中,可能需要物理媒体进行此类传输:
shell1#!/bin/bash 2set -ux 3 4# 指定所需的分析器镜像 5analyzers=${SAST_ANALYZERS:-"bandit eslint gosec"} 6registry=$GITLAB_HOST:4567 7 8for i in "${analyzers[@]}" 9do 10 tarname="${i}_2.tar" 11 scp ./analyzers/${tarname} ${GITLAB_HOST}:~/${tarname} 12 ssh $GITLAB_HOST "sudo docker load -i ${tarname}" 13 ssh $GITLAB_HOST "sudo docker tag $(sudo docker images | grep $i | awk '{print $3}') ${registry}/analyzers/${i}:2" 14 ssh $GITLAB_HOST "sudo docker push ${registry}/analyzers/${i}:2" 15done
在离线环境中使用极狐GitLab Secure 和 AutoDevOps
您可以在离线环境中使用极狐GitLab AutoDevOps 进行安全扫描。但是,您必须首先执行这些步骤:
-
将容器镜像加载到本地注册表。极狐GitLab Secure 利用分析器容器镜像进行各种扫描。这些镜像必须作为运行 AutoDevOps 的一部分可用。在运行 AutoDevOps 之前,按照上述步骤将这些容器镜像加载到本地容器注册表。
-
设置 CI/CD 变量以确保 AutoDevOps 在正确的位置查找这些镜像。AutoDevOps 模板利用 SECURE_ANALYZERS_PREFIX 变量来识别分析器镜像的位置。此变量在使用创建的安全包中讨论。确保您将此变量设置为加载分析器镜像的位置的正确值。您可以考虑使用项目 CI/CD 变量来实现此目的,或通过修改 .gitlab-ci.yml 文件直接实现。
完成这些步骤后,极狐GitLab 具有安全分析器的本地副本,并设置为使用它们而不是互联网托管的容器镜像。这使您可以在离线环境中运行 AutoDevOps 中的安全功能。
这些步骤是极狐GitLab Secure 与 AutoDevOps 的特定步骤。使用 AutoDevOps 的其他阶段可能需要其他步骤,涵盖在 Auto DevOps 文档中。