Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon EMR 中拒绝该 ModifyInstanceGroup 操作
Amazon EMR 中的ModifyInstanceGroups操作不需要您在操作中提供集群 ID。相反,您只能指定实例组 ID。因此,基于集群 ID 或集群标签的简单拒绝策略可能不会产生预期效果。考虑以下示例策略。
- JSON
-
-
{
"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 的拒绝语句是有效的。
- JSON
-
-
{
"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
标签。
- JSON
-
-
{
"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": "*"
}
]
}