Amazon web services AWS S3事件-客户端标识
我希望允许多个客户端可以将文件上传到一个S3存储桶(或多个存储桶)。s3create事件将触发一个通知,向SNS主题添加消息。这是可行的,但我在决定如何识别哪个客户端上传了文件时遇到了问题。我可以通过显式检查上传文件的子文件夹/S3名称来实现这一点,但我更愿意自动将客户机标识符作为属性添加到SNS消息中 这可能吗?我的另一个想法是使用Lambda函数作为中间人来添加属性并将其传递给SNS主题,但是如果可能的话,我还是希望不使用Lambda函数来添加属性。从S3发送到SNS的消息包括一个字段:Amazon web services AWS S3事件-客户端标识,amazon-web-services,amazon-s3,aws-lambda,amazon-sns,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Sns,我希望允许多个客户端可以将文件上传到一个S3存储桶(或多个存储桶)。s3create事件将触发一个通知,向SNS主题添加消息。这是可行的,但我在决定如何识别哪个客户端上传了文件时遇到了问题。我可以通过显式检查上传文件的子文件夹/S3名称来实现这一点,但我更愿意自动将客户机标识符作为属性添加到SNS消息中 这可能吗?我的另一个想法是使用Lambda函数作为中间人来添加属性并将其传递给SNS主题,但是如果可能的话,我还是希望不使用Lambda函数来添加属性。从S3发送到SNS的消息包括一个字段:
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
但是,这还取决于上载对象时使用的凭据:
- 如果用户有自己的个人AWS凭据,则将提供访问密钥
- 如果您使用预签名URL来允许上载,则访问密钥将属于预签名URL中使用的密钥,并且您的应用程序(生成预签名URL)将负责跟踪请求上载的用户
- 如果您正在为每个客户端生成临时凭据(例如通过调用),则将返回角色的ID
- 配置事件通知以触发Lambda函数
- Lambda函数使用上述标识符来确定应用程序中触发通知的用户标识符(可能是查阅应用程序用户信息数据库)
- Lambda函数将消息发送到SNS或您希望接收消息的任何系统(如果您直接发送,则可能不需要SNS)
- 从S3发送到SNS的数据包括一个字段:
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
但是,这还取决于上载对象时使用的凭据:
- 如果用户有自己的个人AWS凭据,则将提供访问密钥
- 如果您使用预签名URL来允许上载,则访问密钥将属于预签名URL中使用的密钥,并且您的应用程序(生成预签名URL)将负责跟踪请求上载的用户
- 如果您正在为每个客户端生成临时凭据(例如通过调用),则将返回角色的ID
- 配置事件通知以触发Lambda函数
- Lambda函数使用上述标识符来确定应用程序中触发通知的用户标识符(可能是查阅应用程序用户信息数据库)
- Lambda函数将消息发送到SNS或您希望接收消息的任何系统(如果您直接发送,则可能不需要SNS)
private final static String CLIENT_ID = "client-id";
ObjectMetadata meta = new ObjectMetadata();
meta.addUserMetadata(CLIENT_ID, "testid");
s3Client.putObject(<bucket>, <objectKey>, <inputstream of the file>, meta);
private final静态字符串CLIENT\u ID=“CLIENT ID”;
ObjectMetadata meta=新的ObjectMetadata();
meta.addUserMetadata(客户端ID,“testid”);
s3Client.putObject(,,meta);
然后在下载S3文件时:
ObjectMetadata meta = s3Client.getObjectMetadata(<bucket>, <objectKey>);
String clientId = meta.getUserMetaDataOf(CLIENT_ID);
ObjectMetadata meta=s3Client.getObjectMetadata(,);
字符串clientId=meta.getUserMetaDataOf(客户端ID);
希望这就是您要查找的内容。您可以在上载文件之前向文件中添加用户定义的元数据,如下所示:
private final static String CLIENT_ID = "client-id";
ObjectMetadata meta = new ObjectMetadata();
meta.addUserMetadata(CLIENT_ID, "testid");
s3Client.putObject(<bucket>, <objectKey>, <inputstream of the file>, meta);
private final静态字符串CLIENT\u ID=“CLIENT ID”;
ObjectMetadata meta=新的ObjectMetadata();
meta.addUserMetadata(客户端ID,“testid”);
s3Client.putObject(,,meta);
然后在下载S3文件时:
ObjectMetadata meta = s3Client.getObjectMetadata(<bucket>, <objectKey>);
String clientId = meta.getUserMetaDataOf(CLIENT_ID);
ObjectMetadata meta=s3Client.getObjectMetadata(,);
字符串clientId=meta.getUserMetaDataOf(客户端ID);
希望这就是您想要的。非常感谢!!!这也适用于预签名URL。非常感谢!!!这也适用于预签名URL。