AWS S3事件 - 客户端标识

Bla*_*her 1 amazon-s3 amazon-web-services amazon-sns aws-lambda

我希望允许多个客户端可以将文件上传到S3存储桶(或存储桶).S3创建事件将触发将向SNS主题添加消息的通知.这有效,但我在确定如何识别哪个客户端上传文件时遇到问题.我可以通过显式检查上传文件的子文件夹/ S3名称来实现此功能,但我更愿意自动将客户端标识符添加为SNS消息的属性.

这可能吗?我的另一个想法是使用Lambda函数作为中间人来添加属性并将其传递给SNS主题,但是如果可能的话我还想在没有Lambda函数的情况下这样做.

Joh*_*ein 5

从S3发送到SNS 的事件消息结构包括一个字段:

     "userIdentity":{  
        "principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
     },
Run Code Online (Sandbox Code Playgroud)

但是,这还取决于上载对象时使用的凭据:

  • 如果用户拥有其各自的AWS凭据,则将提供访问密钥
  • 如果您使用预先签名的URL来允许上传,则访问密钥将属于预签名URL中使用的访问密钥,并且您的应用程序(生成预签名URL)将负责跟踪用户请求上传
  • 如果要为每个客户端生成临时凭证(例如,通过调用AssumeRole,则会返回Role的ID

(我没有测试上述所有情况,所以请测试它们以确认Amazon-customer-of-the-user-who-cause-the-event的定义.)

如果您的目标是将自己的客户端标识符放在消息中,那么最好的方法是:

  • 配置事件通知以触发Lambda函数
  • 您的Lambda函数使用上述标识符来确定应用程序中的哪个用户标识符触发了通知(可能是咨询应用程序用户信息的数据库)
  • Lambda函数将消息发送到SNS或您希望接收消息的系统(如果您直接发送,则可能不需要SNS)