本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon EMR 中拒絕 ModifyInstanceGroup 動作
Amazon EMR 中的 ModifyInstanceGroups 動作不需要您為此動作提供叢集 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 元素的身分,以拒絕在沒有叢集 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"
}
]
}