Cifrado en tránsito para IBM Cloud File Storage for VPC

Nube privada virtual

Utiliza el cifrado en tránsito (EIT) para proteger los datos mientras se transfieren entre tus nodos de trabajo y el servicio File Storage for VPC. Este tema trata sobre la EIT tanto para los recursos compartidos de archivos zonales que utilizan el perfil « dp2 » como para los recursos compartidos de archivos regionales que utilizan el perfil « rfs ».

Recursos compartidos de zona: configuración del cifrado en tránsito

Si decides utilizar el cifrado en tránsito, busca un equilibrio entre tus requisitos de seguridad y tus necesidades de rendimiento. El cifrado de los datos en tránsito puede afectar al rendimiento, ya que los datos deben cifrarse y descifrarse en los puntos finales. Para obtener más información, consulta « Cifrado de VPC en tránsito ».

En los nodos de trabajo de RHCOS ( CoreOS ), el EIT no se activa hasta que se reinicia el nodo después de que el operador haya instalado los paquetes necesarios. Prevé un reinicio progresivo cuando actives el EIT.

  • EIT está disponible para las versiones de clúster « 4.16 » y posteriores.
  • De forma predeterminada, los recursos compartidos de archivos se cifran en reposo mediante el cifrado gestionado por IBM.
  • Para utilizar EIT con clústeres «Secure by Default», debes añadir la siguiente regla de salida al grupo de seguridad « kube-<clusterID> ». Esta regla se añade automáticamente en los clústeres de ROKS a partir de la versión 4.18 y posteriores. En el caso de versiones anteriores del clúster, añade la regla manualmente.
    • Protocolo: Cualquiera
    • Tipo de fuente: Cualquiera
    • Fuente: 0.0.0.0/0
    • Destino: 169.254.169.254
  • EIT no está disponible para volúmenes aprovisionados de forma estática. Para configurar EIT, debes utilizar el aprovisionamiento dinámico.
  • Los paquetes de EIT se actualizan automáticamente en tu clúster cuando se activa EIT.
  • El cifrado de los datos en tránsito puede afectar al rendimiento. El impacto depende de las características de tu carga de trabajo. Las cargas de trabajo que realizan escrituras sincrónicas o que eluden el almacenamiento en caché de VSI, como las bases de datos, podrían sufrir un impacto considerable en el rendimiento cuando se habilita EIT. Para evaluar el impacto, compara el rendimiento de tu carga de trabajo con y sin EIT.
  • Incluso sin EIT, los datos circulan a través de una red de centros de datos segura. Para obtener más información sobre la seguridad de la red, consulta « Seguridad en tu VPC » y « Protección de los servicios de infraestructura de la nube privada virtual(VPC)mediante restricciones basadas en el contexto ».

File Storage for VPC Solo se considera un servicio validado para servicios financieros cuando el cifrado en tránsito está activado. Para obtener más información, consulta qué es un servicio validado por Financial Services.

Sigue los siguientes pasos para configurar el cifrado en tránsito (EIT) para los recursos compartidos de archivos en tu clúster de Red Hat OpenShift on IBM Cloud. Al habilitar EIT, se instalan los paquetes necesarios en los nodos de trabajo.

  1. Anota los grupos de trabajadores de tu clúster en los que quieras habilitar EIT.

  2. Edita el archivo « addon-vpc-file-csi-driver-configmap ».

    oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system
    
  3. En el ConfigMap, configura « ENABLE_EIT: "true" » y añade los grupos de trabajadores en los que quieras habilitar EIT al campo « EIT_ENABLED_WORKER_POOLS ». Por ejemplo: "wp1,wp2". También puedes configurar los parámetros « EIT_METADATA_RETRY_COUNT » y « EIT_METADATA_RETRY_INTERVAL » para controlar el comportamiento de los reintentos al recuperar los metadatos de la instancia.

    apiVersion: v1
    data:
      EIT_ENABLED_WORKER_POOLS: "wp1,wp2" # Specify the worker pools where you want to enable EIT. If this field is blank, EIT is not enabled on any worker pools.
      ENABLE_EIT: "true"                   # Specify true/false
      EIT_METADATA_RETRY_COUNT: "3"        # Number of retries for fetching instance metadata before an error is returned
      EIT_METADATA_RETRY_INTERVAL: "30"    # Interval in seconds between each metadata fetch retry
    kind: ConfigMap
    metadata:
      creationTimestamp: "2024-06-18T09:45:48Z"
      labels:
        app.kubernetes.io/name: ibm-vpc-file-csi-driver
      name: addon-vpc-file-csi-driver-configmap
      namespace: kube-system
      ownerReferences:
      - apiVersion: csi.drivers.ibmcloud.io/v1
        blockOwnerDeletion: true
        controller: true
        kind: VPCFileCSIDriver
        name: ibm-vpc-file-csi-driver
        uid: d3c8bbcd-24fa-4203-9352-4ab7aa72a055
      resourceVersion: "1251777"
      uid: 5c9d6679-4135-458b-800d-217b34d27c75
    
  4. Una vez habilitado el EIT, guarda y cierra el configmap.

Este paso puede tardar hasta 5 minutos en completarse, ya que el operador instala los paquetes de EIT en los nodos de trabajo especificados.

  1. Para comprobar que EIT está habilitado, revisa los eventos del mapa de configuración « file-csi-driver-status » para confirmar que la instalación de EIT se ha realizado correctamente en cada nodo de trabajo. Busca los eventos « Package installation successful » correspondientes a cada nodo de los grupos de trabajadores que hayas especificado.

    oc describe cm file-csi-driver-status -n kube-system
    

    Salida de ejemplo

    apiVersion: v1
    data:
      EIT_ENABLED_WORKER_NODES: |
        default:
        - 10.240.0.10
        - 10.240.0.8
      PACKAGE_DEPLOYER_VERSION: v1.0.0
      events: |
        - event: EnableVPCFileCSIDriver
          description: 'VPC File CSI Driver enable successful, DriverVersion: v2.0.3'
          timestamp: "2024-06-13 09:17:07"
        - event: EnableEITRequest
          description: 'Request received to enableEIT, workerPools: , check the file-csi-driver-status
            configmap for eit installation status on each node of each workerpool.'
          timestamp: "2024-06-13 09:17:31"
        - event: 'Enabling EIT on host: 10.240.0.10'
          description: 'Package installation successful on host: 10.240.0.10, workerpool: wp1'
          timestamp: "2024-06-13 09:17:48"
        - event: 'Enabling EIT on host: 10.240.0.8'
          description: 'Package installation successful on host: 10.240.0.8, workerpool: wp2'
          timestamp: "2024-06-13 09:17:48"
    
  2. Si tus grupos de trabajadores contienen nodos RHCOS ( CoreOS ), vacía y reinicia cada nodo afectado para activar los paquetes EIT. EIT no funciona en los nodos RHCOS hasta que se reinicia el nodo. Al vaciar primero el nodo, se garantiza que las cargas de trabajo en ejecución se reasignen a otros nodos antes del reinicio, lo que evita que las aplicaciones de producción se vean afectadas.

    Drenar el nodo para expulsar de forma segura todos los pods en ejecución.

    oc drain <node-name> --ignore-daemonsets --delete-emptydir-data
    

    Reinicia el nodo que se ha quedado sin energía.

    ibmcloud ks worker reboot --cluster CLUSTER_ID --worker WORKER_ID
    

    Una vez que el nodo vuelva a estar en línea y en estado « Ready », desactivá el «uncordon» para que se puedan volver a programar cargas de trabajo en él.

    oc uncordon <node-name>
    
  3. Selecciona una clase de almacenamiento preinstalada que admita EIT o crea tu propia clase de almacenamiento.

    • Crea un PVC utilizando la clase de almacenamiento « ibmc-vpc-file-eit ».
    • Crea tu propia clase de almacenamiento y configura el parámetro « isEITEnabled » en « true ».
  4. Crea un PVC que haga referencia a la clase de almacenamiento que hayas seleccionado y, a continuación, implementa una aplicación que utilice dicho PVC.

Si sigue teniendo problemas con EIT tras completar estos pasos, consulte los siguientes temas de resolución de problemas:

Recursos compartidos regionales: configuración del cifrado en tránsito (Beta)

El servicio «Regional File Storage » (RFS) con cifrado en tránsito (EIT) ofrece conexiones seguras y cifradas mediante el protocolo « TLS » ( NFS ) para compartir archivos entre varias zonas de disponibilidad dentro de una misma región. El complemento « File Storage for VPC » gestiona automáticamente un sidecar de stunnel en cada nodo de trabajo que envuelve todo el tráfico de NFS en TLS 1.3 o superior, de forma transparente para tus aplicaciones.

Para obtener más información sobre «Regional File Storage », consulta Resumen del almacenamiento regional de archivos.

RFS con EIT solo está disponible en versión beta y se recomienda su uso exclusivamente con fines experimentales. No utilices esta función en cargas de trabajo de producción.

Cómo funciona

Cuando se crea un PVC con una clase de almacenamiento RFS EIT y un pod lo monta, el complemento configura automáticamente un túnel stunnel cifrado en el nodo de trabajo y redirige todo el tráfico de NFS a través de él. El cifrado es transparente para tus aplicaciones: estas siguen utilizando montajes estándar de NFS, mientras que todos los datos en tránsito están protegidos con TLS 1.3 o una versión superior.

El ciclo de vida del túnel lo gestiona íntegramente el controlador: se crea cuando un pod monta el volumen y se desmonta cuando se elimina el pod.

Antes de empezar

Limitaciones

Revisa las siguientes limitaciones antes de habilitar RFS EIT.

  • Número máximo de conexiones PVC por nodo: 300, un puerto por PVC del rango de puertos 11300–11599, asignado a 127.0.0.1.
  • Conflicto de puertos para aplicaciones con hostNetwork: true: Los pods de aplicaciones que utilizan hostNetwork: true y se vinculan a 127.0.0.1 en el rango de puertos 11300–11599 pueden entrar en conflicto con los montajes PVC de RFS EIT existentes.
  • También se aplican todas las restricciones que rigen para VPC File Storage.

Configuración del cifrado en tránsito para Regional File Storage

Sigue los siguientes pasos para configurar un recurso compartido de archivos regional con cifrado en tránsito.

  1. Crea una clase de almacenamiento que especifique el perfil « rfs » y establezca « isEITEnabled: "true" ». Guarda el siguiente código YAML en un archivo llamado « rfs-eit-sc.yaml ».

    Para RFS EIT se requieren los siguientes parámetros: profile: "rfs", isENIEnabled: "true", isEITEnabled: "true" y proto=tcp en las opciones de montaje.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ibmc-vpc-file-rfs-eit-custom
      labels:
        app.kubernetes.io/name: ibm-vpc-file-csi-driver
    provisioner: vpc.file.csi.ibm.io
    parameters:
      profile: "rfs"           # Regional File Storage profile
      billingType: "hourly"
      throughput: "1000"       # Bandwidth in MB/s (25–8192 MB/s for RFS profile)
      encrypted: "false"
      encryptionKey: ""        # Specify the CRK CRN if encrypted is true
      resourceGroup: ""        # Defaults to the resource group in the storage secret store
      isENIEnabled: "true"     # Required for RFS — enables ENI/VNI feature
      isEITEnabled: "true"     # Enables encryption in transit with stunnel
      securityGroupIDs: ""     # Defaults to the cluster security group kube-<clusterID>
      subnetID: ""             # Defaults to an available subnet in the cluster VPC
      region: ""               # Defaults to the region from the cluster node topology
      primaryIPID: ""          # Optional: existing reserved IP ID (region is required)
      primaryIPAddress: ""     # Optional: IP address for ENI/VNI (region and subnetID required)
      tags: ""
      uid: "0"
      gid: "0"
      classVersion: "1"
    mountOptions:
      - hard
      - nfsvers=4.1
      - sec=sys
      - proto=tcp              # Required for stunnel (encryption in transit)
    reclaimPolicy: "Delete"
    allowVolumeExpansion: true
    
  2. Aplica la clase de almacenamiento.

    oc apply -f rfs-eit-sc.yaml
    
  3. Crea un PVC que haga referencia a la clase de almacenamiento « ibmc-vpc-file-rfs-eit-custom ». Guarda el siguiente código YAML en un archivo llamado « rfs-eit-pvc.yaml ».

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-rfs-eit-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-file-rfs-eit-custom
    
  4. Aplica el PVC.

    oc apply -f rfs-eit-pvc.yaml
    
  5. Crea un pod que monte el PVC. Guarda el siguiente código YAML en un archivo llamado « rfs-eit-pod.yaml ».

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-rfs-eit-app
    spec:
      containers:
      - name: app
        image: nginx:latest
        volumeMounts:
        - name: rfs-eit-storage
          mountPath: /data
      volumes:
      - name: rfs-eit-storage
        persistentVolumeClaim:
          claimName: my-rfs-eit-pvc
    
  6. Aplica la cápsula.

    oc apply -f rfs-eit-pod.yaml
    

Comprobación de que el cifrado en tránsito está activo

Una vez que se haya iniciado el pod, comprueba que el cifrado en tránsito funciona correctamente verificando el destino del recurso compartido de archivos. El objetivo de montaje debe mostrar « Transit Encryption: stunnel » para confirmar que el EIT está activo.

  1. Espera a que el pod alcance el estado « Running » y el PVC alcance el estado « Bound ».

    oc get pod my-rfs-eit-app
    oc get pvc my-rfs-eit-pvc
    
  2. Obtén el ID del recurso compartido y el ID del destino de montaje del volumen persistente.

    oc describe pv <pv-name> | grep -E "fileShareId|fileShareTargetId"
    

    Toma nota de los valores « fileShareId » y « fileShareTargetId » que aparecen en la salida. Los utilizarás en el siguiente paso para verificar el EIT en el lado de la VPC.

  3. Comprueba que el destino de montaje del recurso compartido de archivos indique « stunnel » como método de cifrado de tránsito.

    ibmcloud is share-mount-target FILE_SHARE_ID FILE_SHARE_TARGET_ID | grep "Transit Encryption"
    

    Ejemplo de salida que confirma que EIT está activo:

    Transit Encryption          stunnel
    

Solución de problemas de RFS EIT

Si necesitas ayuda con los errores habituales de RFS EIT, consulta la sección « Solución de problemas del cifrado regional de File Storage en tránsito ».

Próximos pasos