了解AppSync + S3如何协同工作

时间:2018-08-08 17:45:38

标签: amazon-web-services amazon-s3 upload aws-appsync aws-amplify

我尝试并成功使用AWS Amplify快速入门文档上传文件,并使用此示例正确设置了我的graphql模式,解析器和数据源:https://github.com/aws-samples/aws-amplify-graphql

我将图像上传到S3存储桶时,由于错误响应“访问被拒绝”而被卡住很长时间。最后,我进入了S3控制台,选择了正确的存储区,进入了“授权”选项卡,然后单击“所有人”,最后选择了“写入对象”。完成后,一切正常。 但是我真的不明白为什么它能正常工作,亚马逊在我的S3控制台上向我显示了一个大而恐怖的警报,说“我们根本不建议公开S3存储桶”。 我将Amazon Cognito userPool与Appsync一起使用,并且如果我理解正确的话,则在解析器内部将图像上传到我的S3存储桶中。

那么什么是使图像上载起作用的正确配置? 我已经尝试将我的用户放在可以访问S3存储桶的组中,但是它没有用(我想因为用户实际上并不直接与我的S3存储桶进行交互,所以我的解析器可以这样做)。

我希望我的用户能够上传图片,并在应用程序上显示该图片以供所有人查看后(非常经典),所以我只是在寻找正确的方法,因为S3控制台上的警报似乎告诉我,将存储桶公开是很危险的。

谢谢!

2 个答案:

答案 0 :(得分:1)

我猜您正在使用IAM角色将文件上传到S3。您可以将存储桶策略设置为允许具有特定权限的该角色,无论它是ReadOnly,WriteOnly等。

在这里看看:https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

答案 1 :(得分:0)

好的,我发现问题出在哪里。我上载的图像是我的S3存储桶的地址,并带有aws-exports.js给定的地址。 但是,当您转到IAM角色策略,并检查cognito池的授权用户的角色时,您会看到不同的策略,并且该策略允许使用“ public”文件夹在S3存储桶中放置对象, “受保护”和“私有”。 因此,您必须更改这些路径或在前端应用程序上使用的存储区地址的末尾添加这些文件夹。

希望它将对某人有所帮助!