我正在创建一个使用类似于Instagram功能的应用 - 用户可以上传图片并查看其他图片。他们还需要能够只删除自己的。
我打算在S3中存储这些图像。允许用户上传,下载和删除自己的最安全的方法是什么?我目前的计划是通过我自己的系统对用户进行身份验证,然后将该登录令牌交换为AWS Cognito凭据,该凭据可以上传和下载到我的S3存储桶中。
删除我认为会更困难。我想我会让客户端向处理它的服务器发送请求,确保允许该客户端请求删除,然后使用管理员凭据将请求发送到S3。
这是一种管理所有这些的可行方法,以及如何最好地禁止用户将随机内容上传到我的存储桶中?我希望他们只能上传与其帐户和我的应用相关联的图片,但可能使用Cognito凭据,他们可以上传任何内容。
谢谢,如果我对任何事情都不清楚,请告诉我。
答案 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连接以进行上载,下载和删除,而不必通过后端服务请求它。这将允许您的应用扩展而无需拥有尽可能多的服务器(因此它也更便宜!)
有关详细信息,请参阅: