配置堡垒主机

本页面介绍了如何在 Google Distributed Cloud 连接的部署中配置堡垒主机,以允许 Google 工程师通过 Secure Shell (SSH) 访问和排查 Distributed Cloud 连接区域中的节点。

Google 提供完整的源代码,您可以根据自己的业务需求构建自定义堡垒主机虚拟机。

前提条件

本部分列出了部署 Distributed Cloud 连接堡垒主机解决方案的前提条件。

启用 Access Approval

堡垒主机功能使用 Access Transparency 的 Access Approval 功能,让 Google 可以请求访问您的数据。您必须先在 Google Cloud 项目上启用 Access Transparency 和 Access Approval,然后才能部署堡垒主机虚拟机。如需了解详情,请参阅以下页面:

虚拟机规格

Distributed Cloud 连接的堡垒主机解决方案需要相当于 small 大小的 OpenStack 部署,并具有以下规范:

  • CPU:1 个 vCPU
  • RAM:2 GB
  • 磁盘:20GB

Google 建议为每个 Google Cloud 区域部署 N+1 个堡垒主机虚拟机,以提高可靠性。

网络要求

Distributed Cloud 连接的堡垒主机解决方案要求您为每个堡垒主机虚拟机配置以下网络对等互连会话:

  • 北向。将堡垒主机虚拟机连接到互联网。需要互联网访问权限,并且必须允许从特定 IP 地址(Google 提供,作为堡垒主机解决方案磁盘映像和源代码软件包的一部分)建立端口 22 上的连接。
  • 南向。通过端口 22 将堡垒主机虚拟机连接到单个 Google Cloud 区域中的相应分布式云连接区域。
  • 管理。将堡垒主机虚拟机连接到本地网络,以进行操作和维护。请根据贵组织的安全政策配置此对等互连会话。

安全性方面的最佳做法

Google 强烈建议您在分布式云连接部署中配置堡垒主机解决方案时,除了遵循组织的安全政策之外,还应遵循本部分所述的安全最佳实践:

  • 遵循最小权限规则,并明确划分用户的职责。
  • 对于管理员以外的所有用户账号,仅使用基于证书的身份验证;停用基于密码的身份验证和对堡垒主机虚拟机的 root 访问权限。
  • 拒绝来自北向对等会话中所有不在 Google 提供的支持 IP 地址列表中的 IP 的访问。
  • 关闭南向对等互连会话上的所有端口(端口 22 [SSH] 除外),并仅允许 Google 提供的支持 IP 地址列表中的 IP 地址使用该端口。
  • 确保所有堡垒主机虚拟机均为最新版本。Google 会在每次发布安全补丁和版本更新时提供新的源代码软件包。
  • 配置一种既能满足组织安全政策又能满足组织审核需求的提醒和审核解决方案。

启用堡垒主机支持

如需在 Distributed Cloud 连接的部署中启用堡垒主机支持,请提交请求

您必须为每个已连接 Distributed Cloud 的区域单独启用和配置堡垒主机支持。这样,您就可以为每个 Distributed Cloud 连接区部署最符合组织业务需求的不同访问和网络配置。

获取堡垒主机软件

Google 支持团队为您的 Distributed Cloud connected 部署激活堡垒主机功能后,会将堡垒主机软件包发送给您。该软件包包含以下内容:

  • 源代码。您可以根据业务需求自定义和构建自己的堡垒主机虚拟机映像。
  • 文档。有关配置证书等任务的其他文档。

构建堡垒主机虚拟机映像

本部分简要介绍了从 Google 提供的源代码构建堡垒主机虚拟机映像所需的步骤。完整说明在随源代码提供的 README 文件中。

前提条件

您需要以下项来构建堡垒主机虚拟机映像:

  • 运行 Debian 11 的机器。
  • 最新的 Debian 云服务器映像。
  • 机器上安装的 qemu-imgqemu-system-x86_x64 和 GNU mtools 软件。
  • 一个名为 host-user-key.pub 的文件,其中包含用于登录堡垒主机实例并启动 host-user 会话的 SSH 公钥。此密钥可用于直接身份验证,也可作为证书授权机构签名密钥。堡垒主机实例必须信任此 CA。
  • 一个名为 admin-user-key.pub 的文件,其中包含用于在目标堡垒主机实例上执行管理任务的 SSH 公钥。此密钥可用于直接身份验证,也可作为证书授权机构签名密钥。堡垒主机实例必须信任此 CA。
  • 一个名为 guest-user-key.pub 的文件,其中包含 Google 提供的公共 SSH 证书授权机构签名密钥,该密钥允许 Google 支持人员在连接到堡垒主机实例时以 guest-user 的身份进行身份验证。

构建虚拟机映像

按照源代码附带的 README 文件中提供的说明,根据 Google 提供的源代码构建堡垒主机虚拟机映像。本指南中的示例将生成的图片文件称为 bastion-host.img

构建 HIBA 软件包

按如下方式构建基于主机身份的授权 (HIBA) SSH 身份验证软件层的 Debian 安装软件包:

  1. 使用以下命令安装所需的依赖项:

    sudo apt-get install autoconf autogen build-essential git libssl-dev libtool zlib1g-dev
  2. 使用以下命令构建安装软件包:

    ./build-hiba.sh -j $(nproc) /tmp/hiba-build-workdir

安装软件包会存放在 /tmp/hiba-build-workdir 目录中,并命名为 hiba_x.y-z_amd64.deb,其中 xyz 表示 HIBA 版本号。

生成 cloud-init 配置

使用 generate-cloud-init.py 脚本生成所需的 cloud-init 配置。 您还可以使用自己的工具生成这些配置。这些配置会执行以下操作:

  • 在堡垒主机虚拟机映像中创建所需的用户账号,并使用前面所述的 SSH 密钥配置这些账号。
  • 添加了一个脚本,该脚本将 guest-user 账号的权限限制为仅加入已建立的终端多路复用器会话。
  • 添加了用于创建和管理终端多路复用器会话的脚本。
  • 准备 HIBA 配置文件。

generate-cloud-init.py 脚本需要您之前构建的 HIBA 软件包,以及包含所需 SSH 密钥的三个文件。按如下方式运行脚本:

./generate-cloud-init.py \
    --hiba-package="${WORK_DIR}/hiba_1.0-1_amd64.deb" \
    --host-user-key="HOST_USER_KEY_FILE" \
    --manager-user-key="ADMIN_USER_KEY_FILE" \
    --guest-user-ca="GUEST_USER_KEY_FILE" \
    "${WORK_DIR}/cloud-init/"

替换以下内容:

  • HOST_USER_KEY_FILEhost-user-key.pub 文件的完整路径和名称。
  • ADMIN_USER_KEY_FILEadmin-user-key.pub 文件的完整路径和名称。
  • GUEST_USER_KEY_FILEguest-user-key.pub 文件的完整路径和名称。

该脚本会将 cloud-init.img 文件存放到本地工作目录中的 cloud-init 目录内。

cloud-init 配置应用于堡垒主机虚拟机映像

使用 qemu-system-x86_64 工具将您之前生成的 cloud-init 配置应用到堡垒主机虚拟机映像文件,如下所示:

qemu-system-x86_64 \
      -nographic \
      -enable-kvm \
      -smp 1 \
      -m 1g \
      -drive format=qcow2,index=0,file=${WORK_DIR}/bastion-host.img \
      -drive format=raw,index=1,file=${WORK_DIR}/cloud-init/cloud-init.img \
      -nic user,hostfwd=tcp::10022-:22

如果此命令返回错误,您可能需要在堡垒主机虚拟机映像中调整磁盘大小。

启动虚拟机后,您可以验证配置是否已成功应用。您将在 auditd 日志中看到类似如下所示的输出:

[   52.659013] cloud-init[615]: Cloud-init v. 20.4.1 finished at Fri, 28 Apr 2023 18:53:55 +0000.

您还可以手动检查其用户账号和 sshd 配置,以验证它们。

导入堡垒主机虚拟机映像

在将完全配置的堡垒主机虚拟机映像导入部署基础架构之前,您必须使用 qemu-img 工具对其进行快照,如下所示:

qemu-img snapshot -c installed bastion-image.img

按照组织建立的流程将堡垒主机虚拟机映像导入到部署基础架构中。

配置堡垒主机虚拟机

请按照本部分中的步骤配置堡垒主机虚拟机。

配置所需的用户账号

Distributed Cloud Connected 的堡垒主机功能需要以下每个类别中的一个或多个用户账号:

  • 管理。这是堡垒主机虚拟机的管理员账号。它具有 root 访问权限。
  • 宿主用户。这是运营工程师账号。它可以为 Google 支持人员启动和管理终端多路复用器会话,但无法在这些会话中输入任何命令。
  • 访客用户。这是 Google 支持工程师账号。它可以在堡垒主机虚拟机上与运维工程师共享的终端复用器会话中建立 SSH 连接。没有其他权限。
  • 联名用户。此账号在堡垒主机虚拟机上建立终端多路复用器会话。您的运营工程师和 Google 支持工程师共同连接到此会话。

配置证书

您必须配置证书,以允许上一部分中所述的账号访问堡垒主机虚拟机。堡垒主机软件包包含一个名为 generate-cloud-init.py 的脚本,该脚本会生成所需的 cloud-init 配置,其中包含每个账号所需的账号、SSH 密钥和证书。

如需了解相关说明,请参阅生成 cloud-init 配置

配置日志记录

堡垒主机日志可从 audit daemon 实时获取,也可按需获取。您可以通过 auditd.conf 文件管理日志记录配置。您需要根据业务需求负责轮换和导出堡垒主机虚拟机的日志。您还必须保持足够的磁盘空间,以便将它们存储在虚拟机上。

测试配置

完成本部分中的步骤,以测试堡垒主机虚拟机部署,包括两端的连接,以及所需用户账号的适当访问权限控制。 我们还建议您与 Google 支持团队合作,进行实时测试。

在本地测试部署

  1. 验证您是否可以以 host-user 的身份与堡垒主机虚拟机建立 SSH 会话。 如果此步骤失败,请检查您的 SSH 密钥和证书。

  2. 验证您是否可以使用以下命令启动终端多路复用器会话:

    ./opt/create-shared-tmux-session
  3. 使用以下命令验证是否可以从堡垒主机虚拟机访问 Distributed Cloud Connected 部署:

    ssh -vv bastion-user@TARGET_ADDRESS

    TARGET_ADDRESS 替换为目标分布式云机器或 ToR 交换机的 IP 地址。

    该请求会被 SSH 身份验证拒绝,但 SSH 传输和身份验证请求仍必须到达您的 Distributed Cloud 连接部署。如果此操作失败,请检查防火墙配置。

  4. 验证您的 Google Cloud 组织和目标项目是否已启用 Access Transparency 和 Access Approval,如本指南前文所述。

与 Google 支持人员一起实时测试部署

在本地成功测试堡垒主机部署后,请与 Google 支持团队联系,安排实时测试会话。在会话开始之前,Google 支持团队会向您发送访问权限审批请求。在实际测试会话期间,您和 Google 将涵盖以下内容:

  • 生成和审批访问权限审批请求。
  • 堡垒主机部署的端到端访问工作流。
  • Access Approval 和 Access Transparency 日志。
  • 如何排查以下情况:
    • Google 尝试连接到未在访问审批请求中指定的堡垒主机实例。
    • 在您未启动终端复用器会话时,Google 尝试连接到堡垒主机实例。
    • 在相应的访问权限审批请求被拒绝或撤消后,Google 尝试连接到堡垒主机实例。
    • 您与终端多路复用器会话断开连接或终止该会话。

后续步骤