Dies ist keineswegs perfekte Lösung, und ich bin nicht sicher, ob das ist, was Sie brauchen, aber ich habe vor kurzem etwas ähnliches, und das ist, wie ich es gelöst:
Wir haben eine Rolle, die AmazonElasticMapReduceFullAccess
hat und Cloudformation schreibgeschützte Richtlinien (von Amazon verwaltet) und eine zusätzliche benutzerdefinierte Richtlinie mit coloudformation:DeleteStack
Erlaubnis (zum Löschen der EMR-Cluster-Ressourcen).
Sie können IAM-Richtlinien auf Ressourcenebene einschränken. Zum Beispiel sieht die benutzerdefinierte Richtlinie zum Löschen Stapel wie folgt aus:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:DeleteStack"
],
"Resource": "arn:aws:cloudformation:*:*:stack/EMRCluster*"
}
]
}
Die Funktionsweise das ist, wenn der Benutzer ein EMR-Cluster benötigt, sie die Rolle übernehmen, und erstellen Sie einen Stapel namens EMRCluster<date>-<UUID>
und wenn sie sie getan Entfernen Sie die Clusterressourcen mithilfe von Cloudformation. Dies ist streng genommen nicht wirklich notwendig, da der Benutzer bereits vollen Zugriff auf das EMR hat und die Ressourcen (nicht nur seins) von der EMR Webkonsole oder über die boto3 EMR API entfernen kann ... Es macht die Dinge einfacher und ermöglicht dem Benutzer um nur einen einzigen Anruf bei Cloudformation zu tätigen, anstatt EMR direkt zu verwalten. Es mag ein bisschen komisch aussehen, Cluster mit Cloudformation anstatt direkt zu erstellen und zu löschen, aber es ist viel einfacher, eine einzelne JSON-Vorlage als Ihre benutzerdefinierte Konfiguration zu verwalten ...
Wenn Sie nicht möchten, dass Ihr Benutzer sollte die gesamte EMR-Vollzugriffsberechtigung (ziemlich viel), schlage ich vor, dass Sie mit der EMR-Vollzugriffsrichtlinie herumspielen, um dem Benutzer zu erlauben, nur bestimmte Ressourcen zu erstellen und das Entfernen von Ressourcen in ähnlicher Weise einzuschränken. Vielleicht können Sie dem Benutzer nur die Erlaubnis erteilen, Cloudformation mit einer bestimmten Vorlage aufzurufen? Ich bin nicht sicher, ob das auch ohne andere Berechtigungen funktionieren würde ...
Zusätzlich können Sie in Ihrer Vorlage VisibleToAllUsers=False
festlegen (see the docs), so dass nur der Benutzer, der es erstellt hat, in der Lage sein sollte, den Cluster zu verwalten.