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

S3桶策略限制Lambda访问失效,两个Lambda均可访问问题咨询

问题原因与解决方法

问题原因

  1. 存储桶策略资源匹配错误:你的存储桶实际名称是x-temp-images,但策略中Resource字段写的是arn:aws:s3:::x-temp-images-bucket/*,桶名不匹配导致这条Deny规则完全不会作用在目标存储桶上。
  2. Principal主体设置错误:你把Principal设为lambda.amazonaws.com(Lambda服务),但Lambda调用S3时,实际发起请求的身份是Lambda的执行角色ARN,而非Lambda服务本身。这条规则根本匹配不到真实的请求主体,自然无法生效。
  3. 权限优先级逻辑:你给两个Lambda的执行角色都配置了全S3访问权限(Allow规则),而无效的Deny规则无法覆盖Allow,所以两个Lambda都能正常访问存储桶。

解决方法

修正存储桶策略,针对正确的存储桶和请求主体配置生效的Deny规则:

修正后的策略示例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyNonAllowedLambdaAccess",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::x-temp-images/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:SourceArn": "<允许访问的Lambda函数ARN>"
                },
                "StringEquals": {
                    "aws:PrincipalService": "lambda.amazonaws.com"
                }
            }
        }
    ]
}

关键修正点说明

  • 修正Resource中的桶名,确保和实际存储桶x-temp-images一致;
  • 使用Principal: "*"匹配所有请求主体,再通过Condition筛选出Lambda服务发起的请求(aws:PrincipalService);
  • 通过aws:SourceArn指定唯一允许访问的Lambda函数ARN,这样除了该Lambda之外,其他Lambda发起的GetObject请求都会被Deny;
  • AWS权限体系中Deny规则优先级高于Allow,所以即使Lambda角色有全S3权限,这条Deny规则也会生效,阻止未授权的Lambda访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:13:36