IAM JSON 정책 요소: Condition - AWS Identity and Access Management

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:encryption_context_key 및 여러 서비스에서 지원하는 ResourceTag/tag-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는 요청 정보를 요청 컨텍스트로 수집합니다. 이 정보는 요청을 평가하고 승인하는 데 사용됩니다. 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 요소에는 여러 조건 연산자를 추가할 수 있으며, 각 조건 연산자마다 다수의 컨텍스트 키-값 페어가 포함될 수 있습니다. 다음은 이것을 설명한 그림입니다.

자세한 내용은 다중 값 컨텍스트 키 섹션을 참조하세요.