IAM JSON 정책 요소: NotAction

IAM JSON 정책 요소: NotAction

NotAction은 지정된 동작 목록을 제외한 모든 것을 명시적으로 매칭하는 고급 정책 요소예요. "IAM만 빼고 다" 같은 표현이 필요할 때 정책을 짧게 만들어 주는 게 핵심이에요.

출처: 문서

본문

NotAction은 지정된 동작 목록을 제외한 모든 것을 명시적으로 매칭하는 고급 정책 요소예요. NotAction을 사용하면 매칭될 긴 동작 목록을 넣는 대신 매칭되지 않아야 할 몇 개의 동작만 나열해서 정책을 더 짧게 만들 수 있어요. NotAction에 지정된 동작은 정책 문의 Allow나 Deny 효과의 영향을 받지 않아요. 즉, 나열되지 않은 적용 가능한 모든 동작이나 서비스는 Allow 효과를 쓰면 허용되고, Deny 효과를 쓰면 거부돼요. NotAction을 Resource 요소와 함께 사용하면 정책에 범위(scope)를 부여해요. 이것이 AWS가 어떤 동작이나 서비스가 적용 가능한지 결정하는 방식이에요. 자세한 내용은 아래 예시 정책을 참고하세요.

NotAction with Allow

"Effect":"Allow"와 함께 문에서 NotAction 요소를 사용해 AWS 서비스의 NotAction에 지정된 동작을 제외한 모든 동작에 접근 권한을 부여할 수 있어요. Resource 요소와 함께 사용해 정책에 범위를 부여하고, 허용되는 동작을 지정된 리소스에 수행할 수 있는 동작으로 제한할 수 있어요.

다음 예시는 S3 리소스에 대해 버킷 삭제를 제외한 모든 Amazon S3 동작에 접근할 수 있게 해요. 이 정책은 다른 서비스의 동작은 허용하지 않아요. 다른 서비스 동작이 S3 리소스에는 적용되지 않기 때문이에요.

"Effect": "Allow",
"NotAction": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::*",

때로는 많은 수의 동작에 접근을 허용하고 싶을 수 있어요. NotAction 요소를 사용하면 문을 효과적으로 뒤집어서 더 짧은 동작 목록을 만들 수 있어요. 예를 들어 AWS에는 서비스가 너무 많으므로, IAM 동작 접근을 제외한 모든 동작을 사용자에게 허용하는 정책을 만들고 싶을 수 있어요.

다음 예시는 IAM을 제외한 모든 AWS 서비스의 모든 동작에 사용자가 접근할 수 있게 해요.

"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"

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

NotAction with Deny

"Effect":"Deny"와 함께 문에서 NotAction 요소를 사용해 NotAction 요소에 지정된 동작을 제외한 모든 나열된 리소스의 접근을 거부할 수 있어요. 이 조합은 나열된 항목을 허용하는 게 아니라 나열되지 않은 동작을 명시적으로 거부해요. 허용하고 싶은 동작은 여전히 허용해야 해요.

다음 조건부 예시는 사용자가 MFA로 로그인하지 않았다면 IAM이 아닌 동작에 대한 접근을 거부해요. 사용자가 MFA로 로그인했다면 Condition 테스트가 실패해서 마지막 Deny 문은 효과가 없어요. 다만 이 정책은 사용자에게 어떤 동작도 부여하지 않는 점에 주의하세요. IAM 동작을 제외한 다른 모든 동작을 명시적으로 거부할 뿐이에요.

{
    "Version":"2012-10-17",
    "Statement": [{
        "Sid": "DenyAllUsersNotUsingMFA",
        "Effect": "Deny",
        "NotAction": "iam:*",
        "Resource": "*",
        "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
    }]
}

특정 리전 밖의 동작 접근을 특정 서비스의 동작을 제외하고 거부하는 예시 정책은 AWS: 요청된 리전을 기준으로 AWS 접근 거부를 참고하세요.

더 알아보기 (Learn more)