Amazon s3 未经身份验证的Cognoto角色用户的Amazon S3 bucket权限

Amazon s3 未经身份验证的Cognoto角色用户的Amazon S3 bucket权限,amazon-s3,amazon-cognito,Amazon S3,Amazon Cognito,我在Amazon Cognito身份池下设置了一个未经验证的角色。我的目标是,我的移动应用程序的来宾用户能够将调试日志(小文本文件)上传到我的S3存储桶中,这样我就可以解决问题。我注意到,如果我不修改我的S3 bucket权限,我将从S3获得“拒绝访问”。如果我添加允许“每个人”拥有“上传/删除”权限,则文件上传成功。我担心的是,有人会将大文件上传到我的存储桶,从而导致安全问题。以上我需要的推荐配置是什么?我是S3和Cognito的新手 我正在使用AmazonAWSSDKforiOS,但我认为这

我在Amazon Cognito身份池下设置了一个未经验证的角色。我的目标是,我的移动应用程序的来宾用户能够将调试日志(小文本文件)上传到我的S3存储桶中,这样我就可以解决问题。我注意到,如果我不修改我的S3 bucket权限,我将从S3获得“拒绝访问”。如果我添加允许“每个人”拥有“上传/删除”权限,则文件上传成功。我担心的是,有人会将大文件上传到我的存储桶,从而导致安全问题。以上我需要的推荐配置是什么?我是S3和Cognito的新手

我正在使用AmazonAWSSDKforiOS,但我认为这个问题与平台无关

编辑: 我的政策如下:

    {
  "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>/*"]
    }
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“操作”:“iam:GetUser”,
“资源”:“*”
},
{
“效果”:“允许”,
“行动”:[
“s3:ListAllMyBucket”
],
“资源”:“*”
},
{
“效果”:“允许”,
“行动”:[
“s3:CreateBucket”,
“s3:DeleteBucket”,
“s3:DeleteObject”,
“s3:GetBucketLocation”,
“s3:GetObject”,
“s3:ListBucket”,
“s3:PutObject”
],
“资源”:[“arn:aws:s3:::导入到ec2-*”,“arn:aws:s3:::/*”]
}
]
}

您不需要修改S3 bucket权限,而是需要修改与您的身份池关联的IAM角色。请尝试以下操作:

  • 访问
  • 查找与您的标识池关联的角色
  • 将类似于以下内容的策略附加到您的角色:
    
    {
    “版本”:“2012-10-17”,
    “声明”:[
    {
    “效果”:“允许”,
    “操作”:[“s3:PutObject”],
    “资源”:[“arn:aws:s3:::MYBUCKET/*”]
    }
    ]
    }
    
  • MYBUCKET
    替换为您的bucket名称
  • 使用iosdk和Cognito从应用程序正常访问bucket

  • 您可能想考虑进一步限制权限,包括<代码> ${Cuiito Addio.AsMaNavaS.com:子} /Case>以分隔您的用户,但上面的策略将使您启动。

    < P>以上的答案是不完整的,如2015,您需要授权S3中的角色和桶策略来授权该角色写入桶。在这两种情况下都使用s3:PutObject。控制台为这两种情况都提供了向导

    ,正如@einarc所说的(目前还不能评论),为了使其工作,我必须编辑角色和Bucket策略。这对于测试来说已经足够好了:

    桶策略:

    {
      "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:::*"
                ]
            }
        ]
    }
    

    {“版本”:“2012-10-17”,“语句”:[{“效果”:“允许”,“操作”:“iam:GetUser”,“资源”:“},{“效果”:“允许”,“操作”:[“s3:ListallMyBucket”],“资源”:“},{“效果”:“允许”,“操作”:[“s3:CreateBucket”,“s3:DeleteBucket”、“s3:DeleteObject”、“s3:GetBucketLocation”、“s3:GetObject”、“s3:ListBucket”、“s3:PutObject”]、“Resource”:[“arn:aws:s3:::导入到ec2-”、“arn:aws:s3:::/”]}以上是我的策略,但文件上载仍然失败。如果您使用的是AWSCognitoCredentialsProvider,它会缓存使用的凭据。您可以强制刷新以确保您的凭据反映新策略。如果您仍然存在问题,请包括代码以及您收到的特定错误,以便我们能够更好地帮助诊断您可以强制刷新以确保您的凭据反映新策略。“-刷新位置/方式?@Jasper APK签名是我们正在评估的集成到服务中以更好地保护未经身份验证的身份的内容之一,但我无法承诺何时可用。截至2017年,我根本不必更改桶策略。通过IAM角色设置S3权限就足够了。@VolkerRose AWS在Verizon黑客攻击后更改了S3存储桶策略逻辑。您应该已经收到了关于此的通知。是的,你说得对。