我想创建一个S3存储桶策略,该策略可以阻止公共访问,但仅允许通过Cognito签名我的应用的用户可以通过应用上传对象。
我当前的存储桶策略:
{
"Version": "2012-10-17",
"Id": "Policy1593320409523",
"Statement": [
{
"Sid": "Stmt1593320397284",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::358110801253:role/Cognito_katebUnauth_Role",
"arn:aws:iam::358110801253:role/service-role/transcribe-role-k5easa7b",
"arn:aws:iam::358110801253:role/Cognito_katebAuth_Role"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::va-raw-audio-to-transcribe/*",
"arn:aws:s3:::va-raw-audio-to-transcribe"
]
}
]
}
答案 0 :(得分:2)
Amazon S3存储桶默认为私有。因此,不需要“限制”访问。而是选择一种适当的方式来“授予”所需用户访问权限。
当用户通过AWS Cognito进行身份验证时,将提供链接到 IAM角色的凭据。因此:
您已在问题中列出了3个角色。因此,请为这3个IAM角色分别添加适当的权限,以便他们可以访问所需的存储桶。
此外,请特别注意您授予的权限。您问题中的政策是授予s3:*
,这意味着用户可以删除所有对象,甚至可以删除存储桶本身!始终授予最小权限,以便他们具有足够的访问权限,但没有超出要求的范围。
例如,如果您只想允许他们上传,则他们只需要s3:PutObject
权限。