我还没有找到方法来做到这一点。此外,如果您使用 Mobile SDK,您应该只获取传递给 Lambda 的 Cognito 身份 ID,您可以使用“context.identity.cognitoIdentityId”访问它。尽管one user 用户至少似乎通过使其与 Javascript 一起工作来挑战 AWS 文档集。
看起来你在你的 s3 对象键中使用 sub,所以你有没有想过把它放在那里?您会在事件中获得有关 s3 对象的大量信息,包括密钥,在您的情况下包括您的子对象。
您的 S3 事件应如下所示
{
"Records":[
{
"eventVersion":"2.0",
"eventSource":"aws:s3",
"awsRegion":"us-east-1",
"eventTime":"1970-01-01T00:00:00.000Z",
"eventName":"ObjectCreated:Put",
"userIdentity":{
"principalId":"AIDAJDPLRKLG7UEXAMPLE"
},
"requestParameters":{
"sourceIPAddress":"127.0.0.1"
},
"responseElements":{
"x-amz-request-id":"C3D13FE58DE4C810",
"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"testConfigRule",
"bucket":{
"name":"mybucket",
"ownerIdentity":{
"principalId":"A3NL1KOZZKExample"
},
"arn":"arn:aws:s3:::mybucket"
},
"object":{
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
"sequencer":"0055AED6DCD90281E5"
}
}
}
]
}
您可以解析 S3 对象键,其中应该包含您的子对象。
编辑:在分享了一些 cmets 之后,我认为你的情况是这样的:
我假设链接这些帐户的东西是电子邮件地址?一种选择是在注册时链接帐户,使用 cognito 预注册触发器和 admin-link-provider-for-user 功能。
您可以做的另一件事是获取当前(外部提供的)身份电子邮件,然后根据该电子邮件执行ListUsers。你会得到一个UserType 的列表,然后选择提供者是 Cognito 的那个,它应该会给你你想要的子。
那是你所追求的吗?
编辑:我们在 cmets 中讨论的另一个想法是直接从您的应用程序调用您的 Lambda 函数,而不是依赖于 S3 事件。这种方法的好处是您可以在调用中包含您喜欢的任何信息,例如正确的用户子。