You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS EKS Pod中启用Please Build S3缓存遇权限拒绝问题

问题描述
  • 运行环境:AWS EKS Kubernetes集群,Debian容器Pod,通过jenkins/slave.jar执行Jenkins任务,使用Please Build构建应用模块(基础运行正常)
  • 需求:为Please Build启用AWS S3 Bucket缓存
  • 已完成配置:
    • Pod关联Kubernetes服务账号,通过AWS EKS OIDC Web身份使用已配置信任策略的AWS IAM角色
    • Please Build缓存配置文件:
      [Cache]
          RetrieveCommand="aws s3 cp s3://<BUCKET_NAME>/please/$CACHE_KEY -"
          StoreCommand="aws s3 cp - s3://<BUCKET_NAME>/please/$CACHE_KEY"
      
  • 异常现象:执行aws s3 cp命令时触发access denied错误,即使给IAM角色配置全权限仍无法解决
  • 身份验证验证:执行aws sts get-caller-identity显示当前使用的是Pod对应的正确IAM角色
排查与解决步骤

1. 检查S3 Bucket桶策略

IAM角色权限生效的前提是S3桶本身的策略允许访问。确认桶策略是否包含对目标IAM角色的授权,示例配置(替换占位符):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::你的AWS账号ID:role/你的IAM角色名"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<你的Bucket名>/please/*"
        }
    ]
}

2. 验证AWS CLI环境与配置

  • 检查Pod内AWS CLI版本,旧版本可能存在OIDC身份兼容问题,可升级到最新版:
    apt update && apt install -y awscli
    
  • 排查是否存在自定义AWS配置文件干扰:Pod内的~/.aws/config或/root/.aws/credentials可能覆盖EKS自动注入的凭证,可临时重命名测试:
    mv ~/.aws/config ~/.aws/config.bak
    mv ~/.aws/credentials ~/.aws/credentials.bak
    

3. 确认Please Build命令执行上下文

Please Build可能以非root用户执行命令,导致无法读取EKS注入的凭证文件(默认路径/var/run/secrets/eks.amazonaws.com/serviceaccount/token)。可通过两种方式解决:

  • 修改Please Build配置,在命令中显式指定凭证来源:
    [Cache]
        RetrieveCommand="AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN=arn:aws:iam::你的AWS账号ID:role/你的IAM角色名 aws s3 cp s3://<你的Bucket名>/please/$CACHE_KEY -"
        StoreCommand="AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN=arn:aws:iam::你的AWS账号ID:role/你的IAM角色名 aws s3 cp - s3://<你的Bucket名>/please/$CACHE_KEY"
    
  • 在Pod YAML中全局设置环境变量,确保所有进程能读取凭证:
    env:
      - name: AWS_WEB_IDENTITY_TOKEN_FILE
        value: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
      - name: AWS_ROLE_ARN
        value: arn:aws:iam::你的AWS账号ID:role/你的IAM角色名
    

4. 手动验证S3访问

  • 替换$CACHE_KEY为实际值,在Pod内手动执行完整的aws s3 cp命令,添加--debug参数查看详细错误日志:
    aws s3 cp s3://<你的Bucket名>/please/test-cache-key - --debug
    
  • 确认Bucket名称、缓存路径是否正确,避免特殊字符或路径格式错误导致的权限问题

内容的提问来源于stack exchange,提问作者Abdullah Khawer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:03:20