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 ».

  • EIT está disponible para las versiones de clúster « 1.30 » 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 IKS a partir de la versión 1.33 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 la 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 IBM Cloud Kubernetes Service. 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 ».

    kubectl 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 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.

    kubectl 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. 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 ».
  3. Crea un PVC que haga referencia a la clase de almacenamiento que hayas seleccionado y, a continuación, implementa una aplicación que utilice tu 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) proporciona 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 elimina cuando se borra 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.

    kubectl 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.

    kubectl 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.

    kubectl 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 pase al estado « Running » y el PVC al estado « Bound ».

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

    kubectl 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