Semaphore 目前将所有凭据存储在自己的数据库中。使用云平台的组织需要一种方式,在运行时直接从其云提供商的密钥管理服务中获取密钥,从而避免凭据重复并利用现有的轮换策略。此功能添加了与 AWS Secrets Manager 和 Azure Key Vault 的原生集成,作为 Enterprise 专属功能。
**目标:**在运行时从 AWS Secrets Manager 获取密钥,允许团队利用其现有的 AWS 密钥基础设施,而无需在 Semaphore 的数据库中复制凭据。
要求:
aws_secrets_manager。field 选择器提取单个值(例如,{"username": "admin", "password": "..."} → 提取 password)。{
"name": "Production AWS",
"type": "aws_secrets_manager",
"region": "us-east-1",
"auth_method": "iam_role",
"role_arn": "arn:aws:iam::123456789:role/semaphore-secrets",
"external_id": "optional-external-id"
}
{
"type": "external",
"backend": "aws_secrets_manager",
"secret_name": "production/db_password",
"field": "password",
"aws_config_id": 1
}
相关 issues:#2248
**目标:**在运行时从 Azure Key Vault 获取密钥,使使用 Azure 的组织能够集中管理和轮换凭据,而无需将其存储在 Semaphore 中。
要求:
azure_key_vault。{
"name": "Production Azure",
"type": "azure_key_vault",
"vault_url": "https://my-vault.vault.azure.net",
"auth_method": "managed_identity",
"tenant_id": "...",
"client_id": "..."
}
{
"type": "external",
"backend": "azure_key_vault",
"secret_name": "db-password",
"version": "latest",
"azure_config_id": 1
}
**目标:**提供一种通用的密钥库条目类型,指向任何受支持的云提供商中的密钥。
要求:
**目标:**通过在内存中缓存已解析的密钥来减少对云提供商的 API 调用。
要求:
cache_ttl 字段(例如 "cache_ttl": "5m")。新增表:
secret_backend ——存储云提供商配置(project_id、type、name、config JSON、created_at、updated_at)修改的表:
access_key ——添加列:
external_backend_id(integer,nullable,FK 指向 secret_backend)——关联到云提供商配置external_reference(JSON,nullable)——存储密钥指针(ARN、vault URL、密钥名称、field、version)GET/POST /api/project/{id}/secret-backends ——列出/创建后端配置PUT/DELETE /api/project/{id}/secret-backends/{backend_id} ——更新/删除后端POST /api/project/{id}/secret-backends/{backend_id}/test ——测试连接和认证POST /api/project/{id}/secret-backends/{backend_id}/resolve ——解析密钥引用(用于验证)新增配置选项:
| Key | Env Var | Default | 描述 |
|---|---|---|---|
secret_cache_ttl |
SEMAPHORE_SECRET_CACHE_TTL |
5m |
已解析外部密钥的默认内存缓存 TTL |
secret_resolve_timeout |
SEMAPHORE_SECRET_RESOLVE_TIMEOUT |
10s |
解析密钥时等待云提供商 API 响应的最大时间 |