Я пытаюсь настроить корзину AWS S3, в которой я хочу хранить загруженный пользователем мультимедийный контент.Приложение написано в Laravel 5.5.После загрузки контента этот контент должен доставляться только через AWS CDN / CloudFront.
Для вышеприведенного сценария я добавил эту политику S3, которая позволяет пользователю загружать контент через приложение Laravel (которое размещено на EC2), а затем получить доступэти данные через CDN.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ABC123456"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::s3bucket/*"
},
{
"Sid": "Stmt123456789",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::s3bucket",
"arn:aws:s3:::s3bucket/*"
],
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-id"
}
}
}
]
}
Однако у меня возникают следующие проблемы:
Если пользователь загружает контент, он будет загружен в корзину S3, но у него нет доступаиспользуя CDN URL или S3 URL.
Если я буду использовать php artinan tinker и выполнить Storage :: disk ('s3') -> put ('file.txt', 'Contents'); Файл будет создан на S3 и также может быть доступен по URL CDN.
Итак, мой вопрос: что я делаю не так в вышеуказанной политике?Кроме того, есть ли способ разрешить пользователю доступ к этому контенту только из мобильного приложения?