更改数据库加密密钥
替换用于在管理子系统中对数据库字段进行加密的私钥值。
准备工作
备份现有管理数据库加密密钥。 如果需要复原管理数据库备份,那么必须具有创建数据库备份时正在使用的加密密钥。
要备份加密密钥:
- 标识管理数据库加密密钥的名称:
kubectl get mgmt <mangement CR name> -o=jsonpath='{.status.encryptionSecret}'其中 <mangement CR name> 可以通过运行以下命令来确定:kubectl get mgmt - 将私钥复制到 YAML 文件:
kubectl get secret <management enc secret> -o yaml > management_enc_key_backup_<date>.yaml
使用管理基础结构配置备份来保留备份的加密密钥: 执行管理基础结构配置备份。 如果要复原在使用先前加密密钥时执行的数据库备份,请参阅 复原备份。
关于此任务
此更新不需要停运;但是,由于数据库锁定,某些操作可能需要比平时更长的时间。
过程
后续操作
如果需要复原在更新加密密钥之前生成的管理数据库备份,那么必须从备份复原先前的加密密钥。
- 编辑私钥备份文件: management_enc_key_backup_<date>.yaml 并将
metadata.name更改为备份私钥的唯一名称。 删除所有其他metadata内容。 更新后的 YAML 文件应该如下所示:apiVersion: v1 data: encryption_secret.bin: If7HlVzZeAgrYrwvcEhv1Ub0LVXNQsN0mGISy1GvYXKA4d1tSWLB80hB89sn+VvN0/vAVTU90AP6jPOsi5LpOaddfoqT85ugvjEwHLnEtSI6CbEr05NtMUwJGAr5/KWfjj6mwCn+EMp4VBsEDppU54yvycyb7iBLRtGyrPktTaw= kind: Secret metadata: name: backup_mgmt_encryption_secret type: Opaque - 从更新后的备份文件复原加密密钥:
kubectl create -f management_enc_key_backup_<date>.yaml - 验证是否已创建备份密钥:
您应该会在输出中看到复原的备份密钥:kubectl get secretsNAME TYPE DATA AGE ... backup_mgmt_encryption_secret Opaque 3 10s ... - 在 mgmtrestore_cr.yaml 文件中,添加属性
spec.mgmtEncKeyName,并将其设置为新创建的备份密钥名称:apiVersion: management.apiconnect.ibm.com/v1beta1 kind: ManagementRestore metadata: generateName: management- # this the prefix for the name of the restore CR that is created spec: backupName: <backup CR name> subsystemName: <management CR name> mgmtEncKeyName: backup_mgmt_encryption_secretbackup_mgmt_encryption_secret中包含的加密密钥将复制到活动加密密钥。 复原备份后,您可能希望再次更新加密密钥 (原因与先前更新私钥的原因相同)。有关管理数据库备份还原的更多信息,请参阅从管理数据库备份还原。
如果您有两个数据中心灾难恢复部署,则必须将更新的加密密钥复制到您的热备用数据中心。 请遵循以下步骤:
- 从活动数据中心提取管理数据库加密密钥:
kubectl get secret <mgmt encryption secret> --template='{{ index .data "encryption_secret.bin" }}' > mgmt-enc-secret.txt - 验证 mgmt-enc-secret.txt 文件是否包含您的秘密:
cat mgmt-enc-secret.txt例如,预期输出应该是一个长字符串:YSXft4YoApS+UJHpaXjdu8OUovFGhLT9YsBaWeRCI5sUigPdchY/cq18Z5UKaW5afZDXxQDWUcY6tx9xTXVGzEm9oZCDV1hmq4mu7qM015rBjZIJ7FPrA3gNgxflxim9SORSybnhW2JT6S41ZH9QJwfUtIUUpe981h8sraSEtOQ= - 在 暖备用数据中心中,确定管理数据库加密机密的名称:
kubectl get mgmt <mangement CR name> -o=jsonpath='{.status.encryptionSecret}' - 使用在步骤 1 中获得的活动密码更新 warm-standby 密码:
kubectl patch secret <warm-standby enc secret name> -p "{\"data\": {\"encryption_secret.bin\":\"$(<mgmt-enc-secret.txt)\"}}"