11

我在 Amazon Cognito 身份池下设置了一个未经身份验证的角色。我的目标是我的移动应用程序的来宾用户能够将调试日志(小文本文件)上传到我的 S3 存储桶,以便我可以解决问题。我注意到如果我不修改我的 S3 存储桶权限,我会从 S3 收到“拒绝访问”。如果我添加允许“所有人”拥有“上传/删除”权限,则文件上传成功。我担心有人可以将大文件上传到我的存储桶并导致安全问题。我上面需要的推荐配置是什么?我是 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>/*"]
    }
  ]
}
4

3 回答 3

6

您无需修改​​ S3 存储桶权限,只需修改与您的身份池关联的 IAM 角色。尝试以下操作:

  1. 访问IAM 控制台
  2. 查找与您的身份池关联的角色。
  3. 将类似于以下内容的策略附加到您的角色: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MYBUCKET/*"] } ] }
  4. 替换MYBUCKET为您的存储桶名称
  5. 使用 iOS SDK 和 Cognito 从您的应用程序中正常访问您的存储桶

您可能需要考虑进一步限制权限,包括${cognito-identity.amazonaws.com:sub}对用户进行分区,但上述策略将帮助您入门。

于 2014-10-29T17:06:26.640 回答
1

正如@einarc 所说(尚无法评论),为了使其正常工作,我必须编辑角色和存储桶策略。这对于测试来说已经足够好了:

桶策略:

{
  "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:::*"
            ]
        }
    ]
}
于 2017-07-22T17:21:24.903 回答
0

截至 2015 年,上面的答案不完整,您需要在 S3 中同时授权角色和存储桶策略以授权该角色写入存储桶。在这两种情况下都使用 s3:PutObject。控制台有两种情况的向导

于 2017-03-08T19:53:38.577 回答