По умолчанию S3 не разрешает публичный доступ к своему контенту по соображениям безопасности. Есть несколько способов изменить это, либо установив публичные разрешения для каждого отдельного объекта, либо применив политику сегментов.
https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html содержит дополнительные сведения о том, как контролировать доступ к S3.
Конкретный пример политики публичного сегмента может выглядеть следующим образом:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
Взято из: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-2
В целом, я бы порекомендовал предоставлять данные веб-сайта, например, через Cloudfront, и в этом случае вы можете специально разрешить Cloudfront доступ к данным S3 с помощью политики, такой как
{
"Version":"2012-10-17",
"Id":"PolicyForCloudFrontPrivateContent",
"Statement":[
{
"Sid":" Grant a CloudFront Origin Identity access to support private content",
"Effect":"Allow",
"Principal":{"CanonicalUser":"79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"},
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::example-bucket/*"
}
]
}
Взято из: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-6