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

AWS-CDK配置S3桶SNS通知遇PutBucketNotificationConfiguration权限拒绝

问题排查与解决方案

错误根源

执行PutBucketNotificationConfiguration操作的是CDK自动创建的BucketNotificationsHandler Lambda自定义资源,而非S3服务本身。你之前给s3.amazonaws.com添加资源策略的方向错误,这不是触发操作的主体。

从提供的IAM报告可以看到,该Lambda角色虽已配置s3:PutBucketNotification权限,但存在两个可能的问题:

  • 权限的资源范围(*)可能被S3桶的其他策略限制
  • S3桶的资源策略未明确允许该Lambda角色执行PutBucketNotificationConfiguration操作

解决方法

方法1:给Lambda角色添加明确的桶权限(推荐)

直接为CDK生成的BucketNotificationsHandler角色添加针对目标桶的精准权限:

from aws_cdk import aws_iam as iam

# 替换为你的Lambda角色ARN(从IAM报告中获取)
NOTIFICATION_HANDLER_ROLE_ARN = "arn:aws:iam::{你的账户ID}:role/Dsp-StoreServiceStack-dev-BucketNotificationsHandler050a0587b7544547bf325f094a3db834-Role"

# 获取角色对象
notification_handler_role = iam.Role.from_role_arn(
    self,
    "NotificationHandlerRole",
    role_arn=NOTIFICATION_HANDLER_ROLE_ARN,
)

# 添加针对目标桶的PutBucketNotification权限
notification_handler_role.add_to_policy(
    iam.PolicyStatement(
        actions=["s3:PutBucketNotificationConfiguration"],
        resources=[self.bucket.bucket_arn],
        effect=iam.Effect.ALLOW
    )
)

方法2:修正S3桶的资源策略

将之前的资源策略主体替换为Lambda角色的ARN,允许其操作目标桶:

self.bucket.add_to_resource_policy(
    iam.PolicyStatement(
        actions=["s3:PutBucketNotificationConfiguration"],
        principals=[iam.ArnPrincipal(NOTIFICATION_HANDLER_ROLE_ARN)],
        resources=[self.bucket.bucket_arn],
    )
)

方法3:排查额外限制

  • 检查S3桶的资源策略是否存在Deny语句,阻止了该Lambda角色的访问
  • 确认Lambda角色未被IAM权限边界限制s3:PutBucketNotificationConfiguration操作
  • 尝试升级AWS CDK到最新版本,部分旧版本存在自动角色权限配置不全的问题

验证步骤

  1. 执行cdk synth查看生成的IAM策略,确认权限已正确关联到目标角色和桶
  2. 用cdk diff对比部署前后的资源变化,确保权限修改已生效
  3. 重新部署堆栈,观察是否仍出现AccessDenied错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:47:44