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 연산자를 참고하세요.