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

Bitbucket流水线调用AWS Lambda时出现授权拒绝错误的原因

解决Bitbucket流水线中SAM Local调用Python 3.11 Lambda镜像的403权限问题

问题场景

基于python:3.11-alpine构建包含aws-sam-cli==1.115.0的自定义镜像,推送到DigitalOcean镜像仓库后,在Bitbucket流水线中引用该镜像:

image:
  name: registry.digitalocean.com/myuri

执行sam local start-api启动本地API服务后,前几次Lambda调用正常,但多次请求后触发403权限错误:

samcli.commands.local.cli_common.user_exceptions.DockerDistributionAPIError: 403 Client Error for http://localhost:2375/v1.35/distribution/public.ecr.aws/lambda/python:3.11-x86_64/json: Forbidden ("authorization denied by plugin pipelines: ")

回退到Python 3.9版本的镜像后问题消失,本地环境运行测试无异常。

核心原因

错误提示中的plugin pipelines指向Bitbucket流水线的内置插件,问题本质是:

  • Python 3.9的Lambda基础镜像可能已存在于Bitbucket流水线的缓存中,无需动态拉取
  • Python 3.11的Lambda镜像为首次拉取,触发了流水线插件的权限拦截,导致无法访问公共ECR的镜像资源

解决方案

1. 预拉取Lambda基础镜像到自定义镜像

在构建自定义SAM镜像时,提前拉取public.ecr.aws/lambda/python:3.11-x86_64,避免流水线运行时动态拉取触发权限问题。修改Dockerfile:

FROM python:3.11-alpine
# 预拉取Lambda Python 3.11基础镜像
RUN docker pull public.ecr.aws/lambda/python:3.11-x86_64
# 安装aws-sam-cli
RUN pip install aws-sam-cli==1.115.0
# 其他依赖安装步骤...

2. 强制SAM使用本地缓存镜像

执行sam local start-api时添加--skip-pull-image参数,禁止SAM动态拉取镜像,直接使用预拉取的本地镜像:

sam local start-api --skip-pull-image [你的其他启动参数]

3. 匿名登录公共ECR

在流水线步骤中添加公共ECR的匿名登录命令,绕过部分权限拦截:

docker login public.ecr.aws

公共ECR无需提供用户名密码,执行该命令即可完成匿名认证。

4. 检查Bitbucket流水线权限配置

确认Bitbucket流水线的Docker daemon配置允许拉取公共ECR镜像,必要时在流水线的options中启用完整的Docker权限:

options:
  docker: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:33:25