Доступ к AWS S3 запрещен при удалении

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

AccessDeniedException in NamespaceExceptionFactory.php line 91

Следуя очень простому примеру здесь, я придумал эту команду ...

$result = $s3->deleteObject(array(
                'Bucket' => $bucket,
                'Key'    => $keyname
            ));  

Я пробовал варианты этого, основанные на других уроках и вопросах, которые я нашел.

$result = $s3->deleteObject(array(
                'Bucket' => $bucket,
                'Key'    => $keyname,
                'Content-Type'  => $contentType,
                'Content-Length' => 0
            ));  

Но все выдает ту же ошибку. Какие-либо предложения?


person Joshua Foxworth    schedule 07.03.2017    source источник


Ответы (2)


Довольно распространено иметь разрешение на запись (пользователь, который просто записывает данные в S3) и отдельное разрешение на удаление с другим пользователем (во избежание случайного удаления).

Вы можете проверить, действительно ли у вас есть доступ к определенным действиям корзины, используя API-интерфейс iam get-role-policy, чтобы просмотреть разрешения, которые у вас есть для роли, которую вы используете, чтобы попытаться удалить. Вот пример:

$ aws iam get-role-policy --role-name <<your-role-name>> --policy-name <<your-policy-name>>

{
    "RoleName": "myrolename,
    "PolicyDocument": {
        "Version": "yyyy-mm-dd",
        "Statement": [
            {
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:DeleteObject",
                    "s3:Get*",
                    "s3:List*",
                    "s3:ListBucket",
                    "s3:PutObject*"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket1/*",
                    "arn:aws:s3:::bucket2/*"                ],
                "Effect": "Allow",
                "Sid": "yyyy"
            }
        ]
    },
    "PolicyName": "mypolicyname"
}

Скорее всего, в вашем случае у вас может не быть действия s3: DeleteObject для этого ресурса (сегмент / префикс)

person Ravi Ramanujam    schedule 08.03.2017
comment
Это устранило мою проблему. Спасибо! - person Kit Peters; 20.02.2020

Пользователь может иметь возможность создать объект в корзине, но это не обязательно означает, что тот же пользователь может удалить объект, который он / она, возможно, создал.

Разрешение S3 может быть детальным на уровне ресурса (сегмент / префикс), где действие, которое ваша роль может предпринять, может быть одним или несколькими разрешениями (см .: http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html)

Похоже, у вас есть разрешение s3: PutObject, но не s3: DeleteObject.

person Ravi Ramanujam    schedule 07.03.2017
comment
Как пользователь может иметь права на чтение / запись и не удалять? В описании, наведенном на эти разрешения, указано, что они включают удаление. - person Joshua Foxworth; 08.03.2017
comment
Довольно распространено иметь разрешение на запись (пользователь, который просто записывает данные в S3) и отдельное разрешение на удаление с другим пользователем (во избежание случайного удаления). - person Ravi Ramanujam; 08.03.2017
comment
для бессерверного проекта вы можете добавить s3: DeleteObject в provider: iamRoleStatements: параметр Action в файле serverless.yml - person lexa-b; 14.03.2018
comment
совершенно забыл, что я не добавил это в свою конфигурацию. Благодарность - person RicardoDuarte; 12.02.2019