다음 위치에 있는 파일에 대한 비루트 사용자의 접근 문제를 해결하려면 IBM Cloud

앱 배포 시 runAsUser 를 사용할 때, IBM Cloud 에 업로드된 파일에 대한 비루트 사용자 액세스 문제(권한 문제 포함)를 해결하십시오.

가상 프라이빗 클라우드 클래식 인프라

콘솔 또는 REST API를 사용하여 IBM Cloud Object Storage 서비스 인스턴스에 파일을 업로드했습니다. 앱 배치에서 runAsUser로 정의된 루트가 아닌 사용자로 이러한 파일에 액세스를 시도하면 파일에 대한 액세스가 거부됩니다.

Linux에서는 파일 또는 디렉토리에 세 개의 액세스 그룹(Owner, GroupOther)이 있습니다. 콘솔 또는 REST API를 사용하여 IBM Cloud Object Storage에 파일을 업로드하면 Owner, GroupOther에 대한 권한이 제거됩니다. 각 파일의 권한은 다음과 같이 나타날 수 있습니다.

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

IBM Cloud Object Storage 플러그인을 사용하여 파일을 업로드하면 파일에 대한 권한이 유지되며 변경되지 않습니다.

루트가 아닌 사용자로 파일에 액세스하려면 해당 루트가 아닌 사용자에게 해당 파일에 대한 읽기 및 쓰기 권한이 있어야 합니다. 팟(Pod) 배치의 일부로 파일에 대한 권한을 변경하려면 쓰기 오퍼레이션이 필요합니다. IBM Cloud Object Storage는 쓰기 워크로드용으로 디자인되지 않았습니다.

팟(Pod) 배치 중에 권한을 업데이트하면 팟(Pod)이 Running 상태가 되지 못할 수 있습니다.

이 문제를 해결하려면 PVC를 앱 팟(Pod)에 마운트하기 전에 다른 팟(Pod)을 작성하여 루트가 아닌 사용자에 대한 올바른 권한을 설정하십시오.

  1. 버킷에 있는 파일의 권한을 확인하려면 test-permission 팟(Pod)에 대한 구성 파일을 작성하고 이 파일의 이름을 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. test-permission 팟(Pod)을 작성하십시오.

    oc apply -f test-permission.yaml
    
  3. 팟(Pod)에 로그인하십시오.

    oc exec test-permission -it bash
    
  4. 마운트 경로로 이동하고 파일에 대한 권한을 나열하십시오.

    cd test && ls -al
    

    출력 예

    d--------- 1 root root 0 Jan 1 1970 <file_name>
    
  5. 팟(Pod)을 삭제하십시오.

    oc delete pod test-permission
    
  6. 파일의 권한 정정에 사용되는 팟(Pod)의 구성 파일을 작성하고 이름을 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. fix-permission 팟(Pod)을 작성하십시오.

    oc apply -f fix-permission.yaml
    
  8. 팟(Pod)이 Completed 상태가 될 때까지 대기하십시오.

    oc get pod fix-permission
    
  9. fix-permission 팟(Pod)을 삭제하십시오.

    oc delete pod fix-permission
    
  10. 권한 확인을 위해 이전에 사용된 test-permission 팟(Pod)을 재작성하십시오.

    oc apply -f test-permission.yaml
    

파일에 대한 권한이 업데이트되었는지 확인

  1. 팟(Pod)에 로그인하십시오.

    oc exec test-permission -it bash
    
  2. 마운트 경로로 이동하고 파일에 대한 권한을 나열하십시오.

    cd test && ls -al
    

    출력 예

    -rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name>
    
  3. test-permission 팟(Pod)을 삭제하십시오.

    oc delete pod test-permission
    
  4. 루트가 아닌 사용자로 PVC를 앱에 마운트하십시오.

runAsUserfsGroup 를 배치 YAML에서 동일한 값으로 설정하십시오.

IBM Cloud Object Storage 서비스 인스턴스에서 올바른 파일 권한을 설정한 후에는 콘솔 또는 REST API를 사용하여 파일을 업로드하지 마십시오. IBM Cloud Object Storage 플러그인을 사용하여 파일을 서비스 인스턴스에 추가하십시오.