我想在IAM中创建一个用户,它基本上可以对该用户自己创建的资源执行任何操作(创建,修改,删除)。
这将包括创建其他角色和策略......但同样只包括那些允许控制父用户自己创建的资源的角色和策略。
目的是能够创建一个CloudFormation模板,该模板可以由非管理员用户运行,但仍然可以创建所需的所有资源(包括实例配置文件和lambda执行角色等)。然后,所有这些资源只能由拥有用户管理,从而允许自治和隔离。
我有一种感觉,这可以通过政策文件中的条件来完成,但不确定具体如何。
答案 0 :(得分:1)
这绝不是完美的解决方案,我不确定这是否是您需要的,但我最近做了类似的事情,这就是我解决它的方法:
我们的角色包含AmazonElasticMapReduceFullAccess
和Cloudformation只读政策(由亚马逊管理)以及一项具有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移除资源(不仅仅是他的)......它只是简化了操作并允许用户只需对Cloudformation进行一次调用,而不是直接管理EMR。使用Cloudformation而不是直接创建和删除集群可能看起来有点滑稽,但管理单个JSON模板要比自定义配置容易得多......
如果你不喜欢你的用户应该拥有整个EMR完全访问权限(非常多),我建议你使用EMR完全访问策略,以允许用户只创建某些资源并限制删除资源以类似的方式。也许你只能给用户一个用某个模板调用Cloudformation的权限而不是那个?我不确定这是否可以在没有其他权限的情况下工作......
此外,您可以在模板中设置VisibleToAllUsers=False
(see the docs),因此只有创建它的用户才能管理群集。