Search code examples
amazon-web-serviceseventsamazon-cloudwatchserverlessamazon-sagemaker

AWS EventBridge rule doesn't trigger: Error. NotAuthorizedForSourceException. Not authorized for the source


I'm creating a rule that should fire every time there is a change in status in a SageMaker batch transform job.

I'm using Serverless Framework but to simplify it even further, here's what I did:

The rule, exported from AWS console:

AWSTemplateFormatVersion: '2010-09-09'
Description: >-
  CloudFormation template for EventBridge rule
  'sagemaker-transform-status-to-CWL'
Resources:
  EventRule0:
    Type: AWS::Events::Rule
    Properties:
      EventBusName: default
      EventPattern:
        source:
          - aws.sagemaker
        detail-type:
          - SageMaker Training Job State Change
      Name: sagemaker-transform-status-to-CWL
      State: ENABLED
      Targets:
        - Id: XXX
          Arn: >-
            arn:aws:logs:us-east-1:XXX:log-group:/aws/events/sagemaker-notifications

Eventually I want this to trigger a step function or a lambda function, but for now I am configuring the target to be CloudWatch with log group 'sagemaker-notifications'

I expect that everytime I run a batch transform job in SageMaker, this will get notified and the log would show up on cloudwatch.

But I'm not getting any logs, so when I tried to PutEvents manually to test it, I was getting this:

Error. NotAuthorizedForSourceException. Not authorized for the source.

It's probably an issue with roles, but I'm not sure which kind of role to configure, where and who should assume it.

Tried going through AWS tutorials, adding permissions to the default event bus, using serverless framework


Solution

  • See some sample event patterns here - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html#aws-resource-events-rule--examples

    Your source should be a custom source, and cannot contain aws. (Reference -https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)