Resolução de problemas de acesso de usuários não root a arquivos em IBM Cloud

Resolva problemas de acesso de usuários não root a arquivos enviados para IBM Cloud ao utilizar o runAsUser na implantação do seu aplicativo, incluindo permissões.

Nuvem privada virtual Infraestrutura clássica

Você transferiu por upload os arquivos para a sua instância de serviço do IBM Cloud Object Storage usando o console ou a API de REST. Quando você tenta acessar esses arquivos com um usuário não raiz definido com runAsUser em sua implementação de app, o acesso aos arquivos é negado.

No Linux, um arquivo ou um diretório tem três grupos de acesso: Owner, Group e Other. Ao fazer upload de um arquivo para o IBM Cloud Object Storage usando o console ou a API de REST, as permissões para o Owner, Group e Other serão removidas. A permissão de cada arquivo é semelhante à seguinte:

d--------- 1 root root 0 Jan 1 1970 <file_name>

Ao fazer upload de um arquivo usando o plug-in IBM Cloud Object Storage, as permissões para o arquivo são preservadas e não mudam.

Para acessar o arquivo com um usuário não raiz, o usuário não raiz deve ter permissões de leitura e gravação para o arquivo. A mudança da permissão em um arquivo como parte da implantação de pod requer uma operação de gravação. O IBM Cloud Object Storage não é projetado para cargas de trabalho de gravação.

A atualização de permissões durante a implementação do pod pode evitar que seu pod entre em um estado Running.

Para resolver esse problema, antes de montar o PVC em seu pod de app, crie outro pod para configurar a permissão correta para o usuário não raiz.

  1. Para verificar as permissões de seus arquivos em seu depósito, crie um arquivo de configuração para o seu pod test-permission e nomeie o arquivo test-permission.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-permission
    spec:
      containers:
      - name: test-permission
         image: nginx
         volumeMounts:
         - name: cos-vol
         mountPath: /test
      volumes:
      - name: cos-vol
         persistentVolumeClaim:
         claimName: <pvc_name>
    
  2. Crie o pod test-permission .

    oc apply -f test-permission.yaml
    
  3. Efetue login em seu pod.

    oc exec test-permission -it bash
    
  4. Navegue para o caminho de montagem e liste as permissões para seus arquivos.

    cd test && ls -al
    

    Saída de exemplo

    d--------- 1 root root 0 Jan 1 1970 <file_name>
    
  5. Exclua o pod.

    oc delete pod test-permission
    
  6. Crie um arquivo de configuração para o pod que você usar para corrigir as permissões de seus arquivos e nomeie-o como fix-permission.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: fix-permission
      namespace: <namespace>
    spec:
      containers:
      - name: fix-permission
        image: busybox
        command: ['sh', '-c']
        args: ['chown -R <nonroot_userID> <mount_path>/*; find <mount_path>/ -type d -print -exec chmod u=+rwx,g=+rx {} \;']
        volumeMounts:
        - mountPath: "<mount_path>"
          name: cos-volume
      volumes:
      - name: cos-volume
        persistentVolumeClaim:
          claimName: <pvc_name>
    
  7. Crie o pod fix-permission .

    oc apply -f fix-permission.yaml
    
  8. Espere o pod entrar em um estado Completed.

    oc get pod fix-permission
    
  9. Exclua o pod fix-permission.

    oc delete pod fix-permission
    
  10. Recrie o pod test-permission que você usou anteriormente para verificar as permissões.

    oc apply -f test-permission.yaml
    

Verificando se as permissões de seus arquivos estão atualizadas

  1. Efetue login em seu pod.

    oc exec test-permission -it bash
    
  2. Navegue para o caminho de montagem e liste as permissões para seus arquivos.

    cd test && ls -al
    

    Saída de exemplo

    -rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name>
    
  3. Exclua o pod test-permission.

    oc delete pod test-permission
    
  4. Monte o PVC para o app com o usuário não raiz.

Configure runAsUser e fsGroup para os mesmos valores em seu YAML de implementação

Depois de configurar as permissões corretas de arquivo na instância de serviço do IBM Cloud Object Storage, não faça o upload de arquivos usando o console ou a API de REST. Use o plug-in do IBM Cloud Object Storage para incluir arquivos em sua instância de serviço.