Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 当通过API网关调用lambda时,使用IAM控制AWS Cognito用户的访问?_Amazon S3_Aws Lambda_Aws Api Gateway_Amazon Cognito_Amazon Iam - Fatal编程技术网

Amazon s3 当通过API网关调用lambda时,使用IAM控制AWS Cognito用户的访问?

Amazon s3 当通过API网关调用lambda时,使用IAM控制AWS Cognito用户的访问?,amazon-s3,aws-lambda,aws-api-gateway,amazon-cognito,amazon-iam,Amazon S3,Aws Lambda,Aws Api Gateway,Amazon Cognito,Amazon Iam,我的web应用根据AWS Cognito对用户进行身份验证,以获取临时凭据。根据标准的信任关系,可以访问API网关(“资源”):“arn:aws:execute API:*”)和s3(“资源”):[“arn:aws:s3:::bucket_name/*”]) 在s3中,我有多个对象,我需要根据用户的购买情况控制对这些对象的访问。因此,一个用户可能只能访问对象A和C,另一个用户只能访问对象B和C 还有一个API端点返回bucket的内容,它还需要知道用户的权限,因为它应该隐藏用户不允许看到的对象,

我的web应用根据AWS Cognito对用户进行身份验证,以获取临时凭据。根据标准的信任关系,可以访问API网关(
“资源”):“arn:aws:execute API:*”
)和s3(
“资源”):[“arn:aws:s3:::bucket_name/*”]

在s3中,我有多个对象,我需要根据用户的购买情况控制对这些对象的访问。因此,一个用户可能只能访问对象A和C,另一个用户只能访问对象B和C

还有一个API端点返回bucket的内容,它还需要知道用户的权限,因为它应该隐藏用户不允许看到的对象,并且应该标记只读对象

我一直在尝试访问lambda中的cognito标识id,但是由于对象不能通过lambda上传,所以我需要允许一些对s3的直接访问。所以我真的需要一个基于IAM的解决方案-我相信

因此,我的大问题是,我如何从一个IAM角色(具有cognito的信任关系)到控制congito中每个用户的访问

更新


用户购买的东西实际上还没有存储在某个地方,因为我仍然需要为他们找出最好的地方。因为我已经有了dynamo DB,它似乎很适合。

对于这种粒度,您需要准确定义业务逻辑需要如何表达权限。这对于内置功能来说似乎太复杂了。这个呢。。。创建一个Lambda函数,用于评估用户的“购买”(值得一提的是:这些内容存储在何处?)以及对于读取S3的请求,如果用户有权发出请求,则在Lambda函数内生成一个预签名URL,并返回HTTP 302重定向以将浏览器发送到S3端点。因此,不需要对S3使用Cognito creds。看起来简单多了。想法?用于预签名URL的lambda函数真是个好主意!事实上,我已经在用这个了。只是目前lambda函数不知道调用用户是谁。我曾尝试在lambda中获取此信息,但它似乎不可靠(context.identity.cognito_identity_id为null)。如果在lambda中有一种正确的方法,这将是一个非常好的解决方案。我将添加一个关于购买物品存储位置的更新。)@Michael sqlbot我已经检查了链接并按照说明进行了操作,但在通过android sdk访问api时遇到了故障。似乎其他人也面临同样的问题。基本上,我似乎无法从用户池中获取凭据,而只能从身份池中获取凭据。不幸的是,我无法在网上找到一个有效的例子。AWS文档在这方面也相当轻松。。。