用户在S3上将图像上传到他/她的子文件夹。使用策略强制实施的唯一方法是使用身份标识:
arn:aws:s3:::thebucket/${cognito-identity.amazonaws.com:sub}/avatar.jpg
触发转换该图像的lambda,并将转换保存到不同的S3。
但是现在,随着身份ID的处理,lambda需要使用对头像转换的引用来更新用户的db记录。这是问题很明显的地方,我只有身份ID,从中我需要了解cognito用户的详细信息,以便我可以在我的用户表中查找用户:sub作为标识符的用户。
我如何关联这两者?在cognito中是否有api可以根据身份ID给我sub
?
是否有更合理的方式?
答案 0 :(得分:0)
我一直无法找到办法。此外,如果您使用的是Mobile SDK,则只能将Cognito Identity ID传递给Lambda,您可以使用“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对象密钥,该对象密钥应包含您的sub。
编辑:在分享了一些评论后,我认为你的情况是这样的:
我假设链接这些帐户的东西是电子邮件地址?一种选择是在注册时使用Cognito预注册触发器和admin-link-provider-for-user功能链接帐户。
您可以做的另一件事是获取当前(外部提供的)身份电子邮件,然后根据该电子邮件执行ListUsers。您将获得UserType的列表,然后选择提供者为Cognito的列表,该列表应该为您提供所需的子列表。
那是你的事吗?
编辑:我们在评论中讨论的另一个想法是直接从您的应用程序调用您的Lambda函数,而不是依赖于S3事件。这种方法的好处是您可以在呼叫中包含您喜欢的任何信息,例如正确的用户子。