Исправьте разрешения AWS Bucket и используйте их с PHP SDK3 - PullRequest
0 голосов
/ 08 ноября 2019

Как и требовались полномочия, я удалил публичный доступ из своего хранилища Amazon S3, и теперь ничто, кроме Cloudfront, не может "обычно" использовать эти объекты.

Это началось как тестирование Cloudfront,но после добавления функций S3 в код было обнаружено, что все эти части 'n' не работают должным образом. Мы гнались по ссылкам в документации AWS, но не можем найти четкого объяснения того, что отсутствует или неверно в коде.

Что отсутствует / неверно в настройках / коде ниже, что приводит к:

  • Учетные данные root с консоли AWS теперь ограничены;Мы можем видеть объекты, но ссылки не авторизованы, и загрузка не удалась.
  • Использование файла .aws/credentials с PHP SDK3 не может получить доступ к корзине для функций S3, таких как ListBuckets(), DoesObjectExist() и т. Д.

Разрешения на ведро

  • Блокировать весь публичный доступ
  • ACL: "Ваша учетная запись AWS": Да для объектов списка / записи. и чтение / запись
  • ACL: «Общий доступ»: группа «Все», Нет для всех объектов / разрешений

Политика сегментов:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity Exxxxxxxxxxxx4"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::scxxx-cdn/*"
        }
    ]
}

CORS:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>

Файл .aws/credentials

[default]
aws_access_key_id = AXXXXXXXXXXXXXXXXXXA
aws_secret_access_key = HxxxxxxxxxxxxD//rxxxxxxxxxxxxxxxxxxxxxfJ


[testing-only]
aws_access_key_id = AYYYYYYYYYYYYYYYYYYA
aws_secret_access_key = HyyyyyyyyyyyyD//ryyyyyyyyyyyyyyyyyyyyyfJ
role_arn = arn:aws:iam::149999999911:role/ScxxxDev

PHP SDK3 Code

use Aws\S3\S3Client;
use Aws\CloudFront\CloudFrontClient;
use Aws\Exception\AwsException;

$s3 = new S3Client([
    'profile'  => 'testing-only',
    'version'  => '2006-03-01',
    'region'   => 'us-west-2'
]);
$result = $s3->doesObjectExist($bucket, $object);

Результаты в исключении: source_profile не устанавливается с использованием только профильного тестирования

Никакого исключения не возникает, если вместо testing-only используется default,но этот профиль не имеет права на ведро. testing-only - это профиль, который я пытаюсь сделать, но source_profile нигде не был указан мной.

Я понимаю, что вопрос может быть "обширным" и основанным на количествечтения, необходимого только для формулировки вопроса, я предложу вознаграждение в 500, если кто-то может предоставить контрольный список / рецепт для правильной настройки корзины и разрешений для фундаментальной работы с S3, Cloudfront и PHP SDK3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...