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

IAM JSON 정책 요소: Condition

Condition 요소(또는 Condition 블록)를 사용하여 정책의 효력이 발생하는 시점에 대한 조건을 지정할 수 있습니다. Condition 요소는 선택 사항입니다. Condition 요소에서 조건 연산자(같음, 보다 작음 등)를 사용하여 정책의 조건 키 및 값을 요청 컨텍스트의 키 및 값과 일치시키는 표현식을 작성합니다. 요청 컨텍스트에 대한 자세한 내용은 Request 단원을 참조하십시오.

"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(Multi-Factor Authentication) 디바이스를 제거할 수 있습니다.

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice", "iam:DeleteVirtualMFADevice" ], "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 요소에는 여러 조건을 추가할 수 있으며, 다시 한 번 각 조건마다 다수의 키-값 페어가 포함됩니다. 다음은 이것을 설명한 그림입니다.

자세한 내용은 섹션을 참조하세요다수의 키 또는 값을 사용하는 조건 생성