Это отнюдь не идеальное решение, и я не уверен, если это то, что вам нужно, но недавно я сделал что-то подобное, и это, как я ее решил:
У нас есть роль, которая имеет AmazonElasticMapReduceFullAccess
и политики Cloudformation для чтения (управляется амазоном) и еще одна настраиваемая политика с разрешением coloudformation:DeleteStack
(для удаления ресурсов кластера EMR).
Вы можете ограничить политику IAM на уровне ресурсов. Например, пользовательские политики для удаления стеков выглядят следующим образом:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:DeleteStack"
],
"Resource": "arn:aws:cloudformation:*:*:stack/EMRCluster*"
}
]
}
Как это работает в том, что, когда пользователь нуждается в кластере ОГО, они берут на себя роль и создать стек с именем EMRCluster<date>-<UUID>
и когда они сделаны они удалите ресурсы кластера, используя Cloudformation. Это, строго говоря, не обязательно необходимо, поскольку пользователь уже имеет полный доступ к EMR и может удалять ресурсы (не только его) с веб-консоли EMR или через API-интерфейс boto3 EMR ... Это просто упрощает и позволяет пользователю просто сделать один вызов Cloudformation вместо управления EMR напрямую. Может показаться немного забавным создание и удаление кластеров с облачной информацией вместо прямого, но гораздо проще управлять одним шаблоном JSON, чем ваша настраиваемая конфигурация ...
Если вам не нравится, что ваш пользователь должен иметь полное разрешение на полный доступ к EMR (довольно много), я предлагаю вам поиграть с политикой полного доступа EMR, чтобы позволить пользователю создавать только определенные ресурсы и ограничивать удаление ресурсов аналогичным образом. Может быть, вы можете дать пользователю только разрешение называть Cloudformation с определенным шаблоном вместо этого? Я не уверен, что это будет работать без других разрешений, хотя ...
Кроме того, вы можете установить VisibleToAllUsers=False
в свой шаблон (see the docs), так что только пользователь, создавший его, должен иметь возможность управлять кластером.