Моя настройка:
- изображения, хранящиеся в корзине S3
- корзина, связанная с CDN CloudFront с использованием пользовательского CNAME (то есть
cdn.mydomain.com
)
Мои намерения: рассмотрим объект, исходное местоположение которого mybucket.s3.amazonaws.com/object.jpg
, а местоположение CDN cdn.mydomain.com/object.jpg
.
Разрешить только тогда, когда
объект доступен из моего домена (mydomain.com
) с использованием исходного или CDN URL
объекта, доступ к которому осуществляется без заголовка (то есть ссылок, вставленных в браузер) с использованием только CDN URL
КомуДля этого я использую следующую политику:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement":
[
{
"Sid": "Allow access to objects when requested by CloudFront Distribution",
"Effect": "Allow",
"Principal":
{
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <my ID>"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<my bucket>/*"
},
{
"Sid": "Give access if referer is not set",
"Effect": "Allow",
"Principal": { "AWS": "*" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<my bucket>/*",
"Condition":
{
"StringNotLike":
{
"aws:Referer": "*"
}
}
},
{
"Sid": "Give access if referer is my site",
"Effect": "Allow",
"Principal": { "AWS": "*" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<my bucket>/*",
"Condition":
{
"StringLike":
{
"aws:Referer": ["https://www.example.com/*","https://example.com/*"]
}
}
}
]
}
С этим я сталкиваюсь с двумя проблемами:
- При применении этой политики многие изображения возвращают доступ«Запрещено», даже если он встроен в мой собственный веб-сайт.
- Исходный URL-адрес S3 (т. е.
mybucket.s3.amazonaws.com/object.jpg
) по-прежнему доступен, если не указан реферер.
Любая помощь будет принята с благодарностью.