在AWS IAM中,显式拒绝(explicit deny)通常被用来覆盖其他权限策略或者明确禁止某些操作。默认情况下,如果用户拥有一个允许操作的权限策略,同时也有一个显式拒绝的权限策略,则该操作将被拒绝。因此,把异常加入到显式拒绝中是不可能的。
不过,如果您需要给某一个用户或组添加一个特定的权限,而该权限被显式拒绝,那么您可以使用IAM Policy的效应(Effect)属性。
例如,以下Policy可以允许用户myuser
访问S3中的所有Bucket,但是排除名为mybucket
的Bucket。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket"
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mybucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalArn": [
"arn:aws:iam::123456789012:user/myuser"
]
}
}
}
]
}
在此Policy中,第一个Statement是允许操作S3中的所有Bucket的权限,第二个Statement是拒绝操作特定Bucket的权限。第三个Statement则是有条件允许操作名为mybucket
的Bucket,但只有用户myuser
拥有该权限。这样,myuser
即使被显式拒绝