通过移动应用程序管理AWS S3 Access

时间:2015-03-01 18:29:27

标签: amazon-s3

我正在创建一个使用类似于Instagram功能的应用 - 用户可以上传图片并查看其他图片。他们还需要能够只删除自己的。

我打算在S3中存储这些图像。允许用户上传,下载和删除自己的最安全的方法是什么?我目前的计划是通过我自己的系统对用户进行身份验证,然后将该登录令牌交换为AWS Cognito凭据,该凭据可以上传和下载到我的S3存储桶中。

删除我认为会更困难。我想我会让客户端向处理它的服务器发送请求,确保允许该客户端请求删除,然后使用管理员凭据将请求发送到S3。

这是一种管理所有这些的可行方法,以及如何最好地禁止用户将随机内容上传到我的存储桶中?我希望他们只能上传与其帐户和我的应用相关联的图片,但可能使用Cognito凭据,他们可以上传任何内容。

谢谢,如果我对任何事情都不清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

使用Amazon Cognito时,您的移动应用程序用户将承担身份和访问管理(IAM)角色,这使他们有权访问AWS资源。

例如,角色可以授予对Amazon S3存储桶的访问权限,以允许他们上传和下载图片。然后,您可以限制对S3存储桶的访问,以便它们只能对自己目录中的对象执行操作。

以下是插入根据其Cognito身份授予对子目录的访问权限的示例策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"]
    }
  ]
}

这样,您可以允许移动应用程序直接与S3连接以进行上载,下载和删除,而不必通过后端服务请求它。这将允许您的应用扩展而无需拥有尽可能多的服务器(因此它也更便宜!)

有关详细信息,请参阅: