Я не работал в упомянутом вами семинаре, но после прочтения README модуля 2 я понял, что они реализуют Аутентификацию пользователей и регистрацию в пуле пользователей Amazon Cognito .
Перенаправлениес сайта, который недоступен, это нормально, вы не должны гарантировать, что он никогда не загружается.Позвольте мне объяснить, почему:
«Чувствительная» информация, отображаемая на сайте, является не статичной .Он загружается из бэкэнда REST в модуле 4. Поскольку аутентификация является статической с помощью JWT, данные никогда не загружаются из бэкэнда REST, если пользователь не аутентифицирован.
Итакчто должна делать страница /rides.html
?
- , если пользователь аутентифицирован (т.е. получил JWT, который является действительным), должен быть вызван сервер REST для получения данных
- , еслипользователь не аутентифицирован (т.е. JWT отсутствует) или JWT присутствует и больше не действителен, пользователь должен быть перенаправлен на страницу входа в систему;обратите внимание, что до перенаправления не было получено никаких разумных данных от сервера REST
РЕДАКТИРОВАТЬ:
Чтобы ограничить доступ к одному объекту в S3, выможет добавить политику сегмента, подобную следующей, в корзину s3:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::<your-bucket-name>/*"
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "<your-user-arn>"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::<your-bucket-name>/rides.html"
}
]
}
Это сделает все объекты общедоступными, кроме файла rides.html
.Если вы хотите получить к нему доступ, вам придется использовать подписанный URL.[1]
Обратите внимание, что нельзя использовать ACL-контейнер или объект, который предоставляет всем открытый доступ в сочетании с этим подходом, поскольку это может помешать тому, чтобы объект оставался закрытым.
Другой подход (для использованияфедеративный пользователь вместо обычного пользователя IAM)
Я не знаю, работает ли следующее из-за ограничений в документации [2], но вы можете попробовать.
Возможно,используйте поставщика федерации веб-удостоверений в атрибуте NotPrincipal : "Federated": "cognito-identity.amazonaws.com"
.Затем вы можете сузить, какой федеративный пользователь имеет доступ к объекту rides.html
с помощью условных ключей (например, cognito-identity.amazonaws.com: sub ).[3]
[1] https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html
[3] https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html