在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
相关产品推荐
相关产品推荐

