【问题标题】:Amazon S3 bucket permission for unauthenticated cognito role user未经身份验证的认知角色用户的 Amazon S3 存储桶权限
【发布时间】:2014-12-24 14:53:33
【问题描述】:

我在 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>/*"]
    }
  ]
}

【问题讨论】:

    标签: amazon-s3 amazon-cognito


    【解决方案1】:

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

    1. 访问IAM console
    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} 来划分您的用户,但上述策略将帮助您入门。

    【讨论】:

    • { “版本”:“2012-10-17”,“声明”:[ { “效果”:“允许”,“操作”:“iam:GetUser”,“资源”:“ " }, { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "" }, { "Effect": "Allow", "Action “:[“s3:CreateBucket”,“s3:DeleteBucket”,“s3:DeleteObject”,“s3:GetBucketLocation”,“s3:GetObject”,“s3:ListBucket”,“s3:PutObject”],“资源”: ["arn:aws:s3:::import-to-ec2-", "arn:aws:s3:::/"] } ] }
    • 以上是我的策略,但文件上传仍然失败。
    • 如果您使用的是 AWSCognitoCredentialsProvider,它会缓存使用的凭证。您可以强制刷新以确保您的凭据反映新策略。如果您仍然遇到问题,请提供代码以及您收到的具体错误,以便我们更好地帮助诊断问题。
    • “您可以强制刷新以确保您的凭据反映新策略。” - 在哪里/如何刷新?
    • @Jasper APK 签名是我们正在评估集成到服务中以更好地保护未经身份验证的身份的事情之一,但我无法承诺何时可用。
    【解决方案2】:

    正如@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:::*"
                ]
            }
        ]
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 作为 2017 年的状态,我根本不需要更改存储桶策略。通过 IAM 角色设置 S3 权限就足够了。
      • @VolkerRose AWS 在 Verizon 黑客攻击后更改了他们的 S3 存储桶策略逻辑。您应该已经收到有关此的通知。是的,你是对的。
      猜你喜欢
      • 2018-08-17
      • 2010-12-21
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2019-10-13
      • 2014-11-08
      • 2019-08-18
      相关资源
      最近更新 更多