如何让用户上传/编辑S3上的图片和其他人只能阅读它?

时间:2018-04-17 23:28:39

标签: amazon-web-services amazon-s3 google-cloud-storage

我正在开发一款移动应用,我希望用户能够上传图片(如果需要,可以进行编辑),供其他人查看。

显然,我不希望除原始上传者之外的任何人都可以更改自己的照片。

如何使用Amazon S3实现此类文件权限?或者,如何使用Google云端存储?

我已经阅读了有关IAM和ACL的内容,但我的理解是IAM角色仅适用于我事先知道的用户(例如我的队友)。有没有办法从移动应用程序创建IAM帐户?是推荐吗?

2 个答案:

答案 0 :(得分:2)

通常有两种方法可以做到这一点......

HTTP访问

  • Amazon S3上的对象保持为私有
  • 您的应用程序始终确定是否允许用户读取/写入对象
  • 您的应用程序生成Amazon S3 pre-signed URLs以允许用户访问私有对象

这是一个非常聪明的方法,因为您的应用程序可以完全控制谁可以访问对象。在提供访问对象的URL时,应用程序会生成一个临时授予访问权限的有时间限制的预签名URL。上传也是如此。

API访问

移动应用可以使用AWS开发工具包直接调用AWS服务,例如将对象上传或下载到Amazon S3。

您的服务器端应用程序可以generate temporary credentials using the AWS Secure Token ServiceAmazon 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存储桶的其他选项。