#amazon-web-services #amazon-s3 #amazon-cloudfront
#amazon-веб-сервисы #amazon-s3 #amazon-cloudfront
Вопрос:
Я настроил следующую информацию:
- Создал корзину AWS S3 и загрузил несколько изображений в определенную папку
- Создан веб-дистрибутив AWS CloudFront:
- Исходное доменное имя: выбранное из списка сегмент S3
- Ограничить доступ к корзине: Да
- Идентификатор доступа к источнику: выбран существующий идентификатор
- Предоставить разрешения на чтение в корзине: Да, обновить политику корзины
AccessDenied
Отказано в доступе
Я получил подписанный URL-адрес из вышеупомянутого процесса, например
image.png?policy=xxxxx@signature=xxx@Key-Pair-Id=XXXXXXX
но я не смог получить доступ к URL-адресу
Пример JSON для политики облачного интерфейса
{
"Statement": [{
"Resource": "XXXXXXXXXX.cloudfront.net/standard/f7cecd92-5314-4263-9147-7cca3041e69d.png",
"Condition": {
"DateLessThan": {
"AWS:EpochTime": 1555021200
},
"IpAddress": {
"AWS:SourceIp": "0.0.0.0/0"
},
"DateGreaterThan": {
"AWS:EpochTime": 1554848400
}
}
}]
}
Добавлена политика корзины CloudFront
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXXX"
},
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucket_name/*"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXXX"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket_name"
}
]
}
Комментарии:
1. Вы проверили, правильно ли преобразован файл закрытого ключа для создания подписанного URL-адреса политики?
2. Пожалуйста, покажите полную ошибку.
3. @r123 проверит
4. Похоже, что эта ошибка может исходить от S3. проверьте свою политику корзины S3, чтобы убедиться, что нет никаких явных запретов, что была применена политика OAI, и при необходимости добавьте
listBucket
в arn корзины, напримерarn:aws:s3:::bucket_name
. Если у вас есть разрешение GetObject только для корзины и вы пытаетесь извлечь объект, который не существует, вы получите 403, но вы получите 404, если у вас есть разрешения ListBucket.5. @cementblocks В политике корзины имеет разрешение на доступ к ListBucket, GetObject и putObject
Ответ №1:
Похоже, что ошибка, с которой вы сталкиваетесь, не имеет ничего общего с упомянутыми вами шагами, исходная идентификация доступа позволяет CloudFront получать доступ к S3 с помощью специального пользователя, использующего sigv4, используя вышеуказанные шаги, вы увидите, что в политику корзины добавлено разрешение.
Если это ошибка из S3, вы увидите примерно 2 идентификатора запроса, идентификаторы хоста и запроса, а также сообщение об отказе в доступе.
image.png?policy=xxxxx@signature=xxx@Key-Pair-Id=XXXXXXX Если вы видите отказ в доступе, ошибка связана с подписанным URL-адресом CloudFront (ограниченный доступ к просмотрщику).
Чтобы узнать, что не так с созданным подписанным URL-адресом CloudFront, попробуйте в base64 расшифровать значение политики и посмотреть, правильный URL-адрес ресурса / срок действия и т.д. или нет.
Комментарии:
1. Да, я попытался расшифровать значение политики, чтобы указанная дата / время не истекли, и URL ресурса также правильный
2. хм, можно поделиться примером политики декодирования или заголовками ответов? Я предполагаю, что у вас также есть правильная пара ключей-id (CloudFront не общий ключ доступа AWS).
3. @dwayneJohn вы говорите, что URL-адрес ресурса правильный, но у нас нет способа подтвердить это, не увидев пример. Ресурс должен содержать полный URL-адрес, запрашиваемый браузером, включая схему и точное имя хоста. Также подписанный URL -адрес не должен содержать ,
@
как вы показали , разделительamp;
. Эти детали не являются тривиальными.4. Как сохранить закрытый ключ из хранилища параметров CloudFront?
5. Вам нужно загрузить закрытый ключ локально, чтобы использовать его в коде, кстати, URL-адрес ресурса, который вы упомянули, и URL-адрес, к которому вы обращаетесь, не совпадают или это просто пример? Поскольку вы получаете доступ к пользовательской политике с помощью CloudFront, попробуйте использовать подстановочный знак для устранения опечаток.