[英]EFS mount on ECS Fargate - Read/write permissions denied for non root user
[英]How can I give my non-root user write permissions on a kubernetes volume mount?
根據我的理解(基於本指南https://snyk.io/blog/10-kube.netes-security-context-settings-you-should-understand/ ),如果我為某些 kube 指定了以下安全上下文。網莢
securityContext:
# Enforce to be run as non-root user
runAsNonRoot: true
# Random values should be fine
runAsUser: 1001
runAsGroup: 1001
# Automatically convert mounts to user group
fsGroup: 1001
# For whatever reasons this is not working
fsGroupChangePolicy: "Always"
我希望這個 pod 以用戶 1001 和組 1001 的身份運行。這是按預期工作的,因為在容器中運行id
會導致: uid=1001 gid=1001 groups=1001
。
所有掛載的文件系統應該自動被用戶組 1001 訪問,因為我們指定fsGroup
和fsGroupChangePolicy
。 我想這也行得通,因為在其中一個安裝的文件夾中運行ls -l
時,我可以看到文件的訪問權限如下所示: -rw-r--r-- 1 50004 50004
。 所有權仍然屬於初始化時使用的 uid 和 gid,但我可以看到該文件現在可供其他人讀取。
現在的問題是如何為我的fsGroup
添加寫權限,這些權限似乎仍然缺失?
您需要在 pod/deployment/{supported_kinds} 中添加一個額外的init_container
,並使用命令將安裝在 pod 上的卷的權限授予/更改為容器在運行時使用的用戶 ID。
initContainers:
- name: volumepermissions
image: busybox ## any image having linux utilities mkdir,echo,chown will work.
imagePullPolicy: IfNotPresent
env:
- name: "VOLUME_DATA_DIR"
value: mountpath_for_the_volume
command:
- sh
- -c
- |
mkdir -p $VOLUME_DATA_DIR
chown -R 1001:1001 $VOLUME_DATA_DIR
echo 'Volume permissions OK ✓'
volumeMounts:
- name: data
mountPath: mountpath_for_the_volume
當 pod 中的容器以 root 以外的用戶身份運行並且需要對已安裝卷的寫入權限時,這是必需的。
如果這是一個 helm 模板,這個 init 容器可以創建為一個模板,並在所有 pod/deployments/{supported kinds} 中使用以更改卷權限。
更新:如@The Fool 所述,如果您使用的是 Kube.netes v1.23 或更高版本,它應該按照當前設置工作。 在 v1.23 securityContext.fsGroup 和 securityContext.fsGroupChangePolicy功能進入 GA/stable 之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.