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