IAM JSON 策略元素:NotResource
NotResource
是高级策略元素,可明确匹配除指定资源以外的所有资源。使用 NotResource
时只列出不应匹配的一些资源,而不是包括将匹配的长资源列表,因此生成的策略较短。这对于在单个 AWS 服务中应用的策略特别有用。
例如,假设您有名为 HRPayroll
的组。不应允许 HRPayroll
的成员访问除 HRBucket
存储桶中的 Amazon S3 文件夹之外的任何 Payroll
资源。以下策略显式拒绝访问除所列资源外的所有 Amazon S3 资源。但请注意,该策略不向用户授予对任何资源的访问权限。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "s3:*", "NotResource": [ "arn:aws:s3:::HRBucket/
Payroll
", "arn:aws:s3:::HRBucket/Payroll
/*" ] } }
通常,为了显式拒绝对某一资源的访问,可以编写一条策略,其中使用 "Effect":"Deny"
,而且包含一个单独列出每个文件夹的 Resource
元素。不过,在此示例中,每当向 HRBucket
添加文件夹或向 Amazon S3 添加不应访问的资源时,都必须将其名称添加到 Resource
中的列表。如果改用 NotResource
元素,除非将文件夹名称添加到 NotResource
元素,否则会自动拒绝用户访问新文件夹。
使用 NotResource
时应注意,在此元素中指定的资源是不受限的唯一资源。反过来,这限制了将应用于该操作的所有资源。在上述示例中,该策略只影响 Amazon S3 操作,因此只影响 Amazon S3 资源。如果操作还包含 Amazon EC2 操作,则该策略不会拒绝访问任何 EC2 资源。要了解服务中的哪些操作允许指定资源的 ARN,请参阅 AWS 服务的操作、资源和条件键。
具有其他元素的 NotResource
您应从不将 "Effect": "Allow"
、"Action": "*"
和 "NotResource": "arn:aws:s3:::HRBucket"
元素一起使用。此语句非常危险,因为它允许对在 HRBucket
S3 存储桶之外的所有资源执行 AWS 中的所有操作。这甚至允许用户向自己添加策略,从而允许他们访问 HRBucket
。请勿执行此操作。
在同一语句或一个策略内的不同语句中使用 NotResource
元素和 "Effect": "Allow"
时要谨慎。NotResource
允许未显式列出的所有服务和资源,并且可能导致向用户授予超出您意图的更多权限。在同一语句中使用 NotResource
元素和 "Effect": "Deny"
将拒绝未显式列出的服务和资源。