Descripción del cifrado para Portworx

Visión general del cifrado

En la imagen siguiente se muestra el flujo de trabajo de cifrado de Portworx cuando se configura el cifrado por volumen.

Cifrado de Portworx volúmenes*
Portworx

  1. El usuario crea una PVC con una clase de almacenamiento de Portworx y solicita que se cifre el almacenamiento.
  2. Portworx invoca la API de IBM Key Protect o Hyper Protect Crypto Services WrapCreateDEK para crear una frase de contraseña utilizando la clave raíz de cliente (CRK) que se almacena en el secreto de Portworx.
  3. La instancia de servicio de IBM Key Protect o Hyper Protect Crypto Services genera una frase de contraseña de 256 bits y e incorpora la frase de contraseña en la DEK. La DEK se devuelve al clúster de Portworx.
  4. El clúster de Portworx utiliza la frase de contraseña para cifrar el volumen.
  5. El clúster de Portworx almacena la DEK en texto sin formato en la base de datos de Portworx etcd, asocia el ID de volumen con la DEK y elimina la frase de contraseña de su memoria.

Visión general del descifrado

En la imagen siguiente se muestra el flujo de trabajo de descifrado de Portworx cuando se configura el cifrado por volumen.

Desencriptar Portworx
Portworx

  1. Kubernetes envía una solicitud para descifrar un volumen cifrado.
  2. Portworx solicita la DEK del volumen a la base de datos etcd de Portworx.
  3. La base de datos etcd de Portworx busca la DEK y la devuelve al clúster de Portworx.
  4. El clúster de Portworx llama a la API de IBM Key Protect o Hyper Protect Crypto Services UnWrapDEK proporcionando la DEK y la clave raíz (CRK) que se almacenan en el secreto de Portworx.
  5. IBM Key Protect o Hyper Protect Crypto Services obtiene la DEK para extraer la frase de contraseña y devuelve dicha frase al clúster de Portworx.
  6. El clúster de Portworx utiliza la frase de contraseña para descifrar el volumen. Después de descifrar el volumen, la frase de contraseña se elimina del clúster de Portworx.

Configuración del cifrado de volúmenes

Para proteger los datos de un volumen Portworx, puede utilizar un proveedor de servicios de gestión de claves (KMS) como IBM Key Protect o Hyper Protect Crypto Services.

Si no desea utilizar claves raíz de IBM Key Protect o Hyper Protect Crypto Services para cifrar los volúmenes, puede seleccionar Secreto de Kubernetes como tipo de almacén de secretos de Portworx durante la instalación de Portworx. Esta opción te permite almacenar tu propia clave de cifrado personalizada en un secreto de Kubernetes tras instalar Portworx. Para obtener más información, consulta la documentación de Portworx.

Obtención de la instancia y las credenciales de KMS

Configuración del cifrado de volúmenes con Hyper Protect Crypto Services

IBM Cloud está cambiando los servicios de gestión de claves dedicados de Hyper Protect Crypto Services a Key Protect Dedicated.

  1. Cree una instancia de servicio.

  2. Cree una clave raíz.

  3. Cree un ID de servicio.

  4. Clústeres privados: Cree una pasarela de punto final privado virtual que permita el acceso a la instancia de KMS. Asegúrese de enlazar al menos 1 dirección IP de cada subred de la VPC con la VPE.

  5. Recupera el punto de conexión público de Key Management URL. Asegúrese de anotar el punto final en el formato correcto; por ejemplo, https://api.us-south.hs-crypto.cloud.ibm.com:<port>. Para obtener más información, consulte la documentación de la API de Hyper Protect Crypto Services.

Configuración del cifrado de volúmenes con IBM Key Protect

  1. Cree una instancia de servicio.

  2. Cree una clave raíz.

  3. Cree un ID de servicio.

  4. Recupere la región donde ha creado la instancia de servicio y tome nota. Necesitará este valor más adelante cuando cree el secreto.

  5. Clústeres privados: Cree una pasarela de punto final privado virtual que permita el acceso a la instancia de KMS. Asegúrese de enlazar al menos 1 dirección IP de cada subred de la VPC con la VPE.

Creación de un secreto en el clúster

  1. Codifique las credenciales que ha recuperado en la sección anterior en base64 y anote todos los valores codificados en base64. Repita este mandato para todos los parámetros para recuperar el valor codificado en base64.
    echo -n "<value>" | base64
    
  2. Cree un espacio de nombres en el clúster denominado portworx.
    kubectl create ns portworx
    
  3. Cree un secreto de Kubernetes denominado px-ibm en el espacio de nombres portworx del clúster para almacenar la información de IBM Key Protect.
    1. Cree un archivo de configuración para el secreto de Kubernetes con el contenido siguiente.
        apiVersion: v1
        kind: Secret
        metadata:
          name: px-ibm
          namespace: portworx
        type: Opaque
        data:
          IBM_SERVICE_API_KEY: <base64_apikey>
          IBM_INSTANCE_ID: <base64_guid>
          IBM_CUSTOMER_ROOT_KEY: <base64_rootkey>
          IBM_BASE_URL: <base64_endpoint>
        ```
        `metadata.name`
        :   Escriba `px-ibm` como nombre para el secreto de Kubernetes. Si utiliza otro nombre, Portworx no reconoce el secreto durante la instalación.
    
        `data.IBM_SERVICE_API_KEY`
        :   Especifique la clave de API de IBM Key Protect o Hyper Protect Crypto Services codificada en base64 que ha recuperado antes.
    
        `data.IBM_INSTANCE_ID`
        :   Especifique el GUID de la instancia de servicio codificado en base64 que ha recuperado antes.
    
        `data.IBM_CUSTOMER_ROOT_KEY`
        :   Especifique la clave raíz codificada en base64 que ha recuperado antes.
    
        `data.IBM_BASE_URL`
        :   IBM Key Protect: Especifique el punto final de API codificado en base64 de la instancia de servicio.
            :   Hyper Protect Crypto Services: especifique el punto final público de gestión de claves codificado en base64.
    
    2. Cree el secreto en el espacio de nombres `portworx` del clúster.
    ```sh {: pre}
        kubectl apply -f secret.yaml
        ```
    3. Verifique que el secreto se ha creado correctamente.
    ```sh {: pre}
        kubectl get secrets -n portworx
        ```