如何在Fargate容器中以非root用户身份访问AWS ServiceAccount令牌?

问题描述

我设置了一个完全使用Fargate上的Pod的EKS集群。我想以非root用户身份在需要访问S3的容器中运行某些程序。为此,我创建了ServiceAccount添加了具有适当S3策略的IAM角色。

我启动了一个准系统吊舱,该吊舱无限期地等待,并使用kubectl exec作为根下降到容器中的bash。我在那里安装了AWS CLI,并在命令行上尝试了一些s3操作,效果很好,因此pod可以与S3对话并获取数据。

现在,我的实际工作负载以非root用户身份运行,并且必须访问S3上的内容,但是当它尝试访问它时,它失败了,因为令牌的权限设置为600,并且属于root用户。容器中的非root用户也无法sudo,这是有意的。这意味着我“权限被拒绝”。

是否可以授予非root用户访问Fargate窗格中的serviceaccount令牌的权限,还是必须让我的用户在启动脚本中将sudochmod令牌授予644 ?

解决方法

通过权限600挂载令牌的事实实际上是a known issue。一种解决方法是指定一个fsGroup

类似的事情对我有用:

---
apiVersion: v1
kind: Pod
metadata:
  name: foo
  labels:
    name: foo
spec:
  containers:
    - name: foo
      image: foo:bar
      resources:
        limits:
          memory: "128Mi"
          cpu: "500m"
      command:
        - "/do-something.sh"
  securityContext:
    fsGroup: 65534
  serviceAccountName: serviceAccountWithAccessToS3