使用无服务器框架如何使用 Cloud Watch 事件记录 Amazon S3 对象级操作

Using Serverless Framework how to Logging Amazon S3 Object-Level operation using Cloud Watch events

我有一个 S3 资源,我可以在上面放置和删除对象。这些操作是客户端操作,这意味着这些操作不涉及 lambda 函数。后端是使用无服务器创建的。

这里是 serverless.yml

中 resource 键下的 S3 资源
resources:
  Resources:
    AttachmentsBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:provider.environment.PROJECTS_S3_BUCKET}
        CorsConfiguration:
          CorsRules:
            - AllowedOrigins:
                - '*'
              AllowedHeaders:
                - '*'
              AllowedMethods:
                - GET
                - PUT
                - POST
                - DELETE
                - HEAD
              MaxAge: 3000

    BucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref AttachmentsBucket
        PolicyDocument:
          Id: MyPolicy
          Version: "2012-10-17"
          Statement:
            - Sid: PublicReadWriteBucketPolicy
              Effect: Allow
              Principal: '*'
              Action:
                - 's3:GetObject'
                - 's3:PutObject'
              Resource: 'arn:aws:s3:::${self:provider.environment.PROJECTS_S3_BUCKET}/*'

我需要使用 Cloudwatch 事件(PUT 和 DELETE 对象)记录 Amazon S3 对象级操作,以便以后可以使用这些日志(作为 Step 函数的来源)

有人可以告诉我如何在无服务器框架中使用 CloudWatch 事件记录 Amazon S3 对象级操作吗?

BR

我以前用过这里描述的方法:https://docs.aws.amazon.com/eventbridge/latest/userguide/log-s3-data-events.html

简而言之,您启用 Cloudtrail,将 Eventbridge 配置为 match/filter 您感兴趣的 S3 资源和操作,然后使用 Lambda 记录那些特定事件,或者可以触发其他操作。

使用无服务器框架的最快方法可能是将 lambda 函数连接到 s3 事件流,如 here 所述。

那么我想您可以只写入 cloudwatch(使用 console.log)- 但跳过 cloudwatch 并使用此 lambda 函数触发您的步骤函数可能会更简单。

serverless.yml 文件应如下所示(从下面获取的其他上下文):

  imagewasuploadedevent:
    handler: src/stepfunctions/imageWasUploadedEvent.handler
    events:
     - s3:
        bucket: !Ref AttachmentsBucket
        existing: true

@Aaton Stuyvenberg 指出的 link 上面解释了解决方案

我们需要声明存储桶存在 该事件将是 S3 事件,函数的定义应为

  imagewasuploadedevent:
    handler: src/stepfunctions/imageWasUploadedEvent.handler
    events:
     - s3:
        bucket: !Ref AttachmentsBucket
        existing: true

key existing: true 表示没有创建新的bucket 有关此的更多信息,请参见此处 Serverless Framework Documentation