Получение доступа Отказано при вызове операции PutObject с разрешением на уровне ведра

Я последовал примеру http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3, чтобы предоставить пользователю доступ только к одному ведру.

Затем я протестировал конфигурацию с помощью плагина W3 Total Cache Wordpress. Тест не удался.

Я также попытался воспроизвести проблему, используя

aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/

и с ошибкой

upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied

Почему я не могу загрузить в свое ведро?

Ответ 1

Чтобы ответить на мой собственный вопрос:

Пример политики предоставил доступ PutObject, но мне также пришлось предоставить доступ PutObjectAcl.

Я должен был изменить

"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"

из примера в:

"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"

Вы также должны убедиться, что ваш сегмент настроен для клиентов, чтобы установить общедоступный ACL, сняв эти два флажка:

enter image description here

Ответ 2

У меня была похожая проблема. Я не использовал ACL, поэтому мне не нужен s3:PutObjectAcl.

В моем случае я делал (в Serverless Framework YML):

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName"

Вместо:

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName/*"

Который добавляет /* к концу корзины ARN.

Надеюсь это поможет.

Ответ 3

В случае, если это поможет кому-то еще, в моем случае я использовал CMK (он работал нормально, используя ключ aws/s3 по умолчанию)

Мне пришлось перейти к определению ключа шифрования в IAM и добавить в список пользователей программного пользователя, вошедшего в boto3, который "может использовать этот ключ для шифрования и дешифрования данных из приложений и при использовании сервисов AWS, интегрированных с KMS".

Ответ 4

У меня было то же сообщение об ошибке, которое я сделал: Убедитесь, что вы используете правильный s3 uri, такой как: s3://my-bucket-name/

(Если my-bucket-name находится в корне вашего aws s3, очевидно)

Я настаиваю на этом, потому что при копировании вставки корзины s3 из браузера вы получаете что-то вроде https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview

Таким образом, я допустил ошибку, используя s3://buckets/my-bucket-name который вызывает:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Ответ 5

У меня была похожая проблема с загрузкой в корзину S3, защищенную шифрованием KWS. У меня есть минимальная политика, которая позволяет добавлять объекты под определенным ключом s3.

Мне нужно было добавить следующие разрешения KMS в мою политику, чтобы разрешить роли помещать объекты в корзину. (Может быть немного больше, чем строго требуется)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys",
                "kms:GenerateRandom",
                "kms:ListAliases",
                "s3:PutAccountPublicAccessBlock",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:ImportKeyMaterial",
                "kms:ListKeyPolicies",
                "kms:ListRetirableGrants",
                "kms:GetKeyPolicy",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ListResourceTags",
                "kms:ReEncryptFrom",
                "kms:ListGrants",
                "kms:GetParametersForImport",
                "kms:TagResource",
                "kms:Encrypt",
                "kms:GetKeyRotationStatus",
                "kms:GenerateDataKey",
                "kms:ReEncryptTo",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
            <The S3 actions>
            ],
            "Resource": [
                "arn:aws:s3:::<MY-BUCKET-NAME>",
                "arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
            ]
        }
    ]
}