非rootユーザーによる以下のファイルへのアクセスに関する問題を解決するには IBM Cloud
アプリのデプロイで runAsUser を使用する場合、 IBM Cloud にアップロードされたファイルへの非rootユーザーによるアクセスに関する問題(権限を含む)を解決します。
仮想プライベートクラウド クラシック・インフラストラクチャー
コンソールまたは REST API を使用して、IBM Cloud Object Storage サービス・インスタンスにファイルをアップロードしました。 アプリ・デプロイメントで runAsUser で定義した非 root ユーザーを使用してこれらのファイルにアクセスしようとすると、ファイルへのアクセスは拒否されます。
Linux では、ファイルまたはディレクトリーには Owner、Group、および Other の 3 つのアクセス・グループがあります。 コンソールまたは REST API を使用してファイルを IBM Cloud Object Storage にアップロードする場合、Owner、Group、および Other の権限が削除されます。
各ファイルの権限は、以下のようになります。
d--------- 1 root root 0 Jan 1 1970 <file_name>
IBM Cloud Object Storage プラグインを使用してファイルをアップロードすると、ファイルの権限が保持され、変更されません。
非 root ユーザーとしてファイルにアクセスするために、非 root ユーザーには、そのファイルに対する読み取り権限と書き込み権限が必要です。 ポッド・デプロイメントの一部としてファイルの許可を変更するには、書き込み操作が必要です。IBM Cloud Object Storage は、書き込みワークロード用に設計されていません。
ポッドのデプロイメント中に権限を更新すると、ポッドが Running 状態にならない場合があります。
この問題を解決するには、PVC をアプリ・ポッドにマウントする前に、別のポッドを作成して非 root ユーザーに正しい権限を設定します。
-
バケット内のファイルの許可を確認するには、
test-permissionポッドの構成ファイルを作成し、そのファイルに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> -
test-permissionポッドを作成します。oc apply -f test-permission.yaml -
ポッドにログインします。
oc exec test-permission -it bash -
マウント・パスにナビゲートし、ファイルのアクセス権をリストします。
cd test && ls -al出力例
d--------- 1 root root 0 Jan 1 1970 <file_name> -
ポッドを削除します。
oc delete pod test-permission -
ファイルのアクセス権を修正するために使用するポッドの構成ファイルを作成し、
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> -
fix-permissionポッドを作成します。oc apply -f fix-permission.yaml -
ポッドが
Completed状態になるまで待機します。oc get pod fix-permission -
fix-permissionポッドを削除します。oc delete pod fix-permission -
以前に使用した
test-permissionポッドを再作成して、アクセス権を確認します。oc apply -f test-permission.yaml
ファイルの権限が更新されていることの確認
-
ポッドにログインします。
oc exec test-permission -it bash -
マウント・パスにナビゲートし、ファイルのアクセス権をリストします。
cd test && ls -al出力例
-rwxrwx--- 1 <nonroot_userID> root 6193 Aug 21 17:06 <file_name> -
test-permissionポッドを削除します。oc delete pod test-permission -
非 root ユーザーとしてアプリに PVC をマウントします。
runAsUser と fsGroup を、デプロイメント YAML 内の同じ値に設定します。
IBM Cloud Object Storage サービス・インスタンスで正しいファイル許可を設定した後は、コンソールまたは REST API を使用してファイルをアップロードしないでください。 IBM Cloud Object Storage プラグインを使用して、サービス・インスタンスにファイルを追加します。