IAM JSON 정책 요소: NotResource

IAM JSON 정책 요소: NotResource

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 리소스에만 영향을 줘요. Action 요소에 Amazon EC2 동작도 포함했다면 정책은 NotResource 요소에 지정되지 않은 EC2 리소스 접근도 거부했을 거예요. 서비스에서 어떤 동작이 리소스 ARN 지정을 허용하는지 알아보려면 AWS 서비스용 동작, 리소스, 조건 키를 참고하세요.

NotResource를 다른 요소와 함께 사용하기

"Effect": "Allow", "Action": "*", "NotResource": "arn:aws:s3:::HRBucket" 요소를 함께 사용해서는 안 돼요. 이 문은 매우 위험해요. HRBucket S3 버킷을 제외한 모든 리소스의 AWS의 모든 동작을 허용하기 때문이에요. 사용자가 스스로 HRBucket에 접근할 수 있게 하는 정책을 스스로 추가하는 것까지 허용해 버려요. 이렇게 하지 마세요.

같은 문이나 정책 안의 다른 문에서 NotResource 요소와 "Effect": "Allow"를 사용할 때는 주의하세요. NotResource는 명시적으로 나열되지 않은 모든 서비스와 리소스를 허용하므로, 의도한 것보다 더 많은 권한을 사용자에게 부여할 수 있어요. 같은 문에서 NotResource 요소와 "Effect": "Deny"를 사용하면 명시적으로 나열되지 않은 서비스와 리소스를 거부해요.

더 알아보기 (Learn more)