PutObject 操作:身份提供者拒绝访问

PutObject operation: Access Denied with identity provider

我在 AWS 中使用身份提供者,它能够向他管理的用户授予具有以下策略的角色。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GiveS3Access",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::mybucket"
        }
    ]
}

在我的计算机上使用有效的访问令牌,我可以列出 s3 存储桶中的对象(下面的示例),但我不能将任何对象推送到它上面。

❯ aws s3 ls s3://mybucket/
                           PRE test_folder/
                           PRE home/
2020-10-07 15:22:13      57385 Image001.png
2020-10-07 15:25:20      98942 Image002.png

❯ aws s3 cp test.mp4 s3://mybucket/test.mp4
upload failed: ./test.mp4 to s3://mybucket/test.mp4 An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

没有默认加密,也没有存储桶额外策略。配置文件 (~/.aws/config) 已正确配置为使用 GiveS3Access 策略(第一个代码块)询问角色。

arn:aws:s3:::mybucket形式的arn只针对bucket,不针对bucket的objects。要启用 download/upload 个对象,应该有:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GiveS3Access",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::mybucket",
                "arn:aws:s3:::mybucket/*"
            ]
        }
    ]
}

但是,这允许对您的存储桶和对象进行所有操作。请重新考虑将其更改为遵循 principles of least privileged.