は完璧なソリューションを意味し、それはあなたが必要なものである場合、私はわからないんだけど、私は最近、似た何かをした、これは私がそれに解決する方法です:
を我々はAmazonElasticMapReduceFullAccess
を持っている役割を持っています(amazonによって管理されている)および1つの追加のカスタムポリシー(coloudformation:DeleteStack
の権限(EMRクラスターリソースを削除するためのもの))を使用します。
リソースレベルでIAMポリシーを制限できます。たとえば、削除スタックのためのカスタムポリシーは次のようになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:DeleteStack"
],
"Resource": "arn:aws:cloudformation:*:*:stack/EMRCluster*"
}
]
}
それが動作する方法は、ユーザーがEMRクラスタを必要とするとき、彼らは役割を担うとEMRCluster<date>-<UUID>
という名前スタックを作成し、彼らは彼らをやっているときということですCloudformationを使用してクラスタリソースを削除します。これは厳密に言えば、ユーザーが既にEMRのフルアクセス権を持っており、EMRのWebコンソールまたはboto3 EMR APIからリソースを(自分だけでなく)削除することができるため、実際には必要ありません。 EMRを直接管理するのではなく、ただひとつのCloudformを呼び出すだけです。クラウドフォーメーションを使用してクラスターを直接作成するのではなく、作成して削除するのはちょっと面白いかもしれませんが、カスタム構成よりも単一のJSONテンプレートを管理する方がはるかに簡単です...
あなたは、全体のEMRフルアクセス許可(非常にたくさん)、私はあなたが特定のリソースだけを作成し、同様の方法でリソースを削除することを制限することができるようにするために、EMRのフルアクセスポリシーを使いこなすことをお勧めします。たぶんあなたは、その代わりに特定のテンプレートを使ってCloudFormを呼び出すための権限しかユーザに与えられないでしょうか?しかし、他の権限なしでも動作するかどうかはわかりません...
さらに、VisibleToAllUsers=False
をテンプレート(see the docs)に設定できるため、作成したユーザーだけがクラスタを管理できるはずです。