AWS Identity and Access Management
用户指南

IAM JSON 策略元素:NotResource

NotResource 是高级策略元素,可明确匹配除指定资源以外的所有资源。使用 NotResource 时只列出不应匹配的一些资源,而不是包括将匹配的长资源列表,因此生成的策略较短。这对于在单个 AWS 服务中应用的策略特别有用。

例如,假设您有名为 HRPayroll 的组。不应允许 HRPayroll 的成员访问除 HRBucket 存储桶中的 Payroll 文件夹之外的任何 Amazon S3 资源。以下策略显式拒绝访问除所列资源外的所有 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 资源。此外,该策略不会拒绝访问无法在特定资源上执行的 S3 操作,如 s3:ListAllMyBuckets。要了解服务中的哪些操作允许指定资源的 ARN,请参阅AWS 服务的操作、资源和条件键

具有其他元素的 NotResource

您应从不"Effect": "Allow""Action": "*""NotResource": "arn:aws:s3:::HRBucket" 元素一起使用。此语句非常危险,因为它允许对在 HRBucket S3 存储桶之外的所有资源执行 AWS 中的所有操作。这甚至允许用户向自己添加策略,从而允许他们访问 HRBucket。请勿执行此操作。

在同一语句或一个策略内的不同语句中使用 NotResource 元素和 "Effect": "Allow" 时要谨慎。NotResource 允许未显式列出的所有服务和资源,并且可能导致向用户授予超出您意图的更多权限。在同一语句中使用 NotResource 元素和 "Effect": "Deny" 将拒绝未显式列出的服务和资源。