Skip to content

本文为 SPIRE 官方文档 plugin_server_keymanager_azure_key_vault 的中文译本,以英文原文为准。

🔗 穿越源码分析:Server 详解 · KeyManager

服务端插件:KeyManager "azure_key_vault"

azure_key_vault 密钥管理器(key manager)插件借助 Microsoft Azure Key Vault 服务来创建、维护并轮换密钥对,并按需签发 SVID。任何 Microsoft Azure 主体(principal)都无法查看或导出某个密钥所代表的原始加密密钥材料;相反,Key Vault 会代表 SPIRE 访问这些密钥材料。

配置

该插件接受以下配置项:

键名类型是否必填说明默认值
key_identifier_filestring若未设置 key_identifier_value 则必填一个文件路径,用于持久化所生成密钥的相关信息。更多信息见"密钥的管理"。""
key_identifier_valuestring若未设置 key_identifier_file 则必填SPIRE server 实例的静态标识符(用于替代 key_identifier_file)。""
key_vault_uristring本插件所管理的密钥所在的 Key Vault URI。""
subscription_idstring可选订阅 id(subscription id)。""
app_idstring可选应用 id(application id)。""
app_secretstring可选应用密钥(application secret)。""
tenant_idstring可选租户 id(tenant id)。""

向 Azure 认证

默认情况下,插件会尝试通过 DefaultAzureCredential API 使用应用默认凭据(application default credential)。DefaultAzureCredential API 会按以下顺序依次尝试各种认证机制——环境变量、工作负载身份(Workload Identity)、托管身份(Managed Identity),一旦某种成功便停止。当使用 Workload Identity 或 Managed Identity 时,插件必须能够获取所配置租户 ID 的凭据,否则向 Key Vault 的认证将失败。

此外,插件也可以配置为使用针对租户内已注册应用的静态凭据(subscription_idapp_idapp_secret)。

密钥版本的使用

在 Key Vault 中,用于签名数据的加密密钥材料存储在密钥版本(key version)中。一个密钥可以有零个或多个密钥版本。

对于 server 管理的每一个 SPIRE Key ID,本插件都维护一个 Key。当密钥轮换时,会向该 Key 添加一个新的版本。

请注意,Azure 不支持删除单个密钥版本;当某个密钥不再被该 server 所属信任域内的任何 server 使用时,插件会转而删除整个密钥本身。

密钥的管理

插件会为它所管理的密钥分配标签(tag)以便跟踪它们。所有标签均以 spire- 前缀命名。用户无需与插件管理的标签交互。下表仅供参考:

标签说明
spire-server-td表示 server 信任域(trust domain)名称的字符串。
spire-server-idserver 的唯一标识符。由 key_identifier_filekey_identifier_value 配置项处理。

插件需要一种方式来识别它正在其上运行的具体 server 实例。为此,必须使用 key_identifier_filekey_identifier_value 两者之一。设置**密钥标识文件(Key Identifier File)**会指示插件自动管理 server 的标识符,将 server ID 存储在指定 文件中。这种方式适用于大多数情况。如果配置了_密钥标识文件_而在 server 启动时未 找到该文件,则会以新的、自动生成的 server ID 重新创建该文件。因此,如果该文件丢 失,插件将无法识别它此前管理过的密钥,并会按需重新创建新密钥。

如果你需要对 server 所用的标识符有更多控制,可以使用 key_identifier_value 设置 来为 server 实例指定一个静态标识符。这种设置适用于无法持久化密钥标识文件的场景。

插件会尝试检测并删除陈旧(stale)的密钥。为便于陈旧密钥检测,插件每 6 小时主动更新一次 server 所管理的所有密钥的 Updated 字段。在插件配置使用的 Key Vault(key_vaut_uri)内,插件会周期性扫描密钥,查找信任域内那些 Updated 字段值早于两周的活跃密钥并将其删除。

所需权限

所用身份需要在其配置使用的 Key Vault 上具备以下权限:

密钥管理操作(Key Management Operations)

text
Get
List
Update
Create
Delete

加密操作(Cryptographic Operations)

text
Sign
Verify

支持的密钥类型

插件支持 SPIRE 支持的所有密钥类型:rsa-2048rsa-4096ec-p256ec-p384