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

Bitbucket Pipeline部署AWS EKS时配置凭证仍报权限错误

Bitbucket Pipeline部署AWS EKS权限报错修复

现有流水线配置

image: atlassian/default-image:3

pipelines:
  tags:
    ecr-release-*:
      - step:
          services:
            - docker
          script:
            - apt update -y
            - apt install python3-pip -y
            - pip3 --version
            - pip3 install awscli
            - aws configure set aws_access_key_id "AKIA6J47DSdaUIAZH46DKDDID6UH"
            - aws configure set aws_secret_access_key "2dWgDxx5i7Jre0aZJ+tQ3oDve5biYk0ZMDKKASA7554QoJSJSJS"
            - curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
            - chmod +x ./kubectl
            - mv ./kubectl /usr/local/bin/kubectl
            - aws eks update-kubeconfig --name build_web --region us-west-2
            - kubectl apply -f eks/aws-auth.yaml
            - kubectl apply -f eks/deployment.yaml
            - kubectl apply -f eks/service.yaml

definitions:
  services:
    docker:
      memory: 3072

问题根因

  • 执行逻辑死循环:kubectl apply -f eks/aws-auth.yaml是第一个集群操作,但此时流水线使用的IAM身份还没被加入EKS授权列表,根本没有集群操作权限,不可能成功修改aws-auth配置本身。
  • IAM权限缺失:配置的AK/SK对应的IAM身份,没有分配EKS访问的基础权限,无法通过EKS鉴权。
  • 工具版本兼容问题:pip默认安装的是awscli v1旧版本,和当前EKS版本、新版kubectl的鉴权逻辑不兼容,会触发虚假权限报错。
  • 安全违规:AK/SK明文硬编码在代码仓库中,属于严重安全风险,密钥随时可能泄露被刷云资源账单。

修复步骤

  1. 提前配置EKS授权:在本地用有EKS集群管理员权限的账号执行命令编辑aws-auth配置,把流水线使用的IAM用户提前加入授权列表:
kubectl edit configmap aws-auth -n kube-system

在mapUsers段添加如下配置,替换为你自己的账号ID和IAM用户名:

mapUsers: |
  - userarn: arn:aws:iam::[你的AWS账号ID]:user/[流水线专用IAM用户名]
    username: pipeline-deploy
    groups:
      - system:masters

保存退出后,该IAM用户就拥有集群操作权限,后续直接删除流水线脚本中kubectl apply -f eks/aws-auth.yaml这行即可,不需要流水线自行修改授权配置。
2. 给IAM用户分配最小权限:给流水线专用IAM用户关联如下策略,满足EKS kubeconfig拉取需求即可,不要直接给管理员全权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:ListClusters"
            ],
            "Resource": "*"
        }
    ]
}
  1. 替换密钥配置方式:删除脚本中明文写死的aws configure set两行,在Bitbucket仓库的「Repository variables」中添加加密变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,流水线运行时会自动读取这两个环境变量做鉴权,避免密钥泄露。
  2. 升级工具版本:把pip安装awscli的逻辑替换为安装awscli v2版本,同时固定kubectl版本和集群版本差不超过1个小版本,避免兼容问题。修正后的完整流水线脚本参考:
image: atlassian/default-image:3

pipelines:
  tags:
    ecr-release-*:
      - step:
          services:
            - docker
          script:
            - apt update -y && apt install unzip curl -y
            # 安装awscli v2版本
            - curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
            - unzip -q awscliv2.zip
            - ./aws/install
            # 安装和集群版本匹配的kubectl,这里以1.28版本为例
            - curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.28.0/bin/linux/amd64/kubectl
            - chmod +x ./kubectl
            - mv ./kubectl /usr/local/bin/kubectl
            - aws eks update-kubeconfig --name build_web --region us-west-2
            - kubectl apply -f eks/deployment.yaml
            - kubectl apply -f eks/service.yaml

definitions:
  services:
    docker:
      memory: 3072
  1. 预校验:本地配置相同的AK/SK环境变量,先执行aws eks update-kubeconfig和kubectl get ns测试,确认鉴权通了再触发流水线,减少盲调成本。

内容的提问来源于stack exchange,提问作者Kiran S youtube channel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:18