IAM JSON 정책 요소: Condition 연산자
IAM JSON 정책 요소: Condition 연산자
Condition 요소에서 조건 연산자를 사용해 정책의 조건 키·값을 요청 컨텍스트의 값과 매칭해요. 연산자를 카테고리(문자열·숫자·날짜·부울·바이너리·IP·ARN·존재 확인)별로 정리한 페이지예요.
출처: 문서
본문
Condition 요소에서 조건 연산자를 사용해 정책의 조건 키와 값을 요청 컨텍스트의 값과 매칭해요. Condition 요소에 대한 자세한 내용은 IAM JSON 정책 요소: Condition을 참고하세요.
정책에서 쓸 수 있는 조건 연산자는 선택한 조건 키에 따라 달라요. 전역 조건 키 또는 서비스별 조건 키를 선택할 수 있어요. 전역 조건 키에 사용할 수 있는 조건 연산자를 알아보려면 AWS 전역 조건 컨텍스트 키를, 서비스별 조건 키는 AWS 서비스용 동작, 리소스, 조건 키에서 보고 싶은 서비스를 선택하세요.
Important — 정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않고 조건은 false예요. 정책 조건이 키가 매칭되지 않아야 한다는 것(예:
StringNotLike나ArnNotLike)을 요구하는데 해당 키가 없다면 조건은 true예요. 이 논리는...IfExists와 Null 확인을 제외한 모든 조건 연산자에 적용돼요. 이 연산자들은 키가 요청 컨텍스트에 존재하는지(있는지)를 테스트해요.
조건 연산자는 다음 카테고리로 그룹화할 수 있어요.
- String — 문자열
- Numeric — 숫자
- Date and time — 날짜와 시간
- Boolean — 부울
- Binary — 바이너리
- IP address — IP 주소
- Amazon Resource Name (ARN) — 일부 서비스에서만 사용 가능
- ...IfExists — 다른 검사의 일부로 키 값이 존재하는지 확인
- Null check — 독립형 검사로 키 값이 존재하는지 확인
문자열 조건 연산자
문자열 조건 연산자로 키를 문자열 값과 비교해서 접근을 제한하는 Condition 요소를 만들 수 있어요.
- 정책 변수: 지원됨
- 와일드카드: 지원됨
| 조건 연산자 | 설명 |
|---|---|
| StringEquals | 정확한 매칭, 대소문자 구분 |
| StringNotEquals | 부정(negated) 매칭 |
| StringEqualsIgnoreCase | 정확한 매칭, 대소문자 무시 |
| StringNotEqualsIgnoreCase | 부정 매칭, 대소문자 무시 |
| StringLike | 대소문자 구분 매칭. 값은 문자열 어디에서든 다중 문자 매칭 와일드카드(*)와 단일 문자 매칭 와일드카드(?)를 포함할 수 있어요. 부분 문자열 매칭을 하려면 와일드카드를 지정해야 해요. (Note: 키가 여러 값을 포함하면 StringLike는 집합 연산자 ForAllValues:StringLike와 ForAnyValue:StringLike로 한정될 수 있어요. 자세한 내용은 다중 값 컨텍스트 키용 집합 연산자를 참고하세요.) |
| StringNotLike | 부정 대소문자 구분 매칭. 값은 문자열 어디에서든 다중 문자 매칭 와일드카드(*)나 단일 문자 매칭 와일드카드(?)를 포함할 수 있어요. |
문자열 조건 연산자 예시
다음 문은 aws:PrincipalTag 키를 사용하는 Condition 요소를 포함해서, 요청을 보내는 프린시펄이 iamuser-admin 직무 카테고리로 태그되어 있어야 한다고 지정해요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*AccessKey*",
"Resource": "arn:aws:iam::111122223333:user/*",
"Condition": {
"StringEquals": {
"aws:PrincipalTag/job-category": "iamuser-admin"
}
}
}
}
정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않아요. 이 예시에서 aws:PrincipalTag/job-category 키는 프린시펄이 태그가 연결된 IAM 사용자를 사용하고 있다면 요청 컨텍스트에 있어요. 태그나 세션 태그가 연결된 IAM 역할을 사용하는 프린시펄에게도 포함돼요. 태그가 없는 사용자가 액세스 키를 보거나 편집하려고 하면 조건이 false를 반환하고 이 문으로 요청이 암시적으로 거부돼요.
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"} |
aws:PrincipalTag/job-category: – iamuser-admin |
매칭 |
"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"} |
aws:PrincipalTag/job-category: – dev-ops |
매칭 안 됨 |
"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"} |
요청 컨텍스트에 aws:PrincipalTag/job-category 없음 |
매칭 안 됨 |
정책 변수를 사용하는 문자열 조건 연산자 예시
다음 예시는 StringLike 조건 연산자로 정책 변수와 문자열 매칭을 수행해서 IAM 사용자가 Amazon S3 콘솔에서 Amazon S3 버킷의 자신의 "홈 디렉터리"를 관리할 수 있게 하는 정책을 만들어요. 이 정책은 s3:prefix가 지정된 패턴 중 하나와 매칭되는 한 S3 버킷에서 지정된 동작을 허용해요.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"home/",
"home/${aws:username}/"
]
}
}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}",
"arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*"
]
}
]
}
OIDC 페더레이션을 위해 애플리케이션 ID와 사용자 ID를 기준으로 리소스 접근을 제한하는 Condition 요소 사용 예시는 Amazon S3: Amazon Cognito 사용자가 자신의 버킷의 객체에 접근 허용을 참고하세요.
다중 값 문자열 조건 연산자
요청의 키가 여러 값을 포함하면 문자열 연산자는 집합 연산자 ForAllValues와 ForAnyValue로 한정할 수 있어요. 여러 컨텍스트 키나 값의 평가 로직은 다중 값 컨텍스트 키용 집합 연산자를 참고하세요.
| 조건 연산자 | 설명 |
|---|---|
| ForAllValues:StringEquals, ForAllValues:StringEqualsIgnoreCase | 요청의 조건 키에 대한 모든 값이 정책의 값 중 하나 이상과 매칭해야 해요. |
| ForAnyValue:StringEquals, ForAnyValue:StringEqualsIgnoreCase | 요청의 조건 키 값 하나 이상이 정책의 값 중 하나와 매칭해야 해요. |
| ForAllValues:StringNotEquals, ForAllValues:StringNotEqualsIgnoreCase | 부정 매칭. 요청의 컨텍스트 키 값 중 어떤 것도 정책의 컨텍스트 키 값과 매칭할 수 없어요. |
| ForAnyValue:StringNotEquals, ForAnyValue:StringNotEqualsIgnoreCase | 부정 매칭. 요청의 컨텍스트 키 값 하나 이상이 정책의 컨텍스트 키 값과 매칭되지 않아야 해요. |
| ForAllValues:StringLike | 요청의 조건 키에 대한 모든 값이 정책의 값 중 하나 이상과 매칭해야 해요. |
| ForAnyValue:StringLike | 요청의 조건 키 값 하나 이상이 정책의 값 중 하나와 매칭해야 해요. |
| ForAllValues:StringNotLike | 부정 매칭. 요청의 컨텍스트 키 값 중 어떤 것도 정책의 컨텍스트 키 값과 매칭할 수 없어요. |
| ForAnyValue:StringNotLike | 부정 매칭. 요청의 컨텍스트 키 값 하나 이상이 정책의 컨텍스트 키 값과 매칭되지 않아야 해요. |
ForAnyValue를 문자열 조건 연산자와 함께 사용하는 예시
이 예시는 Amazon EC2 CreateTags 동작으로 인스턴스에 태그를 연결하는 것을 허용하는 ID 기반 정책을 만드는 방법을 보여 줘요. StringEqualsIgnoreCase를 사용하면 태그가 preprod나 storage 값의 environment 키를 포함할 때만 태그를 연결할 수 있어요. 연산자에 IgnoreCase를 붙이면 preprod, Preprod, PreProd 같은 기존 태그 값의 대소문자도 true로 해석할 수 있게 해요.
aws:TagKeys 조건 키와 함께 ForAnyValue 수정자를 추가하면 요청의 태그 키 값 하나 이상이 environment 값과 매칭해야 해요. ForAnyValue 비교는 대소문자를 구분해서 사용자가 environment 대신 Environment 같은 잘못된 대소문자로 태그 키를 쓰는 것을 막아요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringEqualsIgnoreCase": {
"aws:RequestTag/environment": [
"preprod",
"storage"
]
},
"ForAnyValue:StringEquals": {
"aws:TagKeys": "environment"
}
}
}
}
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
| 위 Condition | aws:TagKeys: – environment, aws:RequestTag/environment: – preprod |
매칭 |
| 위 Condition | aws:TagKeys: – environment, – costcenter, aws:RequestTag/environment: – PreProd |
매칭 |
| 위 Condition | aws:TagKeys: – Environment, aws:RequestTag/Environment: – preprod |
매칭 안 됨 |
| 위 Condition | aws:TagKeys: – costcenter, aws:RequestTag/environment: – preprod |
매칭 안 됨 |
| 위 Condition | aws:TagKeys: – environment, aws:RequestTag/environment: – storage |
매칭 |
| 위 Condition | aws:TagKeys: – environment |
매칭 안 됨 |
| 위 Condition | 요청 컨텍스트에 aws:TagKeys 없음 |
매칭 안 됨 |
| 위 Condition | 요청 컨텍스트에 aws:RequestTag/environment 없음 |
매칭 안 됨 |
| 위 Condition | 요청 컨텍스트에 aws:TagKeys 없음, aws:RequestTag/environment 없음 |
매칭 안 됨 |
와일드카드 매칭
문자열 조건 연산자는 미리 정의된 형식을 강제하지 않는 패턴 없는 매칭을 수행해요. ARN과 Date 조건 연산자는 조건 키 값에 구조를 강제하는 문자열 연산자의 하위 집합이에요.
비교하는 키의 값에 해당하는 조건 연산자를 사용할 것을 권장해요. 예를 들어 키를 문자열 값과 비교할 때는 문자열 조건 연산자를, 키를 ARN 값과 비교할 때는 Amazon 리소스 이름(ARN) 조건 연산자를 사용하면 돼요.
예시
이 예시는 조직 안의 리소스에 경계를 만드는 방법을 보여 줘요. 이 정책의 조건은 접근하는 리소스가 AWS Organizations의 특정 조직 단위(OU) 집합에 있지 않으면 Amazon S3 동작에 대한 접근을 거부해요. AWS Organizations 경로는 조직 엔티티의 구조를 텍스트로 표현한 것이에요.
이 조건은 aws:ResourceOrgPaths가 나열된 OU 경로 중 하나를 포함해야 한다고 요구해요. aws:ResourceOrgPaths는 다중 값 조건이므로 정책은 ForAllValues:StringNotLike 연산자를 사용해 aws:ResourceOrgPaths의 값을 정책의 OU 목록과 비교해요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "DenyS3AccessOutsideMyBoundary",
"Effect": "Deny",
"Action": [
"s3:*"
],
"Resource": "*",
"Condition": {
"ForAllValues:StringNotLike": {
"aws:ResourceOrgPaths": [
"o-acorg/r-acroot/ou-acroot-mediaou/",
"o-acorg/r-acroot/ou-acroot-sportsou/*"
]
}
}
}
]
}
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
| 위 Condition | aws:ResourceOrgPaths: – o-acorg/r-acroot/ou-acroot-sportsou/costcenter/ |
매칭 |
| 위 Condition | aws:ResourceOrgPaths: – o-acorg/r-acroot/ou-acroot-mediaou/costcenter/ |
매칭 안 됨 |
| 위 Condition | 요청에 aws:ResourceOrgPaths 없음 |
매칭 안 됨 |
숫자 조건 연산자
숫자 조건 연산자로 키를 정수 또는 소수 값과 비교해서 접근을 제한하는 Condition 요소를 만들 수 있어요.
- 정책 변수: 지원 안 됨
- 와일드카드: 지원 안 됨
| 조건 연산자 | 설명 |
|---|---|
| NumericEquals | 매칭 |
| NumericNotEquals | 부정 매칭 |
| NumericLessThan | "작음" 매칭 |
| NumericLessThanEquals | "작음 또는 같음" 매칭 |
| NumericGreaterThan | "큼" 매칭 |
| NumericGreaterThanEquals | "크거나 같음" 매칭 |
예를 들어 다음 문은 s3:max-keys 키와 함께 NumericLessThanEquals 조건 연산자를 사용해 요청자가 amzn-s3-demo-bucket에서 한 번에 최대 10개의 객체를 나열할 수 있다고 지정해요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
"Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}}
}
}
정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않아요. 이 예시에서 s3:max-keys 키는 ListBucket 동작을 수행할 때 항상 요청에 있어요. 이 정책이 모든 Amazon S3 동작을 허용했다면 max-keys 컨텍스트 키가 10보다 작거나 같은 값으로 포함된 동작만 허용됐을 거예요.
날짜 조건 연산자
날짜 조건 연산자로 키를 날짜/시간 값과 비교해서 접근을 제한하는 Condition 요소를 만들 수 있어요. 이 연산자는 aws:CurrentTime 키나 aws:EpochTime 키와 함께 사용해요. 날짜/시간 값은 ISO 8601 날짜 형식의 W3C 구현 중 하나 또는 epoch(UNIX) 시간으로 지정해야 해요.
- 정책 변수: 지원 안 됨
- 와일드카드: 지원 안 됨
| 조건 연산자 | 설명 |
|---|---|
| DateEquals | 특정 날짜 매칭 |
| DateNotEquals | 부정 매칭 |
| DateLessThan | 특정 날짜와 시간 이전 매칭 |
| DateLessThanEquals | 특정 날짜와 시간 이전 또는 그 시점 매칭 |
| DateGreaterThan | 특정 날짜와 시간 이후 매칭 |
| DateGreaterThanEquals | 특정 날짜와 시간 이후 또는 그 시점 매칭 |
예를 들어 다음 문은 aws:TokenIssueTime 키와 함께 DateGreaterThan 조건 연산자를 사용해요. 이 조건은 요청에 사용된 임시 보안 자격 증명이 2020년에 발급되었다고 지정해요. 이 정책은 계정 구성원이 새 자격 증명을 사용하도록 매일 프로그래밍 방식으로 업데이트할 수 있어요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*AccessKey*",
"Resource": "arn:aws:iam::111122223333:user/*",
"Condition": {
"DateGreaterThan": {
"aws:TokenIssueTime": "2020-01-01T00:00:01Z"
}
}
}
}
정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않아요. aws:TokenIssueTime 키는 프린시펄이 임시 자격 증명으로 요청할 때만 요청 컨텍스트에 있어요. 액세스 키로 보내는 AWS CLI, AWS API, AWS SDK 요청에는 키가 없어요. 이 예시에서 IAM 사용자가 액세스 키를 보거나 편집하려고 하면 요청이 거부돼요.
부울 조건 연산자
부울 조건으로 키를 true 또는 false와 비교해서 접근을 제한하는 Condition 요소를 만들 수 있어요.
키가 여러 값을 포함하면 부울 연산자는 집합 연산자 ForAllValues와 ForAnyValue로 한정할 수 있어요. 여러 컨텍스트 키나 값의 평가 로직은 다중 값 컨텍스트 키용 집합 연산자를 참고하세요.
- 정책 변수: 지원됨
- 와일드카드: 지원 안 됨
| 조건 연산자 | 설명 |
|---|---|
| Bool | 부울 매칭 |
| ForAllValues:Bool | Array of Bool 데이터 타입과 함께 사용. 컨텍스트 키 값의 모든 부울이 정책의 부울 값과 매칭해야 해요. ForAllValues 연산자가 누락된 컨텍스트 키나 빈 값의 컨텍스트 키를 Allowed로 평가하는 것을 막으려면 정책에 Null 조건 연산자를 포함할 수 있어요. |
| ForAnyValue:Bool | Array of Bool 데이터 타입과 함께 사용. 컨텍스트 키 값의 부울 중 하나 이상이 정책의 부울 값과 매칭해야 해요. |
부울 조건 연산자 예시
다음 ID 기반 정책은 Bool 조건 연산자를 aws:SecureTransport 키와 함께 사용해서, 요청이 SSL을 통하지 않으면 객체와 객체 태그를 대상 버킷 및 그 내용에 복제하는 것을 거부해요.
Important — 이 정책은 어떤 동작도 허용하지 않아요. 특정 동작을 허용하는 다른 정책과 함께 사용하세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "BooleanExample",
"Action": "s3:ReplicateObject",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::amzn-s3-demo-bucket",
"arn:aws:s3:::amzn-s3-demo-bucket/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
"Bool": {"aws:SecureTransport": "false"} |
aws:SecureTransport: – false |
매칭 |
"Bool": {"aws:SecureTransport": "false"} |
aws:SecureTransport: – true |
매칭 안 됨 |
"Bool": {"aws:SecureTransport": "false"} |
요청 컨텍스트에 aws:SecureTransport 없음 |
매칭 안 됨 |
바이너리 조건 연산자
BinaryEquals 조건 연산자로 바이너리 형식의 키 값을 테스트하는 Condition 요소를 만들 수 있어요. 지정된 키의 값을 정책의 바이너리 값의 base-64 인코딩 표현과 바이트 단위로 비교해요. 정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않아요.
- 정책 변수: 지원 안 됨
- 와일드카드: 지원 안 됨
"Condition" : {
"BinaryEquals": {
"key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="
}
}
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
"BinaryEquals": {"key": "QmluYXJ5VmFsdWVJbkJhc2U2NA=="} |
key: – QmluYXJ5VmFsdWVJbkJhc2U2NA== |
매칭 |
"BinaryEquals": {"key": "QmluYXJ5VmFsdWVJbkJhc2U2NA=="} |
key: – ASIAIOSFODNN7EXAMPLE |
매칭 안 됨 |
"BinaryEquals": {"key": "QmluYXJ5VmFsdWVJbkJhc2U2NA=="} |
요청 컨텍스트에 key 없음 | 매칭 안 됨 |
IP 주소 조건 연산자
IP 주소 조건 연산자로 키를 IPv4 또는 IPv6 주소 또는 IP 주소 범위와 비교해서 접근을 제한하는 Condition 요소를 만들 수 있어요. aws:SourceIp 키와 함께 사용해요. 값은 표준 CIDR 형식이어야 해요 (예: 203.0.113.0/24 또는 2001:DB8:1234:5678::/64). 연결된 라우팅 접두사 없이 IP 주소를 지정하면 IAM은 기본 접두사 값 /32를 사용해요.
일부 AWS 서비스는 0의 범위를 나타내는 ::를 사용해 IPv6를 지원해요. 서비스가 IPv6를 지원하는지 알아보려면 해당 서비스의 문서를 참고하세요.
- 정책 변수: 지원 안 됨
- 와일드카드: 지원 안 됨
| 조건 연산자 | 설명 |
|---|---|
| IpAddress | 지정된 IP 주소 또는 범위 |
| NotIpAddress | 지정된 IP 주소 또는 범위를 제외한 모든 IP 주소 |
IP 주소 조건 연산자 예시
다음 문은 aws:SourceIp 키와 함께 IpAddress 조건 연산자를 사용해 요청이 203.0.113.0에서 203.0.113.255 IP 범위에서 와야 한다고 지정해요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*AccessKey*",
"Resource": "arn:aws:iam::111122223333:user/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
}
}
aws:SourceIp 조건 키는 요청이 시작된 IP 주소로 해석돼요. 요청이 Amazon EC2 인스턴스에서 시작되면 aws:SourceIp는 인스턴스의 공용 IP 주소로 평가돼요.
정책 조건에 지정한 키가 요청 컨텍스트에 없으면 값이 매칭되지 않아요. aws:SourceIp 키는 요청자가 VPC 엔드포인트를 사용해 요청할 때를 제외하고 항상 요청 컨텍스트에 있어요. 이 경우 조건이 false를 반환하고 이 문으로 요청이 암시적으로 거부돼요.
| 정책 조건 | 요청 컨텍스트 | 결과 |
|---|---|---|
"IpAddress": {"aws:SourceIp": "203.0.113.0/24"} |
aws:SourceIp: – 203.0.113.1 |
매칭 |
"IpAddress": {"aws:SourceIp": "203.0.113.0/24"} |
aws:SourceIp: – 198.51.100.1 |
매칭 안 됨 |
다음 예시는 IPv4와 IPv6 주소를 섞어 조직의 모든 유효한 IP 주소를 다루는 방법을 보여 줘요. IPv6로 전환할 때 정책이 계속 동작하도록 기존 IPv4 범위에 더해 조직의 IPv6 주소 범위로 정책을 업데이트할 것을 권장해요.
ARN 조건 연산자
ARN 조건 연산자는 조건 키 값을 구조화된 형식으로 비교하도록 강제해요. 문자열 연산자의 하위 집합으로, 비교하는 값이 ARN이어야 해요. ArnEquals/ArnLike, ArnNotEquals/ArnNotLike와 이들의 ForAllValues/ForAnyValue 변형이 있어요. ARN 연산자를 사용할 때 값에 ?와 * 와일드카드를 쓸 수 있어요. ARN 조건 연산자는 ARN 형식으로만 작동해요.
예를 들어 aws:PrincipalArn 키와 ArnEquals를 사용해 요청한 특정 IAM 역할 ARN을 매칭할 수 있어요.
"Condition": {
"ArnEquals": {
"aws:PrincipalArn": "arn:aws:iam::111122223333:role/read-only-role"
}
}
...IfExists 조건 연산자
...IfExists 연산자 접미사는 다른 연산자의 동작을 수정해요. 키 값이 존재하는지 확인하는 검사(예: aws:PrincipalTag/...)에 유용해요. ...IfExists를 사용하면 키가 요청 컨텍스트에 있을 때만 조건이 키 값을 비교해요. 키가 없으면 자동으로 true로 간주돼요. 예를 들어 StringEqualsIfExists는 키가 존재할 때만 StringEquals 비교를 하고, 키가 없으면 조건이 참이 돼요. 다중 값 키의 경우 ...IfExists는 키가 요청 컨텍스트에 없을 때 평가를 건너뛰거나 기대한 대로 참으로 처리해요.
"Condition": {
"StringEqualsIfExists": {
"aws:PrincipalTag/job-category": "iamuser-admin"
}
}
Null 조건 연산자
Null 조건 연산자는 독립형 존재 확인이에요. Null 연산자로 조건 키가 요청 컨텍스트에 존재하는지(그리고 값이 null인지) 테스트할 수 있어요. 예를 들어 연결된 태그를 확인하거나 특정 키의 부재를 테스트할 수 있어요. "Null": {"aws:PrincipalTag/job-category": "true"}는 키가 없거나 값이 null이면 매칭되고, "false"로 설정하면 키가 존재하고 값이 null이 아닐 때 매칭돼요.
"Condition": {
"Null": {
"aws:PrincipalTag/job-category": "false"
}
}