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 리소스에 대한 액세스를 거부하지 않습니다. 리소스의 ARN을 지정할 수 있는 서비스 작업에 대해 알아보려면 AWS 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하세요.
다른 요소가 있는 NotResource
"Effect": "Allow"
, "Action": "*"
및 "NotResource": "arn:aws:s3:::HRBucket"
요소를 함께 사용하면 안 됩니다. 이 문은 HRBucket
S3 버킷을 제외한 모든 리소스에 대해 AWS의 모든 작업을 허용하므로 매우 위험합니다. 이렇게 하면 HRBucket
에 액세스할 수 있는 정책을 사용자가 직접 추가할 수 있으므로 주의해야 합니다.
동일한 설명문에서 또는 동일한 정책의 다른 설명문에서 NotResource
요소와 "Effect": "Allow"
를 사용할 경우 주의하세요. NotResource
은 명시적으로 나열되지 않은 모든 서비스 및 작업을 허용하므로 사용자에게 의도한 것보다 많은 권한을 부여하는 결과를 가져올 수 있습니다. 동일한 설명문에서 NotResource
요소와 "Effect": "Deny"
를 사용하면 명시적으로 나열되지 않은 서비스 및 리소스를 거부합니다.