IAM 정책 조건: 여러 컨텍스트 키 또는 값의 논리

IAM 정책 조건: 여러 컨텍스트 키 또는 값의 논리

요청을 평가할 때 Condition 블록에 여러 컨텍스트 키가 있거나, 하나의 키에 여러 값(다중 값 컨텍스트 키)이 있으면 조건이 어떻게 평가되는지 정리한 페이지예요. AND/OR 논리를 정확히 이해해야 의도한 대로 조건이 동작해요.

출처: 문서

본문

Condition 요소로 여러 컨텍스트 키나 값을 검사할 수 있어요. 이때 AWS는 다음 논리로 조건을 평가해요.

서로 다른 여러 컨텍스트 키: AND

Condition 블록에 서로 다른 컨텍스트 키가 여러 개 있으면, 모든 조건이 만족되어야(AND) 전체 조건이 참이 돼요. 예를 들어 다음 조건은 요청이 특정 IP 범위에서 와야 하고 동시에 사용자가 MFA로 로그인했어야 해요.

"Condition": {
    "IpAddress": {"aws:SourceIp": "203.0.113.0/24"},
    "Bool": {"aws:MultiFactorAuthPresent": "true"}
}

이 경우 두 키 모두 매칭되어야 조건이 true예요.

하나의 키에 여러 값: OR(기본 집합 연산자 없음)

정책의 조건 키 값이 여러 개이거나(배열), 요청의 키가 여러 값을 가질 때(다중 값 컨텍스트 키) 집합 연산자로 평가 방식을 정해요.

집합 연산자를 사용하지 않는 기본 동작은 OR이에요. 즉 요청의 값 중 하나라도 정책의 값과 매칭되면 조건이 참이 돼요. 예를 들어 다음 조건은 s3:prefix가 janedoe/* 또는 johndoe/* 중 하나와 매칭되면 참이에요.

"Condition": {
    "StringLike": {
        "s3:prefix": ["janedoe/*", "johndoe/*"]
    }
}

집합 연산자로 명시적 제어

다중 값 키를 다룰 때는 ForAllValues와 ForAnyValue 집합 연산자를 사용해 OR/AND 의미를 명시적으로 만들어요.

  • ForAllValues — 요청의 모든 값이 정책의 값 중 하나와 매칭되어야 해요 (AND 동작).
  • ForAnyValue — 요청의 값 중 하나 이상이 정책의 값과 매칭되어야 해요 (OR 동작).

예를 들어 다음은 요청의 모든 태그 키가 environment 또는 costcenter 중 하나여야 한다고 요구해요.

"Condition": {
    "ForAllValues:StringEquals": {
        "aws:TagKeys": ["environment", "costcenter"]
    }
}

누락된 키의 처리

조건 키가 요청 컨텍스트에 없으면 기본적으로 불일치로 간주돼요. 다만 ...IfExists나 Null 연산자로 "키가 없는 경우"를 명시적으로 제어할 수 있어요. ForAllValues 연산자는 키가 요청에 없을 때 참으로 평가될 수 있으므로, 빈 값 키가 참으로 평가되는 것을 막으려면 Null 확인을 함께 사용하세요.

자세한 내용과 예시는 다중 값 컨텍스트 키용 집합 연산자와 Condition 연산자를 참고하세요.

더 알아보기 (Learn more)