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

AWS EventBridge规则未触发:NotAuthorizedForSourceException权限问题

解决SageMaker批量转换作业触发EventBridge规则的权限问题

问题根源

NotAuthorizedForSourceException 报错的本质是两个权限缺失:

  1. SageMaker服务没有权限向你的EventBridge默认事件总线发送事件
  2. EventBridge规则没有权限将事件写入目标CloudWatch日志组

具体配置步骤

1. 给默认事件总线添加资源策略

要让SageMaker能把状态变化事件推送到EventBus,得给默认事件总线加一条允许策略。在Serverless.yml的resources区块里添加:

resources:
  Resources:
    SageMakerEventBusPolicy:
      Type: AWS::Events::EventBusPolicy
      Properties:
        EventBusName: default
        StatementId: AllowSageMakerPutEvents
        Action: events:PutEvents
        Principal: sagemaker.amazonaws.com
        Condition:
          StringEquals:
            events:source: aws.sagemaker

这个策略明确允许sagemaker.amazonaws.com服务调用events:PutEvents动作,限定事件源为aws.sagemaker。

2. 创建EventBridge规则的执行角色

EventBridge需要一个角色来完成向CloudWatch日志组写日志的操作,这个角色必须由events.amazonaws.com扮演,并且拥有日志写入权限。同样在resources里配置:

resources:
  Resources:
    # 接上面的SageMakerEventBusPolicy,继续添加
    EventBridgeLogRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal:
                Service: events.amazonaws.com
              Action: sts:AssumeRole
        Policies:
          - PolicyName: WriteToCloudWatchLogs
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Action:
                    - logs:CreateLogStream
                    - logs:PutLogEvents
                  Resource: "arn:aws:logs:<你的AWS区域>:<你的AWS账号ID>:log-group:<你的目标日志组名>:*"

3. 关联角色到EventBridge规则

在定义EventBridge规则的时候,指定上面创建的执行角色,同时确保事件匹配规则正确:

# 示例:在Serverless的functions区块下配置事件
functions:
  # 无函数需求时可仅保留events配置
events:
  - eventBridge:
      eventBus: default
      pattern:
        source:
          - aws.sagemaker
        detail-type:
          - "SageMaker Batch Transform Job State Change"
      target:
        arn: "arn:aws:logs:<你的AWS区域>:<你的AWS账号ID>:log-group:<你的目标日志组名>"
        roleArn: !GetAtt EventBridgeLogRole.Arn

验证方法

  1. 部署更新后的Serverless配置
  2. 启动一个SageMaker批量转换作业,等待状态变化(比如从Starting到Completed)
  3. 检查目标CloudWatch日志组,应该能看到对应的事件日志

如果问题仍存在,排查以下几点:

  • 事件总线策略是否生效(到EventBridge控制台的事件总线页面查看资源策略)
  • 执行角色的权限是否覆盖了目标日志组的完整ARN
  • 规则的事件pattern是否和SageMaker输出的事件完全匹配(可去EventBridge的事件历史里查看实际事件结构)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:40:27