GitLab Dedicated 网络访问和安全
- Tier: Ultimate
- Offering: GitLab Dedicated
自带域名 (BYOD)
您可以使用自定义主机名来访问您的 GitLab Dedicated 实例。您还可以为捆绑的容器注册表和 Kubernetes Agent Server (KAS) 服务提供自定义主机名。
Let’s Encrypt 证书
GitLab Dedicated 与 Let’s Encrypt 集成,这是一个免费、自动化和开源的证书颁发机构。当您使用自定义主机名时,Let’s Encrypt 会自动为您的域名颁发和更新 SSL/TLS 证书。
此集成使用 http-01 挑战通过 Let’s Encrypt 获取证书。
设置 DNS 记录
要将自定义主机名与 GitLab Dedicated 一起使用,您必须更新您域名的 DNS 记录。
先决条件:
- 访问您域名主机的 DNS 设置。
要为 GitLab Dedicated 的自定义主机名设置 DNS 记录:
-
登录到您域名主机的网站。
-
转到 DNS 设置。
-
添加一个
CNAME记录,将您的自定义主机名指向您的 GitLab Dedicated 租户。例如:gitlab.my-company.com. CNAME my-tenant.gitlab-dedicated.com -
可选。如果您的域名有现有的
CAA记录,请更新它以包含 Let’s Encrypt 作为有效的证书颁发机构。如果您的域名没有任何CAA记录,您可以跳过此步骤。例如:example.com. IN CAA 0 issue "pki.goog" example.com. IN CAA 0 issue "letsencrypt.org"在此示例中,
CAA记录定义了 Google Trust Services (pki.goog) 和 Let’s Encrypt (letsencrypt.org) 作为可以为您的域名颁发证书的证书颁发机构。 -
保存您的更改并等待 DNS 更改传播。
只要您使用 BYOD 功能,DNS 记录就必须保持不变。
Let’s Encrypt 证书的 DNS 要求
当将自定义主机名与 GitLab Dedicated 一起使用时,您的域名必须可以通过 DNS 公开解析, 即使您计划仅通过私有网络访问您的实例。
存在此公共 DNS 要求是因为:
- Let’s Encrypt 使用 HTTP-01 挑战,这需要公共互联网访问来验证域名所有权。
- 验证过程必须通过指向您的 GitLab Dedicated 租户的 CNAME 记录从公共互联网访问您的自定义主机名。
- 证书更新每 90 天自动进行一次,并使用与初始颁发相同的公共验证过程。
对于配置了私有网络(如 AWS PrivateLink)的实例,保持公共 DNS 解析可确保证书更新正常工作,即使所有其他访问都限制在私有网络内。
添加您的自定义主机名
要将自定义主机名添加到您现有的 GitLab Dedicated 实例,请提交支持工单。
自定义证书
自定义证书在您的 GitLab Dedicated 实例和由非公共证书颁发机构 (CA) 签名的证书之间建立信任。如果您想连接到使用由私有或内部 CA 签名的证书的服务,您必须首先将该证书添加到您的 GitLab Dedicated 实例。
使用 Switchboard 添加自定义证书
- 登录 Switchboard。
- 在页面顶部,选择 Configuration。
- 展开 Custom Certificate Authorities。
- 选择 + Add Certificate。
- 将证书粘贴到文本框中。
- 选择 Save。
- 滚动到页面顶部,并选择是立即应用更改还是在下一个维护窗口期间应用。
通过支持请求添加自定义证书
如果您无法使用 Switchboard 添加自定义证书,您可以打开一个支持工单并附加您的自定义公共证书文件以请求此更改。
AWS Private Link 连接
入站 Private Link
AWS Private Link 允许您在 AWS 上的 VPC 中的用户和应用程序安全地连接到 GitLab Dedicated 端点,而无需网络流量通过公共互联网。
要启用入站 Private Link:
-
打开一个支持工单。在您的支持工单正文中,包括在您的 AWS 组织中建立 VPC 端点的 AWS 用户或角色的 IAM 主体。IAM 主体必须是 IAM 角色主体或 IAM 用户主体。GitLab Dedicated 使用这些 IAM 主体进行访问控制。这些 IAM 主体是唯一能够设置到服务的端点的主体。
-
您的 IAM 主体被列入允许列表后,GitLab 创建端点服务并在支持工单上传达
Service Endpoint Name。服务名称由 AWS 在创建服务端点时生成。- GitLab 处理私有 DNS 名称的域名验证,以便在您的 VPC 中解析租户实例域名到 PrivateLink 端点。
- 端点服务在两个可用区中可用。这些可用区是您在入职期间选择的区域,或者如果您没有指定任何区域,则是随机选择的两个区域。
-
在您自己的 AWS 账户中,在您的 VPC 中创建一个端点接口,设置如下:
- Service Endpoint Name:使用 GitLab 在支持工单上提供的名称。
- Private DNS names enabled:是。
- Subnets:选择所有匹配的子网。
-
创建端点后,使用在入职期间提供给您的实例 URL 从您的 VPC 安全地连接到您的 GitLab Dedicated 实例,而无需流量通过公共互联网。
为入站 Private Link 启用 KAS 和注册表
当您使用入站 Private Link 连接到您的 GitLab Dedicated 实例时, 只有主实例 URL 通过私有网络具有自动 DNS 解析。
要通过您的私有网络访问 KAS(Kubernetes 的 GitLab 代理)和注册表服务, 您必须在您的 VPC 中创建额外的 DNS 配置。
先决条件:
- 您已为您的 GitLab Dedicated 实例配置了入站 Private Link。
- 您有权在您的 AWS 账户中创建 Route 53 私有托管区域。
要通过您的私有网络启用 KAS 和注册表:
-
在您的 AWS 控制台中,为
gitlab-dedicated.com创建一个私有托管区域, 并将其与包含您的私有链接连接的 VPC 关联。 -
创建私有托管区域后,添加以下 DNS 记录(将
example替换为您的实例名称): -
要验证连接性,从您的 VPC 中的资源运行以下命令:
nslookup kas.example.gitlab-dedicated.com nslookup registry.example.gitlab-dedicated.com nslookup example.gitlab-dedicated.com所有命令都应解析为您 VPC 内的私有 IP 地址。
此配置对 IP 地址更改具有鲁棒性,因为它使用 VPC 端点接口而不是特定的 IP 地址。
出站 Private Link
出站私有链接允许您的 GitLab Dedicated 实例和 GitLab Dedicated 的托管运行器安全地与在您 AWS 上的 VPC 中运行的服务通信,而无需向公共互联网暴露任何流量。
这种类型的连接允许 GitLab 功能访问私有服务:
-
对于 GitLab Dedicated 实例:
- webhooks
- 导入或镜像项目和仓库
-
对于托管运行器:
- 自定义密钥管理器
- 存储在您的基础设施中的工件或作业镜像
- 部署到您的基础设施中
请考虑以下几点:
- 您只能在同一区域的 VPC 之间建立私有链接。因此,您只能在为您的 Dedicated 实例指定的区域中建立连接。
- 连接需要您在入职期间选择的两个可用区 (AZ) 的可用区 ID (AZ ID)。
- 如果您在入职到 Dedicated 期间没有指定任何 AZ,GitLab 会随机选择两个 AZ ID。AZ ID 显示在 Switchboard 的概览页面上,用于主要和次要区域。
- GitLab Dedicated 将出站私有链接连接的数量限制为 10 个。
使用 Switchboard 添加出站私有链接
先决条件:
-
为您的内部服务创建端点服务,使其可供 GitLab Dedicated 使用。
-
为部署了您的 Dedicated 实例的可用区 (AZ) 中的端点服务配置网络负载均衡器 (NLB)。选择以下之一:
- 使用配置的 AZ。AZ ID 显示在 Switchboard 的概览页面上。
- 在区域中的每个 AZ 中启用 NLB。
-
将 GitLab Dedicated 用于连接到您的端点服务的角色的 ARN 添加到端点服务的允许主体列表中。您可以在 Switchboard 中的出站私有链接 IAM 主体下找到此 ARN。更多信息,请参见管理权限。
-
建议。将 Acceptance required 设置为 No,以使 GitLab Dedicated 能够在单个操作中连接。如果设置为 Yes,则必须在连接启动后手动接受连接。
如果您将 Acceptance required 设置为 Yes,Switchboard 无法准确确定链接何时被接受。在您手动接受链接后,状态显示为 Pending 而不是 Active,直到下一次计划维护。维护后,链接状态刷新并显示为已连接。
-
创建端点服务后,记下服务名称以及您是否启用了私有 DNS。
- 登录 Switchboard。
- 在页面顶部,选择 Configuration。
- 展开 Outbound private link。
- 填写字段。
- 要添加端点服务,选择 Add endpoint service。您可以为每个区域添加最多十个端点服务。至少需要一个端点服务才能保存区域。
- 选择 Save。
- 可选。要为第二个区域添加出站私有链接,选择 Add outbound connection,然后重复前面的步骤。
使用 Switchboard 删除出站私有链接
- 登录 Switchboard。
- 在页面顶部,选择 Configuration。
- 展开 Outbound private link。
- 转到要删除的出站私有链接,然后选择 Delete( )。
- 选择 Delete。
- 可选。要删除区域中的所有链接,从区域标题中选择 Delete( )。这也会删除区域配置。
通过支持请求添加出站私有链接
- 创建端点服务,通过该服务您的内部服务
将可供 GitLab Dedicated 使用。在新的支持工单上提供相关的
Service Endpoint Name。 - 为部署了您的 Dedicated 实例的可用区 (AZ) 中的端点服务配置网络负载均衡器 (NLB)。选择以下之一:
- 使用配置的 AZ。AZ ID 显示在 Switchboard 的概览页面上。
- 在区域中的每个 AZ 中启用 NLB。
- 在您的支持工单中,GitLab 将为您提供
将启动到您的端点服务的连接的 IAM 角色的 ARN。您必须确保此 ARN 包含在端点服务的"允许主体"列表中,
或被其他条目覆盖,如 AWS 文档所述。
虽然这是可选的,但您应该明确添加它,允许您将
Acceptance required设置为 No,以便 Dedicated 可以在单个操作中连接。 如果您将Acceptance required保留为 Yes,则必须在 Dedicated 启动连接后手动接受连接。 - 要使用端点连接到服务,Dedicated 服务需要一个 DNS 名称。Private Link 自动创建一个内部名称,但 它是机器生成的,通常不直接有用。有两个选项可用:
然后,GitLab 配置租户实例以根据您提供的服务名称创建必要的端点接口。从租户实例发出的任何匹配的出站连接都通过 PrivateLink 定向到您的 VPC 中。
故障排除
如果在设置出站私有链接后您在建立连接时遇到问题,您的 AWS 基础设施中的某些因素可能是问题的原因。需要检查的具体事项取决于您要修复的意外行为。需要检查的事项包括:
- 确保在您的网络负载均衡器 (NLB) 中启用了跨区域负载均衡。
- 确保适当安全组的入站规则部分允许来自正确 IP 范围的流量。
- 确保入站流量映射到端点服务上的正确端口。
- 在 Switchboard 中,展开 Outbound private link 并确认详细信息按预期显示。
- 确保您已允许来自 webhooks 和集成对本地网络的请求。
私有托管区域
私有托管区域 (PHZ) 创建自定义 DNS 别名 (CNAME),这些别名在您的 GitLab Dedicated 实例的网络中解析。
当您想要以下情况时,请使用 PHZ:
- 创建使用单个端点的多个 DNS 名称或别名,例如在运行反向代理以连接到多个服务时。
- 使用无法通过公共 DNS 验证的私有域。
PHZ 通常与反向 PrivateLink 一起使用,以创建可读的域名,而不是使用 AWS 生成的端点名称。例如,您可以使用 alpha.beta.tenant.gitlab-dedicated.com 而不是 vpce-0987654321fedcba0-k99y1abc.vpce-svc-0a123bcd4e5f678gh.eu-west-1.vpce.amazonaws.com。
在某些情况下,您也可以使用 PHZ 创建解析为可公开访问的 DNS 名称的别名。例如,当您需要内部系统通过其私有名称访问服务时,您可以创建一个解析为公共端点的内部 DNS 名称。
对私有托管区域的更改可能会中断使用这些记录的服务长达五分钟。
PHZ 域结构
当使用您的 GitLab Dedicated 实例的域作为别名的一部分时,您必须在主域之前包含两个子域,其中:
- 第一个子域成为 PHZ 的名称。
- 第二个子域成为别名的记录条目。
例如:
- 有效的 PHZ 条目:
subdomain2.subdomain1.<your-tenant-id>.gitlab-dedicated.com。 - 无效的 PHZ 条目:
subdomain1.<your-tenant-id>.gitlab-dedicated.com。
当不使用您的 GitLab Dedicated 实例域时,您仍必须提供:
- 私有托管区域 (PHZ) 名称
- 格式为
phz-entry.phz-name.com的 PHZ 条目
为防止在 Dedicated 租户内创建域时遮蔽公共 DNS 域,请为您的 PHZ 条目使用任何公共域下至少两个额外的子域级别。例如,如果您的租户托管在 tenant.gitlab-dedicated.com,您的 PHZ 条目应至少为 subdomain1.subdomain2.tenant.gitlab-dedicated.com,或者如果您拥有 customer.com,则至少为 subdomain1.subdomain2.customer.com,其中 subdomain2 不是公共域。
使用 Switchboard 添加私有托管区域
要添加私有托管区域:
- 登录 Switchboard。
- 在页面顶部,选择 Configuration。
- 展开 Private hosted zones。
- 选择 Add private hosted zone entry。
- 填写字段。
- 在 Hostname 字段中,输入您的私有托管区域 (PHZ) 条目。
- 对于 Link type,选择以下之一:
- 对于出站私有链接 PHZ 条目,从下拉列表中选择端点服务。
仅显示状态为
Available或Pending Acceptance的链接。 - 对于其他 PHZ 条目,提供 DNS 别名列表。
- 对于出站私有链接 PHZ 条目,从下拉列表中选择端点服务。
仅显示状态为
- 选择 Save。 您的 PHZ 条目和任何别名应出现在列表中。
- 滚动到页面顶部,并选择是立即应用更改还是在下一个维护窗口期间应用。
通过支持请求添加私有托管区域
如果您无法使用 Switchboard 添加私有托管区域,您可以打开一个支持工单并提供应解析为出站私有链接的端点服务的 DNS 名称列表。该列表可以根据需要进行更新。
IP 允许列表
GitLab Dedicated 允许您通过 IP 允许列表控制哪些 IP 地址可以访问您的实例。启用 IP 允许列表后,当不在允许列表上的 IP 尝试访问您的实例时,会返回 HTTP 403 Forbidden 响应。
已添加到您的 IP 允许列表的 IP 地址可以在 Switchboard 的配置页面上查看。您可以使用 Switchboard 添加或删除允许列表中的 IP 地址。
使用 Switchboard 将 IP 添加到允许列表
-
登录 Switchboard。
-
在页面顶部,选择 Configuration。
-
展开 Allowed Source List Config / IP allowlist。
-
打开 Enable 开关。
-
要添加 IP 地址:
- 选择 Add Item。
- 在 Address 文本框中,输入以下之一:
- 单个 IPv4 地址(例如,
192.168.1.1)。 - CIDR 表示法中的 IPv4 地址范围(例如,
192.168.1.0/24)。
- 单个 IPv4 地址(例如,
- 在 Description 文本框中,输入描述。
要添加另一个地址或范围,请重复此步骤。不支持 IPv6 地址。
-
选择 Save。
-
滚动到页面顶部,并选择是立即应用更改还是在下一个维护窗口期间应用。应用更改后,IP 地址将添加到您实例的 IP 允许列表中。
通过支持请求将 IP 添加到允许列表
如果您无法使用 Switchboard 更新您的 IP 允许列表,您可以打开一个支持工单并指定可以访问您的 GitLab Dedicated 实例的逗号分隔的 IP 地址列表。
为您的 IP 允许列表启用 OpenID Connect
使用 GitLab 作为 OpenID Connect 身份提供者需要访问 OpenID Connect 验证端点的互联网访问。
要在维护 IP 允许列表的同时启用对 OpenID Connect 端点的访问:
- 在支持工单中,请求允许访问 OpenID Connect 端点。
配置将在下一个维护窗口期间应用。
为您的 IP 允许列表启用 SCIM 预配
您可以将 SCIM 与外部身份提供者一起使用,以自动预配和管理用户。要使用 SCIM,您的身份提供者必须能够访问实例 SCIM API 端点。默认情况下,IP 允许列表会阻止与这些端点的通信。
要在维护 IP 允许列表的同时启用 SCIM:
- 在支持工单中,请求启用 SCIM 端点到互联网。
配置将在下一个维护窗口期间应用。