Несколько политик для пользовательской политики CloudFront (подписанные файлы cookie)
Можно ли создать политику с несколькими операторами при использовании специальной политики CloudFront для подписанных файлов cookie (не подписанных URL-адресов)?
Я прочитал документацию , и хотя во всех примерах есть только один оператор, я не вижу явного правила относительно количества разрешенных инструкций.
Если не возможно иметь несколько инструкций политики, будет сложно дать определенному пользователю доступ к подписанному cookie, чтобы сказать, пять случайных файлов, использующих только безопасность CloudFront. Любые советы о том, как это сделать, будут оценены.
Этот вопрос перекрестно размещен здесь: https://forums.aws.amazon.com/thread.jspa?threadID=223440&tstart=0
Ответы
Ответ 1
FYI
Я столкнулся с той же проблемой и связался с официальной командой поддержки AWS.
Hello, thanks for offering us a great service.
I am an software engineer from Japan.
Can we have multiple custom policies, like below syntax?
{
"Statement": [
{ ... },
{ ... },
{ ... },
]
}
I have searched on the web, and found ones who are trying to
do the same thing and forums/Q&A as well.
However we found no answer from AWS official support teams
nor documents saying about that.
JSON syntax is array, so it seems to work with
multiple statements but do not work.
So, if it does not work, would you add a sentence
about that on the official document?
И вот, вчера я получил ответ:
I just heard back this morning.
You're correct, adding more than one statement
to a custom policy is not supported.
I'm updating the documentation now.
Итак, я думаю, что через несколько дней документация будет обновлена, и вы не сможете установить несколько инструкций политики для автоматической настройки CF для предварительно подготовленных файлов cookie.
Ответ 2
Я не могу дать определенную информацию по этому вопросу, это явный вопрос, который кто-то из Amazon может предоставить соответствующую информацию.
Тем не менее, я считаю, что политики CloudFront могут включать несколько операторов. Их схема похожа на политику IAM, но я не думаю, что она будет работать точно так, как вы ожидаете.
С политиками IAM вы можете присоединить несколько операторов к одной политике, но они OR'd через операторы:
Как правило, каждый оператор в политике содержит информацию об одном разрешении. Если ваша политика включает в себя несколько операторов, логическое ИЛИ применяется к операторам во время оценки. Аналогичным образом, если к запросу применяется несколько политик, логическое ИЛИ применяется во всех политиках во время оценки... Документация по политике IAM
В документации, к которой вы привязались, значение ключа Statement
представляет собой массив, в который вы можете включить несколько операторов, но они будут OR'd через них. Существует дополнительная информация о том, как оцениваются политики, что поможет ограничить доступ к файлам, над которыми вы работаете.
Предоставление доступа к пяти случайным файлам будет проблемой, которая, как мне кажется, не достижима с политиками доступа CloudFront. Доступные условия не предназначены для использования в этом случае.
Как Rodrigo M указал, что использование AWS API от script может выполнить то, что вы пытаетесь сделать. К сожалению, это единственный путь, который я могу себе представить, который выполнит то, что вы пытаетесь сделать.
Если вы найдете способ выполнить эту задачу, используя только политики CloudFront (без других сервисов AWS), я буду очень заинтересован в решении. Это будет творческая политика и весьма полезная.
Ответ 3
У меня есть аналогичное требование и протестировано AWS CloudFront с консервированной политикой включает несколько ресурсов для ограничения доступа к различным URL-адресам.
Политика - это действительный объект json, он выглядит следующим образом:
{
"Statement":[
{
"Resource":"https://qssnkgp0nnr9vo.cloudfront.net/foo/*",
"Condition":{
"DateLessThan":{
"AWS:EpochTime":1492666203
}
}
},
{
"Resource":"https://qssnkgp0nnr9vo.cloudfront.net/bar/*",
"Condition":{
"DateLessThan":{
"AWS:EpochTime":1492666203
}
}
}
]
}
После того, как я подписал политику и отправил запрос CloudFront, оказалось, что AWS CloudFront ее не поддерживает. Он получил ответ 403, заявив, что это была неверная политика.
HTTP/1.1 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?><Error><Code>MalformedPolicy</Code><Message>Malformed Policy</Message></Error>
Ответ 4
Это расстраивает, что в документах нет ничего, что говорит, что вы можете иметь только один элемент в массиве Statement
, но это AWS docs для ya!
В любом случае, способ ограничения этого ограничения состоит в том, чтобы установить несколько файлов cookie на разных уровнях пути. Вам нужно будет создать подписанный файл cookie для каждого выбранного пути и установить каждый файл cookie в любом приложении, которое вы используете. Вы можете представить конечную точку в своем api, которая генерирует все необходимые файлы cookie, задает их все в заголовке, а ваш передний конец устанавливает все эти файлы cookie.
Более конкретно, вы захотите создать один куки файл CloudFront-Key-Pair-Id
с идентификатором ключа облачного доступа и областью, в которой будет установлен файл cookie path
на самом высоком уровне, на котором установлены политики.
Используйте AWS CloudFront SDK для подписания файла cookie для каждого Resource
. Создайте пару файлов CloudFront-Policy
и CloudFront-Signature
для каждого пути, который соответствует пути Resource
.
Скажем, у меня есть следующие два Resource
и вы хотите предоставить им доступ к ним:
https://cfsub.cloudfront.net/animals/dogs/*
https://cfsub.cloudfront.net/animals/cats/*
Я бы создал:
- 1
CloudFront-Key-Pair-Id
cookie с контуром /animals
- 1
CloudFront-Policy
cookie с политикой base64, созданной при запуске пользовательской политики собак с помощью подписывающего лица облачного режима. Этот файл cookie должен иметь путь /animals/dogs
.
- 1
CloudFront-Policy
то же самое для кошек
- 1
CloudFront-Signature
cookie с сигнатурой, созданной при запуске пользовательской политики собак через подписывание облачного режима. Этот файл cookie должен иметь путь /animals/cats
- 1
CloudFront-Signature
то же самое для кошек
Все эти файлы cookie должны иметь домен, настроенный для вашего облачного домена cfsub.cloudfront.net
Отправляйте все это в свое веб-приложение или мобильное приложение.