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

Managing AWS S3 Access via Mobile App

我正在创建一个应用程序,它利用类似于 instagram 的功能——用户可以上传图像并查看其他人的图像。他们还需要能够删除自己的。

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

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

这是管理所有这些的可行方法吗?我怎样才能最好地禁止用户将随机内容上传到我的存储桶?我希望他们只能上传与他们的帐户和我的应用程序关联的图像,但大概他们可以使用 Cognito 凭据上传任何内容。

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

使用 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 交互以进行上传、下载和删除,而不必通过后端服务请求它。这将使您的应用程序无需拥有那么多服务器即可扩展(因此它也更便宜!)

详情请见: