У меня есть несколько доменов (например, 10 или 20), и я хотел бы перенаправить любых посетителей на где угодно на эти страницы на одну страницу в другом домене (например, моя страница профиля stackoverflow.com).
Сюда входит
http
(например, http://mydomain01.com
) https
(например, https://mydomain01.com
) http
(например, http://www.mydomain01.com
или http: //blog.mydomain01.com
) https
(например, https://www.mydomain01.com
или https://blog.mydomain01.com
]) http://mydomain01.com/some_path
или https://www.mydomain01.com/another/path.html
) плюс то же самое для всех других моих доменов ( mydomain02.com
, mydomain03.com
и т. д.; каждый с описанными выше вариантами использования).
http
, но не для https
. http
, так и https
. (Также говорится об использовании Application Load Balancer, но я полагаю, что это выходит за рамки здесь ...) Кроме того, очевидно, что существует множество SO-вопросов (см. Связанные справа от этого вопроса) и другие сообщения по этой теме; Проблема с большинством из них заключается в том, что они используют снимки экрана из предыдущих версий пользовательского интерфейса консоли AWS: большая часть содержимого должна оставаться прежней, но сопоставление этих снимков экрана с текущим пользовательским интерфейсом IMO добавляет еще один слой путаницы.
Установлена последняя версия интерфейса командной строки AWS, регион
и выход
настроены в ~ / .aws / config
, учетные данные настроить в ~ / .aws / credentials
(каждый для каждой учетной записи AWS); AWS _ *
переменные среды - это экспорт
изд.
Я использую регион AWS Восток США (Северная Вирджиния) (us-east-1)
для всего, чтобы предотвратить любые дополнительные проблемы, вызванные недоступностью ресурсов AWS в регионе.
$ aws --version
aws-cli/2.2.23 Python/3.9.6 Darwin/19.6.0 source/x86_64 prompt/off
Я опускаю любые приглашения оболочки или символы продолжения строки >
, чтобы упростить копирование из этого сообщения в оболочку.
Предупреждение: Это создает «общедоступную» корзину без каких-либо ограничений доступа.В этом случае это не должно иметь значения, поскольку нет содержимого корзины, которое нужно защищать, но такая общедоступная корзина в целом является плохой практикой. Кроме того, я использую публичную корзину, чтобы предотвратить любые дополнительные проблемы, вызванные ограничениями доступа: Во-первых, заставьте ее работать; во-вторых, сделайте его безопасным .
aws s3api create-bucket --bucket mydomain01.com
{
"Location": "/mydomain01.com"
}
put-bucket-website
docs aws s3api put-bucket-website --bucket mydomain01.com --website-configuration \
'{ "RedirectAllRequestsTo": { "HostName": "stackoverflow.com/users/217844/ssc" } }'
Использование любого имени корзины, кроме mydomain01.com
(для моего примера), кажется, не работает без указания причины. В документах AWS это не очень ясно - на самом деле, я все еще не уверен, что я что-то неправильно понимаю здесь, но, насколько я могу судить, официальная документация AWS на самом деле несколько небрежна по этому поводу - ИМО - важный ключевой момент : Например, # 2 просто говорит
- Создать корзину S3 с глобальным уникальным именем.
, которое может быть любым глобально уникальным именем. # 1 упоминает это каким-то образом - если вы знаете, как читать эти биты ...
Кстати, эта статья # 2 продолжает сбивать меня с толку с
Если вы не с использованием личного домена ...
Почему бы мне не использовать личный домен?!? Все дело в перенаправлении моего личного домена, не так ли?!? Ну, в любом случае ...
Ни консоль AWS, ни интерфейс командной строки AWS, похоже, не проверяют, был ли протокол ( http: //
или https: //
) введен в Имя хоста Поле пользовательского интерфейса / передается в строке JSON HostName
. Однако, если он добавлен, перенаправление не выполняется; см. тестовое перенаправление ниже.
После настройки перенаправления консоль AWS отображает интерактивную ссылку в своем пользовательском интерфейсе на URL-адрес корзины ( http://mydomain01.com.s3-website-us-east-1.amazonaws.com
) в самом низу корзины Свойства в разделе Статический хостинг веб-сайтов .
При нажатии на эту ссылку страница не открывается, по-видимому, потому, что Консоль AWS искажает URL-адрес и пытается открыть http: //https//stackoverflow.com/users/217844/ssc/
, нет имеет значение протокол.
HTTPie
в оболочке вместо curl
или wget
, потому что это то, что крутые ребята, похоже, используют в настоящее время http http://mydomain01.com.s3-website-us-east-1.amazonaws.com/
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Date: Mon, 02 Aug 2021 12:39:09 GMT
Location: http://stackoverflow.com/users/217844/ssc/
Server: AmazonS3
x-amz-id-2: rakAqUMnRraGvo/WkSa6AnbuhWn/9YZX/CAlI/OJQKYoWp/OdQIbyhsvHSwNved3suwMdgglqpE=
x-amz-request-id: C5BBG833Q9TQ9J6X
-> кажется, работает
Местоположение
url: http http://mydomain01.com.s3-website-us-east-1.amazonaws.com/
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Date: Mon, 02 Aug 2021 12:52:10 GMT
Location: http://https://stackoverflow.com/users/217844/ssc/
Server: AmazonS3
x-amz-id-2: Ee2/ob0faTpRdp6mGITdmClozXNmF1Q2oTbPioms8O91VA8n5VA3MoHhveeFz7v2VS65YKFKlDA=
x-amz-request-id: ZJP653R50YD5HSRS
ПРИМЕЧАНИЕ: у меня были эти вопросы, когда я только начинал писать это; Я думаю , что смог ответить на них сам с тех пор (см. test www
запись субдомена ниже). Кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь:
mydomain01.com
www.mydomain01.com
blog.mydomain01.com
? create-hosted-zone
docs ссылка на вызывающего абонента
должна быть просто уникальной строкой aws route53 create-hosted-zone --caller-reference "$(date '+%Y%m%d-%H%M%S')" --name mydomain01.com
{
"Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z123456789EXAMPLE0SKX",
"HostedZone": {
"Id": "/hostedzone/Z123456789EXAMPLE0SKX",
"Name": "mydomain01.com.",
"CallerReference": "20210802-150736",
"Config": {
"PrivateZone": false
},
"ResourceRecordSetCount": 2
},
"ChangeInfo": {
"Id": "/change/C1234567890SKXEXAMPLE",
"Status": "PENDING",
"SubmittedAt": "2021-08-02T13:07:37.860000+00:00"
},
"DelegationSet": {
"NameServers": [
"ns-1234.awsdns-12.com",
"ns-5678.awsdns-34.co.uk",
"ns-1234.awsdns-56.net",
"ns-5678.awsdns-78.org"
]
}
}
Z123456789EXAMPLE0SKX
, необходимо на следующих шагах change-resource- record-sets
docs http
, но не для https
change-batch.apex.json
с приведенным ниже содержимым HostedZoneId
и DNSName
с веб-сайта Amazon S3 конечные точки : сегмент был создан в Востоке США (Северная Вирджиния)
, поэтому используйте Z3AQBSTGFYJSTF
{
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "mydomain01.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z3AQBSTGFYJSTF",
"DNSName": "s3-website-us-east-1.amazonaws.com",
"EvaluateTargetHealth": false
}
}
}
]
}
s3-website-us-east -1.amazonaws.com
для DNSName
. Документы AWS говорят о example.com
или example.com.s3-website-us-east-1.amazonaws.com
и т. Д. случае, это не какой-то пример, который нужно заменить собственными значениями (например, mydomain01.com.s3-website-us-east-1.amazonaws.com
), а дословное значение из таблица , то есть s3-website-us-east-1.amazonaws.com
.
Как и в случае с ошибкой выше, и консоль AWS, и интерфейс командной строки AWS с радостью принимают протокол ( http: //
или https: //
), добавленный к значению, введенному в Имя хоста Поле пользовательского интерфейса / передается как DNSName
. По крайней мере, это выглядит очень неправильно в консоли, например http \ 072 \ 057 \ 057mydomain01.s3-website-us-east-1.amazonaws.com.
Обе ошибки несколько смягчаются в Консоли AWS, где значения можно выбирать из раскрывающегося списка при создании или редактировании записи; при использовании интерфейса командной строки AWS необходимо дважды проверять, что вы отправляете.
Те же проблемы и меры по снижению риска применяются к Имя записи Поле пользовательского интерфейса / Имя
значение JSON.
jq
для быстрой проверки, временный файл содержит действительный json jq . < change-batch.apex.json 1> /dev/null
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.apex.json"
{
"ChangeInfo": {
"Id": "/change/C1234567890EXAMPLESKX",
"Status": "PENDING",
"SubmittedAt": "2021-08-02T14:20:09.370000+00:00"
}
}
http
http http://mydomain01.com
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Date: Mon, 02 Aug 2021 15:06:08 GMT
Location: http://stackoverflow.com/users/217844/ssc/
Server: AmazonS3
x-amz-id-2: EfDtCxif2iV4eInskirSBAOjQS7o9arzJCeZjscF6mW7cwwmm9Nxb7QJT50x2kjdslX2fOxA+lk=
x-amz-request-id: WM7K9TDEF75A6P1V
-> выглядит хорошо
http
с путем http http://mydomain01.com/some/path
... similar output as above ...
https
http https://mydomain01.com
http: error: ConnectionError: HTTPSConnectionPool(host='mydomain01.com', port=443):
Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x101a48100>:
Failed to establish a new connection: [Errno 60] Operation timed out')) while doing a GET request to URL: https://mydomain01.com/
-> истекает время ожидания (через 60 с ?) - как и ожидалось: перенаправление с использованием сегмента S3 не работает с https
(см. выше)
AWS и Google очень быстро распространяют изменения в настройках DNS (в секундах или минутах), но могут быть задействованы и другие, «более медленные» серверы имен. Обходите их, как описано здесь , чтобы устранить этот источник путаницы. Этот подход работает только в macOS, но концепция одинакова для любой ОС.
При тестировании изменений DNS не в оболочке, а в браузере, браузер может получать результаты из своего кеша. Я выполняю большую часть своей работы с помощью Chrome, но использую Firefox (или Safari) для тестирования, поэтому я могу очищать весь кеш перед каждым тестом, чтобы устранить эту потенциальную проблему - без выхода из Google, AWS и т. Д.
www
Name
JSON value sed -e 's|mydomain01.com.|www.mydomain01.com.|g' change-batch.apex.json > change-batch.www.json
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.www.json
www
запись поддомена http
http http://www.mydomain01.com
HTTP/1.1 404 Not Found
Content-Length: 363
Content-Type: text/html; charset=utf-8
Date: Mon, 02 Aug 2021 15:28:05 GMT
Server: AmazonS3
x-amz-id-2: MGLcynq1iEGKh+pT6N6iRpCuQSN243q/5zm2Y7rXTnM7iW9nvDokF6s20xEUBr7QiEtBPEzZmII=
x-amz-request-id: TK83G35EMYFR8SKX
<html>
<head><title>404 Not Found</title></head>
<body>
<h1>404 Not Found</h1>
<ul>
<li>Code: NoSuchBucket</li>
<li>Message: The specified bucket does not exist</li>
<li>BucketName: www.mydomain01.com</li>
<li>RequestId: TK83G35EMYFR8SKX</li>
<li>HostId: MGLcynq1iEGKh+pT6N6iRpCuQSN243q/5zm2Y7rXTnM7iW9nvDokF6s20xEUBr7QiEtBPEzZmII=</li>
</ul>
<hr/>
</body>
</html>
запрос-сертификат
docs - альтернативные имена субъектов
; см. эту статью AWS (верхнее синее поле). *. Mydomain01.com
, чтобы оболочка не интерпретировала ответ *
aws acm request-certificate --domain-name mydomain01.com --validation-method DNS \
--subject-alternative-names '*.mydomain01.com'
{
"CertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab"
}
123456789012
- это идентификатор моей учетной записи AWS; все после сертификата /
- это просто UUID описать-сертификат
документы ResourceRecord.Name
и ResourceRecord.Value
, используя jq
mydomain01.com
- параметр запроса
с aws acm description-certificate
aws acm describe-certificate \
--certificate-arn "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab" \
> describe-certificate.json
jq -r '.Certificate.DomainValidationOptions[0].ResourceRecord.Name' describe-certificate.json
_1234567890abcdef1234567890abcdef.mydomain01.com.
jq -r '.Certificate.DomainValidationOptions[0].ResourceRecord.Value' describe-certificate.json
_1234567890abcdef1234567890abcdef.weirdchars.acm-validations.aws.
change-batch.cert.json
, см., например, создать запись для верхнего домена ; содержимое: {
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "_1234567890abcdef1234567890abcdef.mydomain01.com.",
"Type": "CNAME",
"TTL": 300,
"ResourceRecords": [
{
"Value": "_1234567890abcdef1234567890abcdef.weirdchars.acm-validations.aws."
}
]
}
}
]
}
aws route53 change-resource-record-sets --hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.cert.json
создать-распространение
документы CallerReference
должна быть просто уникальной строкой; использовать, например, date '+% Y% m% d-% H% M% S'
в оболочке для создания и копирования в файл; см. создайте размещенную зону create-distribution.json
для комплексных значений; содержимое ниже MinimumProtocolVersion
: получить значение из этой статьи AWS OriginProtocolPolicy
: использовать http-only
, потому что источник (корзина S3) может выполнять только ] http
ViewerProtocolPolicy
: использование redirect-to-https
, поскольку весь смысл создания этого распределения заключается в перенаправлении с http
на https
{
"CallerReference": "20210802-191725",
"Aliases": {
"Quantity": 2,
"Items": ["mydomain01.com", "*.mydomain01.com"]
},
"Origins": {
"Quantity": 1,
"Items": [
{
"Id": "mydomain01.com.s3.us-east-1.amazonaws.com_20210802-191725",
"DomainName": "mydomain01.com.s3.us-east-1.amazonaws.com",
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "http-only"
}
}
]
},
"OriginGroups": {
"Quantity": 0
},
"DefaultCacheBehavior": {
"TargetOriginId": "mydomain01.com.s3.us-east-1.amazonaws.com_20210802-191725",
"ForwardedValues": {
"QueryString": false,
"Cookies": {
"Forward": "none"
},
"Headers": {
"Quantity": 0
},
"QueryStringCacheKeys": {
"Quantity": 0
}
},
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"ViewerProtocolPolicy": "redirect-to-https",
"MinTTL": 0,
"AllowedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
]
}
},
"SmoothStreaming": false,
"DefaultTTL": 86400,
"MaxTTL": 31536000,
"Compress": false,
"LambdaFunctionAssociations": {
"Quantity": 0
},
"FieldLevelEncryptionId": ""
},
"CacheBehaviors": {
"Quantity": 0
},
"CustomErrorResponses": {
"Quantity": 0
},
"Comment": "",
"Logging": {
"Enabled": false,
"IncludeCookies": false,
"Bucket": "",
"Prefix": ""
},
"PriceClass": "PriceClass_All",
"Enabled": true,
"ViewerCertificate": {
"ACMCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-90ab-cdef-1234-1234567890ab",
"MinimumProtocolVersion": "TLSv1.2_2021",
"SSLSupportMethod": "sni-only"
},
"Restrictions": {
"GeoRestriction": {
"RestrictionType": "none",
"Quantity": 0
}
},
"WebACLId": "",
"HttpVersion": "http2",
"IsIPV6Enabled": true
}
- no-cli-pager
, чтобы отключить разбиение на страницы и сохранить ответ во временном локальном файле для проверки. aws --no-cli-pager cloudfront create-distribution \
--distribution-config "file://$(pwd)/create-distribution.json"
> create-distribution.response.json
В обзоре Распределения есть поле Последнее изменение , в котором указано Развертывание на некоторое время после каждого изменения; в зависимости от экрана и ширины окна браузера это поле может быть скрыто, поэтому пользовательский интерфейс может выглядеть так, как будто дистрибутив запущен и работает, хотя на самом деле это не так.
DomainName
из ответа jq -r '.Distribution.DomainName' create-distribution.response.json
abcdefghij1234.cloudfront.net
http
http http://abcdefghij1234.cloudfront.net
HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Content-Length: 183
Content-Type: text/html
Date: Mon, 02 Aug 2021 20:14:27 GMT
Location: https://abcdefghij1234.cloudfront.net/
Server: CloudFront
Via: 1.1 8640a37b586353bc916562c577770223.cloudfront.net (CloudFront)
X-Amz-Cf-Id: ooT0Y1QvDE7_yoRmb0p0Un2Db6O713rBvudtmz1xer7YwEU0GE8smw==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Redirect from cloudfront
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
Таким образом, дистрибутив перенаправляется с http://abcdefghij1234.cloudfront.net
на https://abcdefghij1234.cloudfront.net
- как надо; вот для чего он был создан.
https
HTTP/1.1 403 Forbidden
Connection: keep-alive
Content-Type: application/xml
Date: Mon, 02 Aug 2021 20:14:35 GMT
Server: AmazonS3
Transfer-Encoding: chunked
Via: 1.1 c3e656776c8a9f0e1ea24405ab1dcc85.cloudfront.net (CloudFront)
X-Amz-Cf-Id: or4SC8urWEv_8c3jDURv5IINwFU1TDVLSQ3_X7tya7Ncz8ujyz0-IQ==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Error from cloudfront
x-amz-bucket-region: us-east-1
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>EAST1CM5WJR8QM3S</RequestId>
<HostId>zF2dJm2vsuSM633NHuzcA5VqrCrNkfYGu31FRmKKIkebuI5+6l5DlVnr4kk9be262hcqktoiROw=</HostId>
</Error>
Это не очень хорошо. Не уверен, что этого следует ожидать?!?
change- batch.apex.updatejson
от sed
В более раннем файле change-batch.apex.json
UPSERT
вместо CREATE
: Запись уже существует и должна быть обновлена. HostedZoneId
: заменить старое значение Z3AQBSTGFYJSTF
(для S3) на Z2FDTNDATAQYW2
, некое магическое значение, взятое из change-resource-record-sets
DNSName
: цитата из change-resource-record-sets
docs Укажите имя домена, присвоенное CloudFront при создании вашего дистрибутива.
Ваш дистрибутив CloudFront должен включать альтернативное доменное имя, которое соответствует имени набора записей ресурсов. Например, если имя набора записей ресурсов - acme.example.com, ваш дистрибутив CloudFront должен включать acme.example.com в качестве одного из альтернативных доменных имен.
-> заменить s3-website-us-east-1.amazonaws.com
(для S3) на abcdefghij1234.cloudfront.net
:
sed -e 's|CREATE|UPSERT|g' \
-e 's|Z3AQBSTGFYJSTF|Z2FDTNDATAQYW2|g' \
-e 's|s3-website-us-east-1.amazonaws.com|abcdefghij1234.cloudfront.net|g' \
change-batch.apex.json > change-batch.apex.update.json
{
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "mydomain01.com.",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z2FDTNDATAQYW2",
"DNSName": "abcdefghij1234.cloudfront.net",
"EvaluateTargetHealth": false
}
}
}
]
}
aws route53 change-resource-record-sets \
--hosted-zone-id Z123456789EXAMPLE0SKX \
--change-batch "file://$(pwd)/change-batch.apex.update.json"
http
http http://mydomain01.com
HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Content-Length: 183
Content-Type: text/html
Date: Mon, 02 Aug 2021 19:08:27 GMT
Location: https://mydomain01.com/
Server: CloudFront
Via: 1.1 2408979685aa1bdb752824d292e63bf7.cloudfront.net (CloudFront)
X-Amz-Cf-Id: Ww60Ol_0fdR8SsgcHeRYUd_de1rVejX6w_wuK80aR21e3IHstB-irA==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Redirect from cloudfront
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>
http
с путем http http://mydomain01.com/some/path
... similar output as above ...
-> выглядит хорошо
https
http https://mydomain01.com
HTTP/1.1 403 Forbidden
Connection: keep-alive
Content-Type: application/xml
Date: Mon, 02 Aug 2021 18:53:51 GMT
Server: AmazonS3
Transfer-Encoding: chunked
Via: 1.1 ea89c67081222c8c680e7a37ad75f4f0.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 5prv5_g5zXOX3aRBp2Gq64JJPuwC2o5dHIp9RCAHm6Ls8hK6EFghXw==
X-Amz-Cf-Pop: HAM50-C2
X-Cache: Error from cloudfront
x-amz-bucket-region: us-east-1
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>T78ASF3FA9QGV4T5</RequestId>
<HostId>xaEgwEtbeesL4XfxMdxVoPAt9Lpb1ZDM9Fs5W4htBbcWNbV9sMUTjVAPIuWwAQ3Xh1yRhh4b4Ts=</HostId>
</Error>
ПРИМЕЧАНИЕ. Этот ответ поступает от AmazonS3
, а не от CloudFront
, как предыдущий. Корзина S3 не имеет каких-либо ограничений доступа - так как же может быть доступ запрещен ?!?
aws s3api get-bucket-policy --bucket mydomain01.com
An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket policy does not exist
Это соответствует пустому полю Bucket policy в Консоли AWS S3 - но действительно ли нормально, что политики корзины вообще нет?!?
Теперь вернемся к тестовый дистрибутив выше, я вижу, что ответ на доступ к abcdefghij1234.cloudfront.net
напрямую также поступает из S3, а не из CloudFront, поэтому проблема кажется довольно ясной:
*. Mydomain01.com
в качестве альтернативного домена к сертификату (и распределению) на самом деле не имеет никакого смысла, не так ли?!? Мне также понадобится один сертификат для каждого дистрибутива, выделенный для одного домена, верно? В целом вы на правильном пути. Всего один комментарий: Route53 можно не указывать, если ваш домен уже использует другого поставщика услуг DNS.
Вопрос. Применяется ли требование «имя корзины == имени домена», даже если я использую CloudFront?
Нет, если вы используете CloudFront. CNAME настраивается отдельно в CloudFront.
Вопрос. Нужно ли создавать по одной корзине для домена вершины и каждого субдомена?
Нет, вам не нужно по одному сегменту на домен/субдомен.
Почему сегмент S3 запрещает доступ?
Вы должны использовать свой домен s3-website-us-east-1.amazonaws.com
в качестве источника CF.
Нормально ли, что корзина S3 вообще не имеет политики доступа? Обычно у «общедоступных» корзин нет политики, которая явно разрешает доступ всем?
Если вы используете корзину только для перенаправления трафика, никакая политика доступа не подойдет.
Аналогично одной корзине S3 на апекс/субдомен, нужна ли мне одна база раздачи CloudFront на апекс/субдомен?
Да, вам нужен один дистрибутив CloudFront для каждого домена/субдомена, потому что к одному дистрибутиву можно прикрепить не более одного сертификата ACM.
Если да, то добавление
*.mydomain01.com
в качестве альтернативного домена к сертификату (и дистрибутиву) не имеет особого смысла, не так ли?!? Мне также понадобится один сертификат для каждого дистрибутива, предназначенный для одного домена, верно?
Добавление подстановочного домена имеет смысл, поскольку дистрибутив CF также должен обрабатывать трафик поддоменов.
Если у вас есть дополнительные вопросы, присоединяйтесь к чату AWS и @me в чате.