IAM JSON ポリシー要素NotResource
NotResource
は、指定されたリソースを除くすべてのリソースを明示的に照合する高度なポリシー要素です。NotResource
を使うと、一致する予定のリソースのリストを含めるのではなく、一致する必要がないアクションがいくつかリストアップされ、リソースが短くなります。これは、単一の AWS のサービス内で適用されるポリシーで特に便利です。
たとえば、HRPayroll
という名前のグループがあるとしましょう。HRPayroll
のメンバーは、Payroll
バケット内の HRBucket
フォルダ以外のすべての 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 リソースへのアクセスを拒否しません。サービス内のどのアクションでリソースの ARN を指定できるかについては、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。
NotResource とその他の要素
"Effect": "Allow"
、"Action": "*"
、および "NotResource": "arn:aws:s3:::HRBucket"
要素を一緒に使用しないでください。このステートメントは、HRBucket
S3 バケットを除くすべてのリソースで AWS のすべてのアクションを許可するため、非常に危険です。これにより、ユーザーは自身に HRBucket
へのアクセスを許可するポリシーを追加することもできます。この操作はしないでください。
NotResource
要素と "Effect": "Allow"
をポリシー内の同じステートメントで使用したり、別のステートメントで使用したりすることに注意してください。NotResource
は、明示的に列挙されないすべてのサービスおよびリソースを許可するため、意図した以上のアクセス許可をユーザーに付与する結果になる場合があります。同じステートメントで NotResource
要素と "Effect": "Deny"
を使用すると、明示的にリストされていないサービスとリソースが拒否されます。