使用CDK部署基于私有ECR镜像的Docker Lambda时遇403错误如何解决?
我想用AWS CDK部署一个Lambda函数,该函数的Dockerfile未采用常规的AWS Lambda基础镜像,而是基于AWS Lambda镜像构建的自定义镜像,存储在ECR私有仓库中。使用的CDK构造如下:
aws_lambda.DockerImageFunction( ..., code=aws_lambda.DockerImageCode.from_image_asset(...) )
目前本地执行docker login完成认证后,能正常通过docker pull拉取该镜像,但运行cdk deploy时出现以下错误:
pulling from host <...>.dkr.ecr.eu-central-1.amazonaws.com failed with status code [manifests latest]: 403 Forbidden
给CDK执行身份配置ECR拉取权限
本地Docker的认证是用户层面的,但CDK部署时会使用执行部署的AWS身份(比如本地AWS CLI配置的凭证)拉取ECR镜像。需确保该身份拥有ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:BatchCheckLayerAvailability这三个核心权限,可通过附加AmazonEC2ContainerRegistryReadOnly托管策略,或自定义包含这三个动作的权限策略实现。检查镜像标签有效性
错误提示涉及manifests latest,需确认Dockerfile中引用的镜像标签是否为latest,且ECR仓库中确实存在该标签的镜像。若使用自定义标签,需在Dockerfile中明确指定,避免CDK尝试拉取不存在的latest镜像(部分场景下ECR会对不存在的镜像返回403而非404)。对齐AWS配置与ECR仓库信息
检查本地AWS CLI的默认配置(账号、区域)是否与ECR仓库的账号、区域匹配。可执行aws configure list查看当前配置,确保和ECR仓库地址<...>.dkr.ecr.eu-central-1.amazonaws.com中的账号、区域一致。刷新ECR登录凭证
若本地ECR凭证过期,即便docker login能成功,CDK也可能无法使用有效凭证。可执行以下命令重新生成凭证,再尝试部署:aws ecr get-login-password --region eu-central-1 | docker login --username AWS --password-stdin <你的账号>.dkr.ecr.eu-central-1.amazonaws.com
内容的提问来源于stack exchange,提问作者Tobias Feil

