Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 用于上传和查看图片的Amazon S3存储桶策略_Amazon Web Services_Amazon S3_Amazon Cognito - Fatal编程技术网

Amazon web services 用于上传和查看图片的Amazon S3存储桶策略

Amazon web services 用于上传和查看图片的Amazon S3存储桶策略,amazon-web-services,amazon-s3,amazon-cognito,Amazon Web Services,Amazon S3,Amazon Cognito,我有一个应用程序,用户可以通过facebook登录,然后将图像上传到s3 bucket并查看它们。我使用Cognito服务允许每个登录用户上传和查看所有文件 我不知道如何在s3 bucket上设置正确的权限。这是我的尝试,但get无法保存策略,get语句缺少必需元素-语句“NO_ID-0”缺少“Principal”元素 { "Version": "2012-10-17", "Id": "Policy1457546546214", "Statement": [

我有一个应用程序,用户可以通过facebook登录,然后将图像上传到s3 bucket并查看它们。我使用Cognito服务允许每个登录用户上传和查看所有文件

我不知道如何在s3 bucket上设置正确的权限。这是我的尝试,但get无法保存策略,get
语句缺少必需元素-语句“NO_ID-0”缺少“Principal”元素

{
    "Version": "2012-10-17",
    "Id": "Policy1457546546214",
    "Statement": [
        {
            "Sid": "Stmt1475657256771436",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket-name/*"
        },
        {
            "Sid": "Stmt16577654572138125",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "bucket-name/identity-pool-id*"
            ]
        }
    ]
}
这是客户端部分,如果有帮助:

FB.login(function (response) {
    if (response.authResponse) {

      AWS.config.region = 'eu-west-1';
      AWS.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: 'eu-west-1:xxxxxxxxxxx',
        Logins: {
          'graph.facebook.com': response.authResponse.accessToken
        }
      })

      var bucket = new AWS.S3({params: {Bucket: 'name'}})
      var fileChooser = document.getElementById('file-chooser')
      var button = document.getElementById('upload-button')

      button.addEventListener('click', function() {
        var file = fileChooser.files[0]
        var params = {Key: file.name, ContentType: file.type, Body: file}
        bucket.upload(params, function (err, data) {
        ...
Cognito
IAM>Roles>Cognito\u myappAuth\u Role

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cognito-identity:*"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::bucket/${cognito-identity.amazonaws.com:sub}/*",
                "arn:aws:s3:::bucket/${cognito-identity.amazonaws.com:sub}"
            ]
        }
    ]
}
你退房了吗?它提供了一个很好的示例,说明如何设置允许用户访问S3 bucket的角色。去掉列表bucket部分,您将链接到标识池角色的访问策略可能如下所示:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"] } ] } { “版本”:“2012-10-17”, “声明”:[ { “行动”:[ “s3:GetObject”, “s3:PutObject” ], “效果”:“允许”, “资源”:[“arn:aws:s3:::mybucket/${cognito identity.amazonaws.com:sub}/*”] } ] }
编辑:

Tl;未来读者的评论:

  • 将策略应用于池的身份验证角色,而不是bucket

  • 如果应用程序用例需要公共区域,请使用bucket根目录,否则请为策略中定义的每个标识使用一个目录(如博客中所述)

  • 角色本身直到身份验证发生后才应用。策略只定义返回的凭据将有权执行的操作以及访问的内容


这是一个bucket策略?我刚刚设置了一个S3 bucket,将博客中描述的访问策略附在我的身份池角色上,效果很好。你能详细说明什么不起作用吗?您看到的错误是否仍然与上面的错误相同?我添加了客户端部分。当我尝试上传时,我得到“拒绝访问”这是一个bucket策略?您是否尝试将其添加到身份池的身份验证角色中?否,添加到
IAM>Roles>Cognito\u myappAuth\u role
?什么政策?看起来你只想让他们在登录facebook后才能登录,所以我认为这是最好的选择。然后在该角色下,转到permissions,并为此角色创建一个内联策略,该策略为您提供所需的权限(可能只是复制/粘贴上面或博客上的内容)。这告诉Cognito用户有什么能力以及他们所获得的凭证有什么作用域。