更改数据库加密密钥

替换用于在管理子系统中对数据库字段进行加密的私钥值。

准备工作

备份现有管理数据库加密密钥。 如果需要复原管理数据库备份,那么必须具有创建数据库备份时正在使用的加密密钥。

要备份加密密钥:
  1. 标识管理数据库加密密钥的名称:
    kubectl get mgmt <mangement CR name> -o=jsonpath='{.status.encryptionSecret}'
    其中 <mangement CR name> 可以通过运行以下命令来确定:
    kubectl get mgmt
  2. 将私钥复制到 YAML 文件:
    kubectl get secret <management enc secret> -o yaml > management_enc_key_backup_<date>.yaml
密钥已备份到文件 management_enc_key_backup_<date>.yaml。 将 <date> 设置为当前日期,例如 management_enc_key_backup_20240101.yaml,以便您可以确定何时执行此备份。

使用管理基础结构配置备份来保留备份的加密密钥: 执行管理基础结构配置备份。 如果要复原在使用先前加密密钥时执行的数据库备份,请参阅 复原备份

关于此任务

此更新不需要停运;但是,由于数据库锁定,某些操作可能需要比平时更长的时间。

过程

  1. 创建名为 rotate_mgmt_enc_secret.yaml的文件,并粘贴以下内容:
    apiVersion: management.apiconnect.ibm.com/v1beta1
    kind: ManagementSecretRotation
    metadata:
      name: rotate-secret
    spec:
      managementCluster: <mangement CR name>
      rotateEncryptionSecret:
        rotate: true
    
    注意:如果您的部署最初安装在 V2018.4.1 中,则数据库加密密钥称为 managementUpgradeName-encryption-secret
  2. 运行以下命令以应用 rotate-secret CR:
    kubectl create -f rotate_mgmt_enc_secret.yaml
    更新可能需要几分钟时间。 您可以使用以下命令来监视进度:
    kubectl get managementsecretrotation
    当状态显示 Completed时,更新完成:
    
    NAME            READY   STATUS      AGE
    rotate-secret   1/1     Completed   13m
    如果您在 VMware 上安装了 API Connect ,并且想要更新 VMware 上的管理加密密钥,那么现在您可以使用 apicup 命令来轮换加密密钥,而无需提交支持请求。 对于独立安装,请运行以下命令:
    apicup subsys rotate-secrets <stack-name> --rotate-encryption-secret
    要设置 2DC ,请运行以下命令:
    apicup subsys rotate-secrets <active-stack-name> --rotate-encryption-secret

后续操作

如果需要复原在更新加密密钥之前生成的管理数据库备份,那么必须从备份复原先前的加密密钥。

  1. 编辑私钥备份文件: 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
  2. 从更新后的备份文件复原加密密钥:
    kubectl create -f management_enc_key_backup_<date>.yaml
  3. 验证是否已创建备份密钥:
    kubectl get secrets
    您应该会在输出中看到复原的备份密钥:
    
    NAME                                TYPE            DATA   AGE
    ...
    backup_mgmt_encryption_secret       Opaque          3      10s
    ...
  4. 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_secret

    backup_mgmt_encryption_secret 中包含的加密密钥将复制到活动加密密钥。 复原备份后,您可能希望再次更新加密密钥 (原因与先前更新私钥的原因相同)。

    有关管理数据库备份还原的更多信息,请参阅从管理数据库备份还原

如果您有两个数据中心灾难恢复部署,则必须将更新的加密密钥复制到您的热备用数据中心。 请遵循以下步骤:

  1. 从活动数据中心提取管理数据库加密密钥:
    kubectl get secret <mgmt encryption secret> --template='{{ index .data "encryption_secret.bin" }}' > mgmt-enc-secret.txt
  2. 验证 mgmt-enc-secret.txt 文件是否包含您的秘密:
    cat mgmt-enc-secret.txt
    例如,预期输出应该是一个长字符串:
    YSXft4YoApS+UJHpaXjdu8OUovFGhLT9YsBaWeRCI5sUigPdchY/cq18Z5UKaW5afZDXxQDWUcY6tx9xTXVGzEm9oZCDV1hmq4mu7qM015rBjZIJ7FPrA3gNgxflxim9SORSybnhW2JT6S41ZH9QJwfUtIUUpe981h8sraSEtOQ=
  3. 暖备用数据中心中,确定管理数据库加密机密的名称:
    kubectl get mgmt <mangement CR name> -o=jsonpath='{.status.encryptionSecret}'
  4. 使用在步骤 1 中获得的活动密码更新 warm-standby 密码:
    kubectl patch secret <warm-standby enc secret name> -p "{\"data\": {\"encryption_secret.bin\":\"$(<mgmt-enc-secret.txt)\"}}"