上传 S3 对象时访问被拒绝

我正在关注从 S3 添加/列出对象的本教程。


起初,我因为Access Denied出错而无法列出对象,所以我发现我必须向由cognito创建的角色添加额外的权限s3:ListBucket和资源给 unauth 用户:arn:aws:s3:::my-bucket


{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Effect": "Allow",

            "Action": [

                "s3:PutObject",

                "s3:GetObject",

                "s3:ListBucket",

                "s3:DeleteObject"

            ],

            "Resource": [

                "arn:aws:s3:::my-bucket",

                "arn:aws:s3:::my-bucket/*"

            ]

        }

    ]

}

现在,当我尝试上传文件时,我得到了另一个Access Denied.


是我做错了什么还是本教程有很多错误?

额外检查:

  • 桶有 CORS

  • 创建后我没有更改存储桶的任何权限(一切默认)

  • 我正在使用正确的 Cognito 身份池 ID(我可以列出 albmus)

  • 我可以删除相册

  • 之后Access Denied的错误,我可以看到,有在cognito UNAUTH新的身份,所以脚本正常工作。

  • 存储桶的所有者(我)对存储桶具有读/写访问权限


慕码人8056858
浏览 336回答 2
2回答

斯蒂芬大帝

我不确定 cognito 在内部如何工作,它可能会使用 s3 对象的 ACL。因此,添加s3:PutObjectAcl和s3:GetObjectAcl操作访问可能会有所帮助。此外,如果您的代码正在向 S3 执行分段上传,则应考虑添加s3:ListBucketMultipartUploads操作访问权限。s3:PutObject操作已经添加了Initiate Multipart Upload、Upload Part、Complete Multipart Upload的权限。

精慕HU

使用策略添加 IAM 角色,这将使用户能够使用 API 或控制台上传任何文件。{    "Version": "2012-10-17",    "Id": "1",    "Statement": [        {            "Sid": "1",            "Effect": "Allow",            "Principal": {                "AWS": [                    "arn:aws:iam::777777:user/myuser"                 ]            },            "Action": [                "s3:ListBucket",                "s3:PutObject",                "s3:PutObjectAcl",                "s3:GetObject",                "s3:DeleteObject",                "s3:GetObjectAcl"            ],            "Resource": [                "arn:aws:s3:::bucketname/*",                "arn:aws:s3::: bucketname"            ]        }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript