我在Amazon Cognito Identity池下设置了未经身份验证的角色。我的目标是我的移动应用程序的访客用户能够将调试日志(小文本文件)上传到我的S3存储桶,以便我可以解决问题。我注意到如果我不修改我的S3存储桶权限,我会从S3获得“拒绝访问”。如果我添加允许“Everyone”具有“上传/删除”权限,则文件上载成功。我担心的是,有人会将大文件上传到我的存储桶并导致安全问题。上面我需要的推荐配置是什么?我是S3和Cognito的新手。
我正在使用适用于iOS的Amazon AWS SDK,但我认为这个问题与平台无关。
编辑: 我的政策如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iam:GetUser",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": ["arn:aws:s3:::import-to-ec2-*", "arn:aws:s3:::<my bucket name>/*"]
}
]
}
答案 0 :(得分:4)
您不需要修改S3存储桶权限,而是需要修改与您的标识池关联的IAM角色。请尝试以下方法:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": ["arn:aws:s3:::MYBUCKET/*"]
}
]
}
MYBUCKET
替换为您的广告位名称您可能需要考虑进一步限制权限,包括${cognito-identity.amazonaws.com:sub}
对用户进行分区,但上述政策可以帮助您入门。
答案 1 :(得分:1)
正如@einarc所说(无法发表评论),为了使其有效,我必须编辑角色和Bucket Policy。这对于测试来说已经足够了:
Bucket Policy:
{
"Id": "Policy1500742753994",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1500742752148",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::admin1.user1",
"Principal": "*"
}
]
}
经过身份验证的角色政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
答案 2 :(得分:0)
截至2015年,上述答案尚未完成,您需要同时授权S3中的角色和存储桶政策,以授权该角色写入存储桶。在两种情况下都使用s3:PutObject。控制台有两个案例的向导