我正在开发一款移动应用,我希望用户能够上传图片(如果需要,可以进行编辑),供其他人查看。
显然,我不希望除原始上传者之外的任何人都可以更改自己的照片。
如何使用Amazon S3实现此类文件权限?或者,如何使用Google云端存储?
我已经阅读了有关IAM和ACL的内容,但我的理解是IAM角色仅适用于我事先知道的用户(例如我的队友)。有没有办法从移动应用程序创建IAM帐户?是推荐吗?
答案 0 :(得分:2)
通常有两种方法可以做到这一点......
HTTP访问
这是一个非常聪明的方法,因为您的应用程序可以完全控制谁可以访问对象。在提供访问对象的URL时,应用程序会生成一个临时授予访问权限的有时间限制的预签名URL。上传也是如此。
API访问
移动应用可以使用AWS开发工具包直接调用AWS服务,例如将对象上传或下载到Amazon S3。
您的服务器端应用程序可以generate temporary credentials using the AWS Secure Token Service或Amazon Cognito。这些凭据将传递给移动客户端,然后可以直接调用AWS服务。
这是移动应用使用AWS服务的首选方法。
您应该不为应用程序用户创建IAM凭据 - IAM凭据只应提供给您的员工或您的应用程序。
答案 1 :(得分:0)
从Google Cloud的角度来看,处理云存储分区及其中对象访问的最合适方式是使用Access Control Lists (ACLs)。这些是一组规则,用于确定用户可以对存储在存储桶中的文件执行的操作。
对于您的特定情况,您可以定义一个允许所有用户查看存储图像的ACL,但只有相应的所有者才能对其进行更改。您可以通过使用新创建的存储桶从gcloud
运行此命令来执行此操作:
gsutil defacl set public-read gs://[YOUR-BUCKET]
一旦这样做,即使只有文件所有者可以编辑它们,上传到该存储桶的所有新文件都将公开显示。
如果您已经创建了存储桶,还可以通过运行此命令来设置public-read
ACL:
gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
这样,任何用户都可以查看该存储桶中的所有现有文件。
对于从您的域访问的用户,还有一种方法可以查看存储的图像,具体如下:
gsutil acl ch -g [YOUR-DOMAIN]:R gs://[BUCKET_NAME]
您可以按照以下link探索将ACL设置到Cloud Storage存储桶的其他选项。