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