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

使用Jenkins+CodeCommit+S3部署Lambda遇S3访问拒绝错误求助

解决Lambda从S3获取部署包时的AccessDenied错误

我来帮你梳理下这个问题——这个403错误的核心是Lambda服务(或者你用来部署Lambda的Jenkins身份)在尝试从S3桶获取bucket/Version.zip这个部署包时,没有足够的权限执行GetObject操作。下面是几个关键的排查和解决方向:

  • 先查部署用的IAM角色/用户权限
    如果你是通过Jenkins调用Lambda API来更新函数代码,那Jenkins使用的IAM身份(不管是EC2实例角色、IAM用户凭据)必须同时具备两个权限:

    1. Lambda的UpdateFunctionCode权限,允许它触发函数更新
    2. S3的GetObject权限,针对目标桶和Version.zip这个具体文件
      别搞混了:Lambda函数自身的执行角色主要管运行时权限,部署阶段的权限问题重点看Jenkins用的那个身份。
  • 验证S3桶的权限策略
    打开S3控制台找到你的桶,检查桶策略有没有拒绝必要的访问。比如,你需要给部署用的IAM角色加一条允许s3:GetObject的策略,示例如下:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::你的AWS账号ID:role/你的Jenkins部署角色"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::bucket/Version.zip"
            }
        ]
    }
    

    另外还要注意:如果桶开了S3块公共访问,要确认它没阻止合法的IAM访问;如果桶用了KMS加密,那部署角色还得有KMS的Decrypt权限,不然就算能拿到对象,也解不开加密内容。

  • 检查单个对象的ACL权限
    有时候Version.zip这个文件本身的ACL设置会拒绝访问,你可以在S3控制台找到这个文件,查看它的权限配置,确保部署用的IAM角色有读取权限。

  • 确认Jenkins的凭据配置没问题
    如果Jenkins是用IAM用户的Access Key/Secret Key,先确认这些凭据没过期,而且对应的IAM用户确实有前面说的Lambda和S3权限;如果是用EC2实例角色运行Jenkins,要确认实例角色的权限策略正确,并且Jenkins服务已经成功获取到了角色的临时凭据(比如重启下Jenkins服务试试)。

  • 如果Lambda在VPC里,排查VPC端点配置
    要是你的Lambda函数部署在VPC内,那它访问S3可能需要通过VPC网关端点。你得确认VPC里已经创建了S3的网关端点,并且Lambda所在子网的路由表已经配置了指向这个端点的路由规则。

最后推荐个小技巧:用IAM控制台的策略模拟器,测试你的部署角色是否同时具备s3:GetObject和lambda:UpdateFunctionCode权限,能快速定位到底缺了哪项权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:38:05