Правильный синтаксис для AWS S3 php-sdk "putObjectAcl" - PullRequest
0 голосов
/ 04 марта 2019

Мне было поручено выяснить, как работает AWS PHP SDK, чтобы мы могли использовать его для размещения данных изображений клиентов для нашего веб-сервера.Мне удалось успешно протестировать большинство функций создания, управления и загрузки данных в корзину, но когда я пытаюсь просмотреть содержимое, я получаю сообщение «Отказано в доступе».

Зайдя в консоль управления,Я выяснил, как установить разрешения, чтобы я мог просматривать файл, либо с определенным правилом хоста, либо установив как контейнер, так и объект, доступный для чтения.

Однако, как бы я ни старался следовать примерамВ документации PHP sdk [limited] я не могу установить значения ACL, используя php-код, предоставленный Amazon.

Их примеры просто перечислены вместо различных значений, и я попытался заполнить соответствующиеданные для моего ведра, объекта и учетной записи в тех, и это не работает.Я попытался сделать getObjectAcl и отослать что-то похожее на то, что было получено, и это не работает.Я попытался посмотреть примеры в Интернете, и то, что я нашел, не работает.

Вот пример последней, которую я пробовал:

$params = [
    'ACL' => 'public-read',
    'AccessControlPolicy' => [
        'Grants' => [
            [
                'Grantee' => [
                    'DisplayName' => 'Owner',
                    'ID' => $awsId,
                    'Type' => "CanonicalUser"
                ],
                'Permission' => "FULL_CONTROL"
            ],
            [
                'Grantee' => [
                    'DisplayName' => 'All Users',
                    'URI' => "http://acs.amazonaws.com/groups/global/AllUsers",
                    'Type' => "Group"
                ],
                'Permission' => "READ"
            ],
        ],
        'Owner' => [
            'ID' => $awsId
        ]
    ],
    'Bucket' => "our-test-bucket",
    'Key' => "800x600.jpg"
];

$result = $awsSdk->getS3Client()->putObjectAcl($params);

Полученный результат:

Неустранимая ошибка: необработанное исключение «Aws \ S3 \ Exception \ S3Exception» с сообщением «Ошибка при выполнении« PutObjectAcl »на» https://our -test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl ";Ошибка HTTP AWS: ошибка клиента: PUT https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl, приведший к /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php в строке 191

Aws \ S3 \ Exception \ S3Exception: Ошибка выполнения "PutObjectAcl "on" https://our -test-bucket.s3.us-east-2.amazonaws.com / 800x600.jpg? Acl";Ошибка HTTP AWS: ошибка клиента: PUT https://our-test-bucket.s3.us-east-2.amazonaws.com/800x600.jpg?acl привел к ответу 400 Bad Request: MalformedACLError Предоставленный вами XML-файл был не очень хорошо (усечен ...) MalformedACLError (клиент): Предоставленный вами XML-файл был неправильно сформированили не проверено на соответствие нашей опубликованной схеме - MalformedACLError Предоставленный вами XML не был правильно сформирован или не проверен на соответствие нашей опубликованной схемеB24661919936C2DADft / *********************************************** = в /project/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php в строке 191

1 Ответ

0 голосов
/ 06 марта 2019

Мне удалось добавить трассировку в html messageTrait с использованием функции Header (), чтобы я мог наблюдать исходящий xml в потоке php.Затем я сравнил результат с примерами xml, которые я нашел в разных местах в поиске Google, и методом проб и ошибок и сравнений. Я проследил проблему до 'DisplayName' => 'All Users' в группе Грант.Удалите эту строку, и она, похоже, будет работать.

$pubAcl = [
    'Owner' => [
        'ID' => $awsId,
        'DisplayName' => 'Owner'
    ],
    'Grants' => [
        [
            'Grantee' => [
                'ID' => $awsId,
                'DisplayName' => 'Owner',
                'Type' => "CanonicalUser"
            ],
            'Permission' => "FULL_CONTROL"
        ],
        [
            'Grantee' => [
                'URI' => "http://acs.amazonaws.com/groups/global/AllUsers",
                'Type' => "Group"
            ],
            'Permission' => "READ"
        ]
    ]
];

(Изменение порядка было результатом тестирования, но не оказалось проблемой)

...