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

How to access AWS ServiceAccount token as non-root in a Fargate container?

我在 Fargate 上设置了一个完全使用 pods 的 EKS 集群。我想 运行 作为非根用户在需要访问 S3 的容器中进行一些操作。为此,我创建了一个 ServiceAccount 并添加了一个具有适当 S3 策略的 IAM 角色。

我启动了一个简单的 pod,它只是无限期地等待,并使用 kubectl exec 以 root 身份下降到容器中的 bash。我在那里安装了 AWS CLI 并在命令行上尝试了一些 s3 操作,效果很好,因此 pod 可以与 S3 通信并获取数据。

现在,我的实际工作量 运行s 作为非 root,必须访问 S3 上的东西,但是当它试图访问它时,它失败了,因为令牌的权限设置为 600 并且属于根。容器中的非 root 用户也不能 sudo,这是有意的。这意味着我得到“权限被拒绝”。

是否可以让非根用户访问 Fargate pod 中的 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