显式拒绝和隐式拒绝之间的区别
如果适用策略包含 Deny
语句,则请求会导致显式拒绝。如果应用于请求的策略包含一个 Allow
语句和一个 Deny
语句,Deny
语句优先于 Allow
语句。将显式拒绝请求。
当没有适用的 Deny
语句但也没有适用的 Allow
语句时,会发生隐式拒绝。由于原定设置下拒绝访问 IAM 主体,因此必须显式允许他们执行操作。否则,将隐式拒绝他们访问。
在设计授权战略时,您必须创建包含 Allow
语句的策略才能允许主体成功发出请求。但是,您可以选择显式拒绝和隐式拒绝的任意组合。
例如,您可以创建以下策略,其中包括允许的操作、隐式拒绝的操作和显式拒绝的操作。AllowGetList
语句允许对 IAM 操作的只读权限,这些操作以 Get
和 List
为前缀。IAM 中的所有其他操作,例如 iam:CreatePolicy
是隐式拒绝。DenyReports
语句通过拒绝对包含 Report
后缀(例如 iam:GetOrganizationsAccessReport
)的操作的访问权限,显式拒绝对 IAM 报告的访问权限。如果有人向此主体添加另一个策略以授予他们访问 IAM 报告的权限(例如 iam:GenerateCredentialReport
),由于这种明确拒绝,报告相关请求仍被拒绝。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetList", "Effect": "Allow", "Action": [ "iam:Get*", "iam:List*" ], "Resource": "*" }, { "Sid": "DenyReports", "Effect": "Deny", "Action": "iam:*Report", "Resource": "*" } ] }