Как и требовались полномочия, я удалил публичный доступ из своего хранилища 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.