集中管理凭据

将密钥、密码和令牌保存在内置 Key Store 中,或连接密钥库。跨作业重用命名凭据,避免将密钥写入代码,并在来源处更新。

凭据分散在作业、脚本和笔记本电脑中

每个副本都需要保护和更新。共享作业不应意味着共享密钥值。

在 Git 中
在脚本中
在笔记本电脑上

凭据只保存一次,随后重用引用

将密钥保存在 Semaphore Key Store 或已连接的密钥库中。将其关联到作业使用的资源,并在来源处更新。

使用内置 Key Store,或连接密钥库

将凭据与代码分开存储。跨仓库、清单和作业重用命名密钥,并选择适合基础设施的密钥来源。

内置 Key Store

将 SSH 密钥、登录名与密码对,以及字符串密钥保存在 Semaphore 加密的 Key Store 中。它们可用于 Git 访问、主机连接和 Ansible Vault 密码。

HashiCorp Vault

从现有 Vault KV 密钥获取凭据。

OpenBao

使用 OpenBao 作为可复用凭据的来源。

AWS Secrets Manager

连接由 AWS Secrets Manager 管理的凭据。

Azure Key Vault

通过密钥同步将 Vault 密钥导入 Key Store。

Devolutions Server

使用 Devolutions Server 管理的凭据。

CyberArk

将 CyberArk 管理的密钥连接到自动化。

需要其他来源?可以从服务器环境变量或文件读取凭据、将密钥库中的密钥同步到 Key Store,或在变量组中将密钥值与共享配置结合使用。

创建、关联和重用凭据

选择作业凭据的来源

模板通过名称引用的命名凭据

Key Store 保存操作实际需要的凭据类型,包括受管主机的 SSH 密钥和登录信息、私有 Git 仓库访问、sudo 密码,以及 Ansible Vault 密码。模板指向相应条目,工程师配置和查看名称,值则无需出现在仓库或任务表单中。当配置访问密钥加密时,本地值会在数据库中加密,因此加密配置和恢复途径属于备份流程的一部分,而不是可忽略的设置。

运行时从服务器读取值

环境和文件来源可让 Key Store 条目在任务需要时从 Semaphore 服务器读取值,而不是在数据库中保存副本。如果另一进程已将更新后的凭据写入主机,应采用这一路径:轮换来源后,下一个任务即可获取新值,无需任何人编辑模板。即使任务由远程运行器执行,这些来源仍由 Semaphore 服务器解析,因此文件无需存在于运行器上。文件来源遵循配置的密钥目录和文档规定的 JSON 格式;SSH 或登录条目使用这种封装格式,而不是原始密钥文件。

在变量组中使用 Key Store 凭据

变量组将共享配置与密钥值结合起来。密钥输入应引用已保存凭据,而不是在每个作业中重复。使用相应工具要求的变量名,将变量组传给 Ansible、Terraform、OpenTofu 或脚本。

连接现有密钥管理器

通过 Pro 引用 HashiCorp Vault 或 OpenBao 中的密钥。Enterprise 添加 AWS Secrets Manager、CyberArk 和 Devolutions Server 等受支持的集成。将密钥保留在其归属系统中,并使用文档所述的提供程序配置,让自动化能够获取它。

执行路径仍可能打印什么

妥善存储某个值,并不能控制代码如何使用它。Playbook 或脚本可能通过调试任务、命令参数或 API 响应将密钥写入输出,并不保证所有此类值都会从任务日志中移除。请使用工具自身的保护功能,例如 Ansible 的 no_log,同时审查失败和成功输出,并将日志与导出记录的访问权限视为对其所含全部内容的访问。

服务支持时,使用短期任务身份

任务 JWT 为单次执行提供已签名身份。接收服务可以验证签发者、受众和声明,无需向每个作业共享长期令牌。请在双方配置信任关系;对于仍需传统凭据的系统,SSH 密钥、密码和密钥库引用依然可用。

FAQ

哪些内容应放在 Key Store 中,而不是仓库中?

使用命名 Key Store 凭据访问私有仓库、受管主机或提供 Ansible Vault 密码。自动化代码和非敏感配置保留在 Git 中,模板引用所需凭据。与将值嵌入脚本相比,引用更便于重用和轮换,但仍需保护可执行源码的编辑权限,因为代码会使用提供给它的访问能力执行。

Ansible Vault 与 HashiCorp Vault 密钥存储是一回事吗?

不是。Ansible Vault 用于保护加密的 Ansible 内容;任务模板可以使用 Semaphore Key Store 中的 Vault 密码将其解密。HashiCorp Vault 是 Pro 提供的独立外部 Key Store 密钥存储选项。本页录制的预检查演示的是 Ansible Vault 密码方式,而不是连接 HashiCorp Vault。用于实际运维之前,请使用可丢弃的凭据单独评估该外部存储。

本地存储的凭据如何保护?

本地 Key Store 值使用已配置的访问密钥加密机制存入数据库。请正确配置并保护加密设置,将恢复要求纳入备份流程。静态加密只是整体设计的一部分,经过授权的执行仍需使用凭据。应保护服务器、运行时、管理访问和日志,而不是将加密的数据库值视为任何代码或工程师都无法访问的内容。

哪个组件读取环境变量或文件中的密钥?

文档所述环境和文件来源由 Semaphore 服务器在任务需要密钥时解析,远程运行器执行时也是如此。文件来源必须符合允许的密钥目录配置和文档规定的值格式。后续任务可以获取已轮换的来源值,无需重写模板。不要假定只需将原始密钥文件放在运行器上,就实现了这种服务器端来源机制。

能连接 HashiCorp Vault 或 OpenBao 吗?

可以。Pro 支持 HashiCorp Vault 和 OpenBao 作为外部密钥来源,Enterprise 添加其他受支持的密钥管理器集成。配置提供程序,通过 Key Store 引用凭据,不要将值提交到 Git。按照提供程序指南设置认证与密钥路径,再使用预期凭据测试作业。

轮换凭据时会发生什么变化?

模板引用命名凭据,而不是为每个作业嵌入独立密码或密钥。更新凭据或其配置的来源,再检查引用它的仓库和清单。轮换后测试代表性任务,以便在下次定时生产运行之前发现认证失败。

Semaphore 会阻止所有密钥出现在任务输出中吗?

不要依赖普遍适用的敏感信息掩码保证。Playbook 或脚本可能将敏感变量、命令参数或 API 响应打印到输出中。请有意识地设计日志,使用相应工具的密钥处理选项,并同时检查有代表性的失败和成功输出。根据内容限制日志和导出记录的访问权限。安全存储某个值,并不能控制执行代码打印的全部内容。

多个作业能重用同一个 SSH 密钥或 Vault 密码吗?

可以。在 Key Store 中为凭据命名,并在仓库、清单或模板需要该类型凭据时选择它。作业引用已配置的条目,不必在 Git 中各自保存副本。目标系统需要不同身份时,请使用独立凭据。查看任务模板。