

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon EMR 中拒絕 ModifyInstanceGroup 動作
<a name="emr-cluster-deny-modifyinstancegroup"></a>

Amazon EMR 中的 [ModifyInstanceGroups](https://docs.aws.amazon.com/emr/latest/APIReference/API_ModifyInstanceGroups.html) 動作不需要您為此動作提供叢集 ID。相反，您只能指定執行個體群組 ID。因此，基於叢集 ID 或叢集標籤的此動作的看似簡單的拒絕政策可能不會達到預期效果。請考量下列範例政策。

------
#### [ JSON ]

****  

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

------

如果已附接此政策的使用者執行 `ModifyInstanceGroup` 動作，且僅指定執行個體群組 ID，則不會套用此政策。由於允許對所有其他資源執行此動作，因此此動作成功。

此問題的解決方法是將政策陳述式附接至使用 [NotResource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html) 元素的身分，以拒絕在沒有叢集 ID 的情況下發出的任何 `ModifyInstanceGroup` 動作。下列政策範例會新增此類拒絕陳述式，如此一來，除非指定叢集 ID，否則任何 `ModifyInstanceGroups` 請求都會失敗。由於身分必須透過動作指定叢集 ID，因此基於叢集 ID 的拒絕陳述式是有效的。

------
#### [ JSON ]

****  

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

------

當您想要根據與叢集標籤關聯的值拒絕 `ModifyInstanceGroups` 動作時，也會存在類似問題。解決方案是類似的。除了用於指定標籤值的拒絕陳述式之外，您還可以新增政策陳述式，即如果您指定的標籤不存在，則無論值為何，都會拒絕 `ModifyInstanceGroup` 動作。

下列範例示範一個政策，即在附接至身分時，此政策會拒絕該身分對任何標籤 `department` 設定為 `dev` 的叢集執行 `ModifyInstanceGroups` 動作。此陳述式僅在拒絕陳述式使用 `StringNotLike` 條件拒絕動作 (除非 `department` 標籤存在) 時才有效。

------
#### [ JSON ]

****  

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

------