Criptografia em trânsito para IBM Cloud File Storage for VPC

Nuvem Privada Virtual

Utilize a criptografia em trânsito (EIT) para proteger os dados enquanto eles são transferidos entre seus nós de trabalho e o serviço File Storage for VPC. Este tópico aborda o EIT tanto para compartilhamentos de arquivos zonais que utilizam o perfil “ dp2 ” quanto para compartilhamentos de arquivos regionais que utilizam o perfil “ rfs ”.

Compartilhamentos de arquivos por zona — Configuração da criptografia em trânsito

Se você optar por usar criptografia em trânsito, procure encontrar um equilíbrio entre seus requisitos de segurança e suas necessidades de desempenho. A criptografia de dados em trânsito pode afetar o desempenho, pois os dados precisam ser criptografados e descriptografados nos terminais. Para obter mais informações, consulte “Criptografia de VPC em trânsito ”.

Nos nós de trabalho do RHCOS ( CoreOS ), o EIT não fica ativo até que o nó seja reiniciado, após o operador instalar os pacotes necessários. Planeje uma reinicialização gradual ao ativar o EIT.

  • O EIT está disponível para as versões de cluster 4.16 e posteriores.
  • Por padrão, os compartilhamentos de arquivos são criptografados em repouso por meio da criptografia gerenciada pel IBM.
  • Para usar o EIT com clusters configurados com “Secure by Default”, é necessário adicionar a seguinte regra de tráfego de saída ao grupo de segurança “ kube-<clusterID> ”. Essa regra é adicionada automaticamente para clusters ROKS na versão 4.18 e posteriores. Para versões mais antigas do cluster, adicione a regra manualmente.
    • Protocolo: Qualquer
    • Tipo de fonte: Qualquer
    • Fonte: 0.0.0.0/0
    • Destino: 169.254.169.254
  • O EIT não está disponível para volumes provisionados estaticamente. Para configurar o EIT, é necessário utilizar o provisionamento dinâmico.
  • Os pacotes do EIT são atualizados automaticamente no seu cluster quando o EIT está ativado.
  • A criptografia de dados em trânsito pode afetar o desempenho. O impacto depende das características da sua carga de trabalho. Cargas de trabalho que realizam gravações síncronas ou contornam o cache VSI, como bancos de dados, podem sofrer um impacto substancial no desempenho quando o EIT estiver ativado. Para avaliar o impacto, compare o desempenho da sua carga de trabalho com e sem o EIT.
  • Mesmo sem o EIT, os dados trafegam por uma rede segura de data center. Para obter mais informações sobre segurança de rede, consulte “Segurança na sua VPC” e “Proteção dos serviços de infraestrutura da Nuvem Privada Virtual(VPC)com restrições baseadas no contexto ”.

File Storage for VPC só é considerado um serviço validado para serviços financeiros quando a criptografia em trânsito estiver ativada. Para obter mais informações, consulte “O que é um serviço validado para serviços financeiros?”.

Siga as etapas a seguir para configurar a criptografia em trânsito (EIT) para compartilhamentos de arquivos no seu cluster do Red Hat OpenShift on IBM Cloud. A ativação do EIT instala os pacotes necessários nos seus nós de trabalho.

  1. Anote os conjuntos de trabalhadores do seu cluster nos quais você deseja habilitar o EIT.

  2. Edite o arquivo addon-vpc-file-csi-driver-configmap``.

    oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system
    
  3. No configmap, defina ENABLE_EIT: "true" e adicione os pools de workers nos quais deseja habilitar o EIT ao campo EIT_ENABLED_WORKER_POOLS . Por exemplo: "wp1,wp2". Você também pode definir os parâmetros EIT_METADATA_RETRY_COUNT e EIT_METADATA_RETRY_INTERVAL para controlar o comportamento de repetição de tentativas ao buscar metadados da instância.

    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. Depois de habilitar o EIT, salve e feche o configmap.

Essa etapa pode levar até 5 minutos para ser concluída, à medida que o operador instala os pacotes EIT nos nós de trabalho especificados.

  1. Para verificar se o EIT está habilitado, analise os eventos do configmap file-csi-driver-status para confirmar se a instalação do EIT foi bem-sucedida em cada nó de trabalho. Procure os eventos Package installation successful para cada nó nos seus conjuntos de trabalhadores especificados.

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

    Exemplo de saída

    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. Se seus conjuntos de nós de trabalho contiverem nós RHCOS ( CoreOS ), esvazie e reinicie cada nó afetado para ativar os pacotes EIT. O EIT não funciona nos nós RHCOS até que o nó seja reiniciado. A drenagem prévia do nó garante que as cargas de trabalho em execução sejam reprogramadas para outros nós antes da reinicialização, evitando impacto nas aplicações de produção.

    Drenar o nó para encerrar com segurança todos os pods em execução.

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

    Reinicie o nó que ficou sem energia.

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

    Depois que o nó estiver novamente online e no estado “ Ready ”, desative o uncordon para permitir que as cargas de trabalho sejam agendadas nele novamente.

    oc uncordon <node-name>
    
  3. Selecione uma classe de armazenamento pré-instalada compatível com EIT ou crie sua própria classe de armazenamento.

    • Crie um PVC utilizando a classe de armazenamento “ ibmc-vpc-file-eit ”.
    • Crie sua própria classe de armazenamento e defina o parâmetro isEITEnabled como true``.
  4. Crie um PVC que faça referência à classe de armazenamento selecionada e, em seguida, implante um aplicativo que utilize esse PVC.

Caso você encontre problemas com o EIT após concluir essas etapas, consulte os tópicos de solução de problemas a seguir:

Compartilhamentos de arquivos regionais — Configuração da criptografia em trânsito (Beta)

O Serviço de Arquivos Regional ( File Storage, RFS) com criptografia em trânsito (EIT) oferece conexões seguras, criptografadas pelo Protocolo de Transmissão de Dados ( TLS ) e pelo Protocolo de Camadas de Aplicação ( NFS ) para compartilhamento de arquivos entre várias zonas de disponibilidade dentro de uma região. O complemento “ File Storage for VPC ” gerencia automaticamente um sidecar stunnel em cada nó de trabalho, que encapsula todo o tráfego NFS em TLS 1.3 ou superior, de forma transparente para suas aplicações.

Para obter informações sobre o Regional File Storage, consulte Visão geral do armazenamento regional de arquivos.

O RFS com EIT está disponível apenas como suporte Beta e é recomendado exclusivamente para uso experimental. Não utilize esse recurso em cargas de trabalho de produção.

Como isso funciona

Quando você cria um PVC com a classe de armazenamento RFS EIT e um pod o monta, o complemento configura automaticamente um túnel stunnel criptografado no nó de trabalho e encaminha todo o tráfego NFS por meio dele. A criptografia é transparente para seus aplicativos — eles continuam a usar montagens padrão do tipo “ NFS ”, enquanto todos os dados em trânsito são protegidos com o “ TLS ” 1.3 ou versão superior.

O ciclo de vida do túnel é totalmente gerenciado pelo driver: ele é criado quando um pod monta o volume e é desativado quando o pod é excluído.

Antes de Iniciar

Limitações

Verifique as seguintes limitações antes de habilitar o RFS EIT.

  • Número máximo de conexões PVC por nó: 300, uma porta por PVC no intervalo de portas 11300–11599, vinculada a 127.0.0.1.
  • Conflito de portas para aplicativos com o hostNetwork: true: Os pods de aplicativos que utilizam o hostNetwork: true e se conectam ao 127.0.0.1 no intervalo de portas 11300–11599 podem entrar em conflito com montagens PVC do RFS EIT já existentes.
  • Todas as restrições aplicáveis ao VPC File Storage também se aplicam.

Configurando a criptografia em trânsito para o Regional File Storage

Siga as etapas a seguir para configurar um compartilhamento de arquivos regional com criptografia em trânsito.

  1. Crie uma classe de armazenamento que especifique o perfil “ rfs ” e defina “ isEITEnabled: "true" ”. Salve o seguinte YAML em um arquivo chamado rfs-eit-sc.yaml.

    Os seguintes parâmetros são necessários para o RFS EIT: profile: "rfs", isENIEnabled: "true", isEITEnabled: "true" e proto=tcp nas opções de montagem.

    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. Aplique a classe de armazenamento.

    oc apply -f rfs-eit-sc.yaml
    
  3. Crie um PVC que faça referência à classe de armazenamento “ ibmc-vpc-file-rfs-eit-custom ”. Salve o seguinte YAML em um arquivo chamado 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. Aplique o PVC.

    oc apply -f rfs-eit-pvc.yaml
    
  5. Crie um pod que monte o PVC. Salve o YAML a seguir em um arquivo chamado 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. Aplique o sachê.

    oc apply -f rfs-eit-pod.yaml
    

Verificação de que a criptografia em trânsito está ativa

Após o início da operação do pod, verifique se a criptografia em trânsito está funcionando, verificando o destino do compartilhamento de arquivos. O destino da montagem deve exibir “ Transit Encryption: stunnel ” para confirmar que o EIT está ativo.

  1. Aguarde até que o pod atinja o estado “ Running ” e o PVC atinja o status “ Bound ”.

    oc get pod my-rfs-eit-app
    oc get pvc my-rfs-eit-pvc
    
  2. Obtenha o ID do compartilhamento de arquivos e o ID do destino de montagem do volume persistente.

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

    Anote os valores de “ fileShareId ” e “ fileShareTargetId ” na saída. Você os utilizará na próxima etapa para verificar o EIT no lado da VPC.

  3. Verifique se o destino de montagem do compartilhamento de arquivos apresenta “ stunnel ” como método de criptografia de trânsito.

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

    Exemplo de saída que confirma que o EIT está ativo:

    Transit Encryption          stunnel
    

Solução de problemas do RFS EIT

Para obter ajuda com erros comuns do RFS EIT, consulte a seção “Solução de problemas da criptografia regional do File Storage em trânsito ”.

Próximas etapas