在亚马逊AWS中,我想给我的IAM注册(Windows)用户一个基于API的小程序,该程序将启动一个基于AMI的自定义实例,然后将她的机器连接到它.容易 - 但如果同一用户在第一个仍在运行时(从相同或另一台机器)尝试启动另一个实例,则第二次和后续尝试必须失败.AMI将在多个用户之间共享.该实例对用户来说是唯一的.
请注意,此问题与某些类似的问题不同,因为我需要按需启动实例,但不允许进一步的实例.目标是防止应用程序的使用超过许可.
理想情况下,检测和防止这种情况都会发生在AWS端,因为它更安全.
在客户端,我可以看到如何使用标记来执行此操作 - 使用用户名标记已启动的实例,并在允许实例启动之前搜索标记.
有没有办法在服务器端执行此操作,具有IAM策略条件或其他内容?
当然.这是一个简单的例子,我给了用户访问所有ec2动作的权限,除非那些我明确否认的,如果存在具有键"MyTag"和值"MyTagValue"的ResourceTag.
拒绝行动:
PurchaseReservedInstancesOffering
RequestSpotInstances
RunInstances
例:
{ "Statement": [ { "Action": [ "ec2:PurchaseReservedInstancesOffering", "ec2:RequestSpotInstances", "ec2:RunInstances" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringLike": { "ec2:ResourceTag/MyTag": "MyTagValue" } } }, { "Action": "ec2:*", "Effect": "Allow", "Resource": "*" } ] }
以下是IAM策略模拟器的结果证明:
当该标记不存在时,允许这些操作,是其他值,等等.
此外,ec2允许操作"Action": "ec2:*"
是为了举例...您可以删除整个块或将其用作模板以开始仅允许用户使用一组特定的EC2操作.