Я использую AWS CDK для настройки статического хостинга веб-сайтов S3 и CloudFront. Все работает хорошо, пока я не хочу перенаправить http [s] //: www.mydomain.com на https: //mydomain.com. Я не хочу делать репозитории S3 общедоступными, а просто предоставляю права доступа к корзине для CloudFront Origin Access Identity. Соответствующий фрагмент моего кода CDK выглядит следующим образом:
const wwwbucket = new s3.Bucket(this, "www." + domainName, {
websiteRedirect: {
hostName: domainName,
protocol: s3.RedirectProtocol.HTTPS },
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL
})
const oaiWWW = new cloudfront.OriginAccessIdentity(this, 'CloudFront-OriginAccessIdentity-WWW', {
comment: 'Allows CloudFront to access the bucket'
})
wwwbucket.grantRead(oaiWWW)
const cloudFrontRedirect = new cloudfront.CloudFrontWebDistribution(this, 'https://www.' + domainname + '.com redirect', {
aliasConfiguration: {
acmCertRef: certificateArn,
names: [ "www." + domainName ],
sslMethod: cloudfront.SSLMethod.SNI,
securityPolicy: cloudfront.SecurityPolicyProtocol.TLS_V1_1_2016,
},
defaultRootObject: "",
originConfigs: [
// {
// customOriginSource: {
// domainName: wwwbucket.bucketWebsiteDomainName
// },
// behaviors : [ {isDefaultBehavior: true}],
// },
{
s3OriginSource: {
s3BucketSource: wwwbucket,
originAccessIdentity: oaiWWW
},
behaviors : [ {isDefaultBehavior: true}],
}
]
});
К сожалению, в результате вместо перенаправления переход к www.mydomain.com
приводит к тому, что браузер показывает результат списка корзины S3 XML. Я могу исправить проблему вручную, используя консоль AWS для редактирования доменного имени источника CloudFront в настройках источника из:
bucketname.s3.eu-west-2.amazonaws.com
to:
bucketname.s3-website.eu-west-2.amazonaws.com
Дальше все работает как положено. Я попытался изменить свой сценарий CDK, чтобы использовать customOriginSource
, а не s3OriginSource
(закомментированный код выше), что приводит к правильному адресу в исходном доменном имени CloudFront, но тогда дистрибутив CloudFront не имеет идентификатора Origin Access и поэтому не может получить доступ ковш S3.
Кто-нибудь знает, как выполнить перенаправление без необходимости делать сегмент перенаправления общедоступным или редактировать имя домена источника вручную через консоль AWS?