拒绝 ModifyInstanceGroup 操作 - Amazon EMR

拒绝 ModifyInstanceGroup 操作

Amazon EMR 中的 ModifyInstanceGroups 操作不要求您在操作时提供集群 ID。相反,您只能指定实例组 ID。因此,基于集群 ID 或集群标签的简单拒绝策略可能不会产生预期效果。考虑以下示例策略。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Deny", "Resource": "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-12345ABCDEFG67" } ] }

如果附加了此策略的用户执行 ModifyInstanceGroup 操作并仅指定实例组 ID,则该策略不适用。由于允许在所有其它资源上执行该操作,因此操作成功。

此问题的解决方案是将策略声明附加到身份,该身份使用 NotResource 元素拒绝在没有集群 ID 的情况下发出的任何 ModifyInstanceGroup 操作。以下示例策略添加了这样的拒绝语句,因此除非指定了集群 ID,否则任何 ModifyInstanceGroups 请求都会失败。由于身份必须在操作中指定集群 ID,因此基于集群 ID 的拒绝语句是有效的。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Deny", "Resource": "arn:aws:elasticmapreduce:us-east-1:123456789012:cluster/j-12345ABCDEFG67" }, { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Deny", "NotResource": "arn:*:elasticmapreduce:*:*:cluster/*" } ] }

当您希望根据集群标签关联的值拒绝 ModifyInstanceGroups 操作时,也会出现类似问题。解决方案与之相似。除了添加指定标签值的拒绝语句之外,您还可以添加一个策略语句,在您指定的标签不存在时拒绝该 ModifyInstanceGroup 操作,无论值如何。

以下示例演示了一个策略,该策略在附加到身份时,会拒绝执行任何标签设置 department 设置为 dev 的集群上的任何 ModifyInstanceGroups 操作。这个语句之所以有效,是因为拒绝语句使用 StringNotLike 条件来拒绝操作,除非存在 department 标签。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Condition": { "StringEquals": { "aws:ResourceTag/department": "dev" } }, "Effect": "Deny", "Resource": "*" }, { "Action": [ "elasticmapreduce:ModifyInstanceGroups" ], "Condition": { "StringNotLike": { "aws:ResourceTag/department": "?*" } }, "Effect": "Deny", "Resource": "*" } ], }