使用多个密钥和密钥轮换
除了加密属性值中的 {cipher}
前缀外,Config Server 还会查找一个或多个 {name:value}
前缀,这些前缀位于(Base64 编码的)密文之前。这些密钥被传递给一个 TextEncryptorLocator
,它可以使用任何所需的逻辑来查找用于解密的 TextEncryptor
。如果您配置了密钥库 (encrypt.keystore.location
),默认的定位器会查找由 key
前缀提供的别名对应的密钥,密文类似于以下形式:
foo:
bar: `\{cipher}{key:testkey}...`
定位器会查找名为 "testkey" 的密钥。也可以通过在前缀中使用 {secret:…}
值来提供一个密钥。但是,如果未提供密钥,默认情况下会使用密钥库密码(这是您在构建密钥库时未指定密钥的情况下获得的值)。如果您确实提供了密钥,则还应该使用自定义的 SecretLocator
对密钥进行加密。
当密钥仅用于加密少量配置数据(即它们未在其他地方使用)时,从加密角度来看,几乎无需进行密钥轮换。但是,您可能偶尔需要更改密钥(例如,发生安全漏洞时)。在这种情况下,所有客户端都需要更改其源配置文件(例如,在 git 中),并在所有密文中使用了新的 {key:…}
前缀。请注意,客户端需要首先检查密钥别名在 Config Server 密钥库中是否可用。
如果您想让 Config Server 处理所有加密和解密操作,那么 {name:value} 前缀也可以作为纯文本添加到发送到 /encrypt 端点的请求中。 |