IAM JSON 정책 요소: Condition
Condition
요소(또는 Condition
블록)를 사용하여 정책의 효력이 발생하는 시점에 대한 조건을 지정할 수 있습니다. Condition
요소는 옵션입니다. Condition
요소에서 조건 연산자(같음, 보다 작음 등)를 사용하여 정책의 컨텍스트 키 및 값을 요청 컨텍스트의 키 및 값과 일치시키는 표현식을 작성합니다. 요청 컨텍스트에 대한 자세한 내용은 요청 구성 요소 섹션을 참조하세요.
"Condition" : { "
{condition-operator}
" : { "{condition-key}
" : "{condition-value}
" }}
정책 조건에서 지정하는 컨텍스트 키는 전역 조건 컨텍스트 키 또는 서비스별 컨텍스트 키일 수 있습니다. 전역 조건 컨텍스트 키에는 aws:
접두사가 있습니다. 서비스별 컨텍스트 키에는 서비스 접두사가 있습니다. 예를 들어, Amazon EC2를 사용하면 ec2:InstanceType
컨텍스트 키를 사용하여 해당 서비스에 고유한 조건을 작성할 수 있습니다. iam:
접두사가 있는 서비스별 IAM 컨텍스트 키를 보려면 IAM 및 AWS STS 조건 컨텍스트 키 섹션을 참조하세요.
컨텍스트 키 이름은 대/소문자를 구분하지 않습니다. 예를 들어 aws:SourceIP
컨텍스트 키를 포함시키는 것은 AWS:SourceIp
에 대한 테스트와 동일합니다. 컨텍스트 키 값의 대/소문자 구분은 사용하는 조건 연산자에 따라 다릅니다. 예를 들어 다음 조건에는 johndoe
의 요청만 일치하도록 하는 StringEquals
연산자가 포함됩니다. 이름이 JohnDoe
인 사용자는 액세스가 거부됩니다.
"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}
다음 조건은 StringEqualsIgnoreCase 연산자를 사용하여 이름이 johndoe
또는 JohnDoe
인 사용자와 일치합니다.
"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}
일부 컨텍스트 키는 키 이름의 특정 부분을 지정하도록 허용하는 키 값 페어를 지원합니다. aws:RequestTag/tag-key 컨텍스트 키, AWS KMS kms:EncryptionContext:
및 여러 서비스에서 지원하는 ResourceTag/tag-key 컨텍스트 키가 그 예입니다.encryption_context_key
-
Amazon EC2와 같은 서비스에 대해
ResourceTag/
컨텍스트 키를 사용하는 경우tag-key
tag-key
에 대한 키 이름을 지정해야 합니다. -
키 이름은 대/소문자를 구분하지 않습니다. 따라서 정책의 조건 요소에서
"aws:ResourceTag/TagKey1": "Value1"
지정을 완료한 경우 조건은 이름이TagKey1
또는tagkey1
인 리소스 태그 키와 일치하지만 두 가지 모두와 일치하지는 않습니다. -
이러한 속성을 지원하는 AWS 서비스를 사용하면 대소문자만 다른 여러 키 이름을 생성할 수 있습니다. 예를 들어,
ec2=test1
와(과)EC2=test2
을(를) 사용해 Amazon EC2 인스턴스에 태그를 지정할 수 있습니다."aws:ResourceTag/EC2": "test1"
같은 조건을 사용하여 리소스에 대한 액세스를 허용하는 경우 키 이름은 두 태그 모두와 일치하지만, 하나의 값만 일치합니다. 이로 인해 예기치 않은 조건 실패가 발생할 수 있습니다.
중요
모범 사례로서 키 값 페어 속성 이름을 지정할 때 계정의 멤버가 일관적인 명명 규칙을 따르도록 해야 합니다. 예를 들어 태그 또는 AWS KMS 암호화 컨텍스트가 여기에 해당합니다. 태그 지정에 대해 aws:TagKeys 컨텍스트 키를 사용하거나 AWS KMS 암호화 컨텍스트에 대해 kms:EncryptionContextKeys
사용을 통해 이를 적용할 수 있습니다.
-
모든 조건 연산자의 목록과 각 연산자의 작동 방식에 대한 설명을 보려면 조건 연산자를 참조하세요.
-
달리 지정하지 않는 경우 모든 컨텍스트 키는 다수의 값을 가질 수 있습니다. 다수의 값을 가진 컨텍스트 키를 취급하는 방법에 대한 설명은 다중 값 컨텍스트 키 섹션을 참조하세요.
-
전역에서 사용 가능한 모든 컨텍스트 키의 목록은 AWS 글로벌 조건 컨텍스트 키 섹션을 참조하세요.
-
각 서비스에서 정의하는 조건 컨텍스트 키는 AWS 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하세요.
요청 컨텍스트
보안 주체가 AWS에 요청하면 AWS는 요청 정보를 요청 컨텍스트로 수집합니다. 이 정보는 요청을 평가하고 승인하는 데 사용됩니다. JSON 정책의 Condition
요소를 사용하여 요청 컨텍스트에 대해 특정 컨텍스트 키를 테스트할 수 있습니다. 예를 들어, 사용자가 특정 날짜 범위 중에만 작업을 수행할 수 있도록 aws:CurrentTime 컨텍스트 키를 사용하는 정책을 생성할 수 있습니다.
요청이 제출되면 AWS는 정책의 각 컨텍스트 키를 평가하여 true, false, not present, 때로는 null(빈 데이터 문자열) 값을 반환합니다. 요청에 없는 컨텍스트 키는 불일치로 간주됩니다. 예를 들어, 다음 정책에서는 지난 1시간(3,600초) 동안 다중 인증(MFA)을 사용하여 로그인한 경우에만 자체 MFA 디바이스를 제거할 수 있습니다.
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }
요청 컨텍스트는 다음 값을 반환할 수 있습니다.
-
True - 요청자가 지난 1시간 이내에 MFA를 사용하여 로그인한 경우 조건은 true를 반환합니다.
-
False - 요청자가 1시간 이전에 MFA를 사용하여 로그인한 경우 조건은 false를 반환합니다.
-
Not present - 요청자가 AWS CLI 또는 AWS API에서 IAM 사용자 액세스 키를 사용하여 요청한 경우 키가 존재하지 않습니다. 이 경우 키가 존재하지 않으므로 일치하지 않습니다.
-
Null - 요청에 태그를 전달하는 등 사용자가 정의한 컨텍스트 키의 경우 빈 문자열을 포함할 수 있습니다. 이 경우 요청 컨텍스트의 값은 null입니다. 경우에 따라 null 값이 true를 반환할 수 있습니다. 예를 들어,
aws:TagKeys
컨텍스트 키와 함께 다중 값ForAllValues
조건 연산자를 사용하는 경우 요청 컨텍스트가 null을 반환하면 예기치 않은 결과가 발생할 수 있습니다. 자세한 내용은 aws:TagKeys 및 다중 값 컨텍스트 키 섹션을 참조하세요.
조건 블록
다음은 Condition
요소의 기본 형식을 나타낸 예제입니다.
"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}
요청 값은 컨텍스트 키로 표현되며, 여기에서는 s3:prefix
가 요청 값에 해당합니다. 컨텍스트 키 값은 janedoe/*
와(과) 같이 리터럴 값으로 지정하는 값과 비교됩니다. 비교 유형은 조건 연산자에서 지정합니다(여기서는 StringLike
). equals, greater than 및 less than과 같은 일반적인 부울 비교를 사용하여 문자열, 날짜, 숫자 등을 비교하는 조건을 만들 수 있습니다. 문자열 연산자 또는 ARN 연산자를 사용하는 경우 컨텍스트 키 값에 정책 변수를 사용할 수도 있습니다. 다음 예에는 aws:username
변수가 포함되어 있습니다.
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
컨텍스트 키에 다수의 값을 추가할 수 있는 경우도 있습니다. 예를 들어 Amazon DynamoDB에 대한 요청에서는 다수의 테이블 속성 반환이나 업데이트를 요청할 수 있습니다. DynamoDB 테이블에 대한 액세스 정책에 따르면 dynamodb:Attributes
컨텍스트 키를 추가하여 요청 시 나열되는 모든 속성 저장이 가능합니다. Condition
요소의 설정 연산자를 사용하여 정책에 허용된 속성 목록과 요청에 포함된 속성 여러 가지를 비교함으로써 테스트할 수 있습니다. 자세한 내용은 다중 값 컨텍스트 키 단원을 참조하십시오.
요청 단계에서 정책을 평가할 때는 AWS가 키를 해당하는 요청 값으로 변환합니다. (이 예제에서는 AWS가 요청 날짜와 시간을 사용합니다). 조건 평가에 따라 true 또는 false가 반환되고, 이후 이 조건 평가 결과를 고려하여 정책 전반적인 요청 허용 또는 거부 여부를 결정합니다.
다수의 조건 값
Condition
요소에는 여러 조건 연산자를 추가할 수 있으며, 각 조건 연산자마다 다수의 컨텍스트 키-값 페어가 포함될 수 있습니다. 다음은 이것을 설명한 그림입니다.
자세한 내용은 다중 값 컨텍스트 키 단원을 참조하십시오.