AWS 전역 조건 컨텍스트 키 - AWS Identity and Access Management

AWS 전역 조건 컨텍스트 키

보안 주체가 AWS에 요청하면 AWS는 요청 정보를 요청 컨텍스트로 수집합니다. JSON 정책의 Condition 요소를 사용하여 요청 컨텍스트의 키를 정책에서 지정한 키 값과 비교할 수 있습니다. 요청 컨텍스트에 전역 키가 포함되는 상황에 대한 자세한 내용은 각 전역 조건 키의 가용성 정보를 참조하십시오. JSON 정책의 Condition 요소 사용에 대한 자세한 방법은 IAM JSON 정책 요소: Condition 단원을 참조하십시오.

참고

일부 상황에서만 사용할 수 있는 조건 키를 사용하는 경우 조건 연산자의 IfExists 버전을 사용할 수 있습니다. 요청 컨텍스트에 조건 키가 누락된 경우 정책이 평가에 실패할 수 있습니다. 예를 들어, 특정 IP 범위 또는 특정 VPC로부터 요청이 오는 경우 ...IfExists 연산자와 함께 다음 조건 블록을 사용하여 일치시킵니다. 요청 컨텍스트에 두 키 중 하나 또는 둘 다 포함되어 있지 않은 경우에도 조건은 여전히 true를 반환합니다. 값은 지정된 키가 요청 컨텍스트에 포함된 경우에만 검사됩니다.

"Condition": { "IpAddressIfExists": {"aws:SourceIp" : ["xxx"] }, "StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]} }

전역 조건 키는 aws: 접두사가 있는 조건 키입니다. AWS 서비스는 전역 조건 키를 지원하거나 서비스 접두사를 포함하는 서비스별 키를 제공할 수 있습니다. 예를 들어, IAM 조건 키에는 iam: 접두사가 포함됩니다. 자세한 내용은 AWS 서비스에 사용되는 작업, 리소스 및 조건 키 단원을 참조하고 키를 보려는 서비스를 선택하십시오.

aws:CalledVia

문자열 연산자를 사용합니다.

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청한 서비스와 비교합니다. 보안 주체가 AWS 서비스에 요청을 하면 해당 서비스는 보안 주체의 자격 증명을 사용하여 다른 서비스에 대한 후속 요청을 수행할 수 있습니다. aws:CalledVia 키에는 보안 주체를 대신하여 요청을 수행한 체인의 각 서비스 목록이 정렬되어 있습니다.

예를 들어 AWS CloudFormation를 사용하여 Amazon DynamoDB 테이블에서 읽기 및 쓰기를 수행할 수 있습니다. 이제 DynamoDB에서 AWS Key Management Service(AWS KMS)에서 제공하는 암호화를 사용합니다.

  • 가용성 – 이 키는 aws:CalledVia을 지원하는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 요청을 수행할 때 요청에 표시됩니다. 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 나타나지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.

정책에서 aws:CalledVia 조건 키를 사용하려면 AWS 서비스 요청을 허용 또는 거부할 서비스 보안 주체를 제공해야 합니다. AWS에서는 aws:CalledVia와 함께 다음 서비스를 사용할 수 있도록 지원합니다.

CalledVia 서비스
AWS 서비스 서비스 보안 주체
Amazon Athena athena.amazonaws.com
AWS CloudFormation cloudformation.amazonaws.com
Amazon DynamoDB dynamodb.amazonaws.com
AWS Key Management Service (AWS KMS) kms.amazonaws.com

어떤 서비스든 보안 주체의 자격 증명을 사용하여 요청을 할 때 액세스를 허용 또는 거부하려면 aws:ViaAWSService 조건 키를 사용합니다. 이 조건 키는 모든 AWS 서비스를 지원합니다.

aws:CalledVia 키는 다중값 키입니다. 그러나 조건에서 이 키를 사용하여 주문을 수행할 수는 없습니다. 위의 예제를 사용하여 사용자 1이 DynamoDB를 호출하도록 AWS CloudFormation에 요청하면 AWS KMS이 호출됩니다. 이들은 세 가지의 별도 요청입니다. AWS KMS에 대한 마지막 호출은 사용자 1에 의해 AWS CloudFormation 및 DynamoDB를 통해 수행됩니다.


        aws:CalledVia를 사용한 예

이 경우 요청 컨텍스트의 aws:CalledVia 키에는 cloudformation.amazonaws.comdynamodb.amazonaws.com이 순서대로 포함되어 있습니다. 요청 체인의 어딘가에서 DynamoDB를 통해 통화가 이루어졌다는 것만 유념한다면 정책에서 이 조건 키를 사용할 수 있습니다.

예를 들어 다음 정책에서는 my-example-key이라는 AWS KMS 키를 관리할 수 있도록 허용하지만, DynamoDB가 요청 서비스 중 하나인 경우에만 한합니다. ForAnyValue:StringEquals 조건 연산자는 DynamoDB가 호출 서비스 중 하나인지 확인합니다. 보안 주체가 AWS KMS에 직접 호출을 하는 경우에는 조건이 false을 반환하고 이 요청이 이 정책에서 허용되지 않습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "KmsActionsIfCalledViaDynamodb", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:region:111122223333:key/my-example-key", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": ["dynamodb.amazonaws.com"] } } } ] }

체인에서 첫 번째 또는 마지막 호출을 하는 서비스를 적용하려는 경우에는 aws:CalledViaFirstaws:CalledViaLast 키를 사용할 수 있습니다. 예를 들어 다음 정책은 AWS KMS에서 my-example-key이라는 키를 관리할 수 있도록 허용합니다. 이러한 AWS KMS 작업은 체인에 여러 요청이 포함된 경우에만 허용됩니다. 첫 번째 요청은 AWS CloudFormation을 통해, 그리고 마지막으로 DynamoDB을 통해 수행되어야 합니다. 다른 서비스가 체인 중간에 요청을 해도 작업은 계속 허용됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "KmsActionsIfCalledViaChain", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:DescribeKey" ], "Resource": "arn:aws:kms:region:111122223333:key/my-example-key", "Condition": { "StringEquals": { "aws:CalledViaFirst": "cloudformation.amazonaws.com", "aws:CalledViaLast": "dynamodb.amazonaws.com" } } } ] }

aws:CalledViaFirstaws:CalledViaLast 키는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스를 호출할 때 요청에 표시됩니다. 이들 키는 요청 체인에서 호출을 한 첫 번째 서비스와 마지막 서비스를 나타냅니다. 예를 들어 AWS CloudFormation이 X Service라는 다른 서비스를 호출하고, 이 서비스는 다시 DynamoDB를 호출한 다음 AWS KMS를 호출한다고 가정해 보겠습니다. AWS KMS에 대한 마지막 호출은 AWS CloudFormation, X Service 및 DynamoDB을 통해 User 1에서 수행됩니다. 처음 호출은 AWS CloudFormation를 통해, 마지막 호출은 DynamoDB를 통해 이루어졌습니다.


        aws:CalledViaFirst and aws:CalledViaLast 사용 예제

aws:CalledViaFirst

문자열 연산자를 사용합니다.

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청을 수행한 첫 번째 서비스와 비교합니다. 자세한 내용은 aws:CalledVia 단원을 참조하십시오.

  • 가용성 – 이 키는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 최소 1개의 요청을 수행할 때 요청에 표시됩니다. 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 나타나지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.

aws:CalledViaLast

문자열 연산자를 사용합니다.

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청을 수행한 마지막 서비스와 비교합니다. 자세한 내용은 aws:CalledVia 단원을 참조하십시오.

  • 가용성 – 이 키는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 최소 1개의 요청을 수행할 때 요청에 표시됩니다. 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 나타나지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.

aws:CurrentTime

날짜 연산자를 사용합니다.

이 키를 사용하여 요청의 날짜 및 시간을 정책에서 지정한 날짜 및 시간과 비교합니다. 이 조건 키를 사용하는 예시 정책을 보려면 AWS: 특정 기간 동안 액세스 허용 단원을 참조하십시오.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:EpochTime

날짜 연산자 또는 숫자 연산자와 함께 사용됩니다.

이 키를 사용하여 epoch 또는 Unix 시간의 요청 날짜 및 시간을 정책에서 지정한 값과 비교합니다. 또한 이 키는 1970년 1월 1일 이후의 초 수를 허용합니다.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:MultiFactorAuthAge

숫자 연산자를 사용합니다.

이 키를 사용하여 요청한 보안 주체가 MFA를 사용하여 승인된 이후의 시간(초)과 정책에서 지정한 시간을 비교합니다. MFA에 대한 자세한 내용은 AWS에서 멀티 팩터 인증(MFA) 사용하기 단원을 참조하십시오.

  • 가용성 – 이 키는 호출한 보안 주체가 MFA를 사용하여 인증된 경우에만 요청 컨텍스트에 포함됩니다. MFA를 사용하지 않으면 이 키는 표시되지 않습니다.

aws:MultiFactorAuthPresent

부울 연산자를 사용합니다.

이 키를 사용하여 MFA(Multi-Factor Authentication)를 통해 요청을 한 임시 보안 자격 증명의 유효성을 검사했는지 여부를 확인합니다.

  • 가용성 – 이 키는 보안 주체가 임시 자격 증명을 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다. 장기 자격 증명을 사용하는 AWS CLI, AWS API 또는 AWS SDK 요청에는 이 키가 존재하지 않습니다.

임시 자격 증명은 IAM 역할, 연합된 사용자, sts:GetSessionToken의 임시 토큰을 가진 IAM 사용자 및 AWS Management 콘솔의 사용자를 인증하는 데 사용됩니다. IAM 사용자 액세스 키는 장기 자격 증명이지만, 경우에 따라 AWS는 IAM 사용자를 대신하여 작업을 수행하기 위해 임시 자격 증명을 생성합니다. 이러한 경우 aws:MultiFactorAuthPresent 키는 요청에 있으며 false 값으로 설정됩니다. 이런 일이 발생할 수 있는 두 가지 일반적인 경우가 있습니다.

  • AWS Management 콘솔의 IAM 사용자는 자신도 모르게 임시 자격 증명을 사용합니다. 사용자는 장기 자격 증명인 사용자 이름과 암호를 사용하여 콘솔에 로그인합니다. 하지만 백그라운드에서는 콘솔이 사용자를 대신하여 임시 자격 증명을 생성합니다.

  • IAM 사용자가 AWS 서비스를 호출하는 경우 서비스는 사용자의 자격 증명을 다시 사용하여 다른 서비스에 다른 요청을 합니다. 예를 들어 Athena를 호출하여 Amazon S3 버킷에 액세스하거나 AWS CloudFormation을 사용하여 Amazon EC2 인스턴스를 만들 때입니다. 후속 요청의 경우 AWS는 임시 자격 증명을 사용합니다.

임시 자격 증명의 사용을 지원하는 서비스에 대해 알아보려면 IAM로 작업하는 AWS 서비스 단원을 참조하십시오.

aws:MultiFactorAuthPresent 키는 사용자 액세스 키 페어와 같은 장기 자격 증명으로 API 또는 CLI 명령을 호출하는 경우 존재하지 않습니다. 따라서 이 키를 확인할 때 조건 연산자의 ...IfExists 버전을 사용하는 것이 좋습니다.

다음 Condition 요소는 MFA를 사용하여 요청을 인증했는지를 확인할 수 있는 신뢰성 있는 방법이 아니라는 점을 이해해야 합니다.

##### WARNING: NOT RECOMMENDED ##### "Effect" : "Deny", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "false" } }

Deny 효과, Bool 요소 및 false 값을 이렇게 조합할 경우, MFA를 사용하여 인증 가능하나 인증받지 않은 요청을 거부합니다. 이러한 조합은 MFA의 사용을 지원하는 임시 자격 증명에만 지원됩니다. 이 문은 장기 자격 증명을 사용하는 요청 또는 MFA를 사용하여 인증되는 요청에 대한 액세스를 거부하지 않습니다. 이 예의 로직이 복잡하며 MFA 인증이 실제로 사용되었는지 테스트되지 않으므로 이 예를 사용할 때는 주의해야 합니다.

또한 Deny 효과, Null 요소 및 true의 조합은 동일한 방식으로 작동하며 그 로직이 훨씬 더 복잡하기 때문에 이 조합을 사용하지 말아야 합니다.

권장되는 조합

BoolIfExists 연산자를 사용하여, 요청이 MFA를 사용하여 인증되는지 여부를 확인하는 것이 좋습니다.

"Effect" : "Deny", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "false" } }

Deny, BoolIfExistsfalse를 조합할 경우, MFA를 사용해 인증되지 않은 요청을 거부합니다. 특히 MFA를 포함하지 않는 임시 자격 증명의 요청을 거부합니다. 또한 액세스 키를 사용하는 AWS CLI 또는 AWS API 작업과 같은 장기 자격 증명을 사용하는 요청을 거부합니다. *IfExists 연산자는 aws:MultiFactorAuthPresent 키의 존재성 및 존재 가능성 여부를 해당 키의 존재 여부로 표시된 대로 확인합니다. MFA를 사용해 인증되지 않은 요청을 거부하려면 이 연산자를 사용하십시오. 이 방법이 더욱 안전하기는 하지만 액세스 키를 사용해 AWS CLI 또는 AWS API에 액세스하는 코드나 스크립트를 손상시킬 수 있습니다.

대체 조합

또한 BoolIfExists 연산자를 사용하여 MFA로 인증된 요청 및 장기 자격 증명을 사용하는 AWS CLI 또는 AWS API 요청을 허용할 수 있습니다.

"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : "true" } }

이 조건은 키가 존재하든 존재하지 않든 마찬가지로 일치합니다. Allow, BoolIfExiststrue를 조합할 경우, MFA를 사용해 인증된 요청 또는 MFA를 사용해 인증받지 않은 요청을 허용합니다. 이 말은 요청자가 장기 액세스 키를 사용할 경우 AWS CLI, AWS API 및 AWS SDK 작업이 허용된다는 것을 의미합니다. 이러한 조합은 MFA를 포함할 수도 있지만 실제로 포함하지 않는 임시 자격 증명의 요청을 허용하지 않습니다.

IAM 콘솔 비주얼 편집기를 사용해 정책을 생성한 후 MFA required(MFA 필수)를 선택하면 이 조합이 적용됩니다. 이러한 설정에서는 콘솔 액세스를 위해 MFA가 필요하지만 MFA 없이 프로그래밍 방식으로 액세스하는 방법도 있습니다.

또는 MFA를 사용해 인증되는 경우에 한해서 Bool 연산자를 사용해 프로그래밍 방식 요청과 콘솔 요청을 허용할 수도 있습니다.

"Effect" : "Allow", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : "true" } }

Allow, Booltrue를 조합할 경우, MFA를 사용해 인증된 요청만을 허용합니다. 이러한 조합은 MFA의 사용을 지원하는 임시 자격 증명에만 지원됩니다. 이 문은 장기 액세스 키를 사용하는 요청 또는 MFA 없이 임시 자격 증명을 사용하는 요청에 대한 액세스를 허용하지 않습니다.

MFA 키가 있는지 여부를 확인하는 데 다음과 유사한 정책 구문을 사용하지 마십시오.

##### WARNING: USE WITH CAUTION ##### "Effect" : "Allow", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }

Allow 효과, Null 요소 및 false 값을 조합할 경우, 그 요청의 실제 인증 여부와 상관없이, MFA를 사용해 인증받을 수 있는 요청만을 허용합니다. 이렇게 하여 임시 자격 증명을 사용하는 모든 요청을 허용하고 장기 자격 증명에 대한 액세스를 거부합니다. 이 예에서는 MFA 인증이 실제로 사용되었는지 여부를 테스트하지 않으므로 이 예를 사용할 때는 주의해야 합니다.

aws:PrincipalAccount

문자열 연산자를 사용합니다.

이 키를 사용하여 요청한 보안 주체가 속한 계정과 정책에서 지정한 계정 식별자를 비교합니다.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:PrincipalArn

ARN 연산자문자열 연산자와 함께 사용됩니다.

이 키를 사용하여 요청한 보안 주체의 Amazon 리소스 이름(ARN)을 정책에서 지정한 ARN과 비교합니다. IAM 역할의 경우 요청 컨텍스트는 역할을 맡은 사용자의 ARN이 아니라 역할의 ARN을 반환합니다. 이 조건 키에 지정할 수 있는 보안 주체의 유형을 알아보려면 보안 주체 지정 단원을 참조하십시오.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:PrincipalOrgID

문자열 연산자를 사용합니다.

이 키를 사용하여 요청한 보안 주체가 속한 AWS Organizations의 조직 식별자와 정책에 지정된 식별자를 비교합니다.

  • 가용성 – 이 키는 보안 주체가 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다.

이 전역 키는 조직 내 모든 AWS 계정의 계정 ID를 전부 나열하는 대안을 제공합니다. 이 조건 키를 사용하여 리소스 기반 정책에서 Principal 요소를 간단하게 지정할 수 있습니다. 조건 요소에서 조직 ID를 지정할 수 있습니다. 계정을 추가 및 제거할 때 aws:PrincipalOrgID 키가 포함된 정책에는 자동으로 올바른 계정이 포함되므로 수동 업데이트가 필요하지 않습니다.

예를 들어, 다음 Amazon S3 버킷 정책을 통해 o-xxxxxxxxxxx 조직 내 모든 계정의 멤버는 policy-ninja-dev 버킷에 객체를 추가할 수 있습니다.

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::policy-ninja-dev/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }
참고

이 전역 조건은 AWS 조직의 마스터 계정에 적용됩니다.

AWS Organizations에 대한 자세한 내용은 AWS Organizations 사용 설명서AWS Organizations(이)란 무엇인가? 단원을 참조하십시오.

aws:PrincipalOrgPaths

문자열 연산자를 사용합니다.

이 키를 사용하여 요청 중인 보안 주체의 AWS Organizations 경로를 정책의 경로와 비교합니다. 이 보안 주체는 IAM 사용자, IAM 역할, 연동 사용자 또는 AWS 계정 루트 사용자일 수 있습니다. 정책에서 이 조건 키는 요청자가 AWS Organizations의 지정된 조직 루트 또는 조직 단위(OU) 내의 계정 멤버인지 확인합니다. AWS Organizations 경로는 조직 엔터티 구조의 텍스트 표현입니다. 경로 사용 및 이해에 대한 자세한 내용은 AWS Organizations 엔터티 경로 이해 단원을 참조하십시오.

  • 가용성 – 이 키는 보안 주체가 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다.

참고

조직 ID는 전역적으로 고유하지만 OU ID와 루트 ID는 조직 내에서만 고유합니다. 즉, 두 조직이 동일한 조직 ID를 공유하지 않습니다. 그러나 다른 조직에는 사용자 ID와 동일한 OU 또는 루트가 있을 수 있습니다. OU 또는 루트를 지정할 때는 항상 조직 ID를 포함하는 것이 좋습니다.

예를 들어, 다음 조건은 ou-jkl0-awsddddd OU에 직접 연결되지만 하위 OU에는 연결되지 않은 계정의 보안 주체에 대해 true를 반환합니다.

"Condition" : { "ForAnyValue:StringEquals" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/"] }}

다음 조건은 OU 또는 해당 하위 OU에 직접 연결된 계정의 보안 주체에 대해 true를 반환합니다. 와일드카드를 포함할 때는 StringLike 조건 연산자를 사용해야 합니다.

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd*"] }}

다음 조건은 OU 또는 해당 하위 OU에 직접 연결된 계정의 보안 주체에 대해 true를 반환합니다.

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/*"] }}

다음 조건에서는 상위 OU에 관계없이 o-a1b2c3d4e5 조직의 모든 보안 주체에 대한 액세스를 허용합니다.

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/*"] }}

aws:PrincipalOrgPaths는 다중 값 조건 키입니다. 다중 값 키에는 하나 이상의 값이 목록 형식으로 포함됩니다. 결과는 논리적 OR입니다. ForAnyValue 조건 연산자에서 여러 값을 사용하는 경우 보안 주체의 경로는 정책에 나열된 경로 중 하나와 일치해야 합니다. 단일 키에 대해 여러 값을 포함하는 정책의 경우 조건을 배열 ("Key":["Value1", "Value2"])처럼 대괄호로 묶어야 합니다. 단일 값이 있는 경우에도 이 대괄호를 포함해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 다수의 키 또는 값을 사용하는 조건 생성 단원을 참조하십시오.

"Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-def0-awsbbbbb/*", "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-jkl0-awsddddd/*" ] } }

aws:PrincipalTag

문자열 연산자를 사용합니다.

이 키를 사용하여 요청한 보안 주체에 연결된 태그를 정책에서 지정한 태그와 비교합니다. 보안 주체에 둘 이상의 태그가 연결되어 있는 경우 요청 컨텍스트에는 연결된 각 태그 키에 대해 aws:PrincipalTag 키가 하나씩 포함됩니다.

  • 가용성 – 이 키는 보안 주체가 태그가 연결된 IAM 사용자를 사용하는 경우 요청 컨텍스트에 포함됩니다. 연결된 태그 또는 세션 태그가 있는 IAM 역할을 사용하는 보안 주체에 포함됩니다.

사용자 또는 역할에 사용자 지정 속성을 키-값 페어의 형태로 추가할 수 있습니다. IAM 태그에 대한 자세한 내용은 IAM 사용자 및 역할 태그 지정 단원을 참조하십시오. aws:PrincipalTag를 사용하여 AWS 보안 주체에 대한 액세스를 제어할 수 있습니다.

이 예제에서는 다음과 같은 정책을 생성할 수 있는 방법을 보여 줍니다.를 사용하면 tagManager=true 태그가 지정된 사용자가 IAM 사용자, 그룹 또는 역할을 관리할 수 있습니다.이 정책을 사용하려면 정책 예제의 기울임꼴 자리 표시자 텍스트를 본인의 정보로 대체하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:*", "Resource": "*", "Condition": {"StringEquals": {"aws:PrincipalTag/tagManager": "true"}} } ] }

aws:PrincipalType

문자열 연산자를 사용합니다.

이 키를 사용하여 요청을 하는 보안 주체의 유형을 정책에서 지정한 보안 주체 유형과 비교합니다. 다른 보안 주체에 대한 요청 컨텍스트에서 정보가 표시되는 방법에 대한 자세한 내용은 보안 주체 지정 단원을 참조하십시오.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:Referer

문자열 연산자를 사용합니다.

이 키를 사용하여 클라이언트 브라우저에서 요청을 참조한 사람과 정책에서 지정한 참조자를 비교합니다. aws:referer 요청 컨텍스트 값은 HTTP 헤더의 호출자에 의해 제공됩니다.

  • 가용성 – 이 키는 브라우저에서 URL을 사용하여 요청이 호출된 경우에만 요청 컨텍스트에 포함됩니다.

예를 들어, 웹 브라우저를 사용하여 Amazon S3 API 작업을 직접 호출할 수 있습니다. 즉, 웹 브라우저를 통해 직접 이미지 및 문서와 같은 S3 객체를 볼 수 있습니다. 이 aws:referer 조건을 사용하면 참조자 헤더의 값을 기준으로 HTTP 또는 HTTPS 요청의 특정 값에 대한 액세스를 제한할 수 있습니다.

주의

이 키를 사용할 때는 주의해야 합니다. 공개적으로 알려진 참조자 헤더 값을 포함하는 것은 위험합니다. 권한이 없는 사용자가 수정된 브라우저나 사용자 지정 브라우저를 사용하여 원하는 aws:referer 값을 제공할 수 있습니다. 따라서 무단 사용자의 직접 AWS 요청을 차단할 목적으로 aws:referer를 사용해서는 안 됩니다. 이러한 값은 고객이 Amazon S3에 저장된 콘텐츠 등의 디지털 콘텐츠를 권한이 없는 타사 사이트에서 참조하지 못하도록 보호하기 위해서만 사용하십시오.

aws:RequestedRegion

문자열 연산자를 사용합니다.

이 키를 사용하여 요청에서 호출된 AWS 리전을 정책에서 지정한 리전과 비교합니다. 이 전역 조건 키를 사용하여 요청할 수 있는 리전을 제어할 수 있습니다. 각 서비스의 AWS 리전을 보려면 Amazon Web Services 일반 참조에서 서비스 엔드포인트 및 할당량을 참조하십시오.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

IAM 등과 같은 일부 전역 서비스에는 단일 엔드포인트가 있습니다. 그러나 이 엔드포인트는 미국 동부(버지니아 북부) 리전에 실제로 위치하기 때문에 IAM 호출은 항상 us-east-1 리전에 대해 생성됩니다. 예를 들어, 요청된 리전이 us-west-2이 아닌 경우 모든 서비스에 대한 액세스를 거부하는 정책을 생성하면 IAM 호출이 항상 실패합니다. 이 문제에 대한 해결 방법을 보여주는 예는 NotAction 및 Deny 단원을 참조하십시오.

참고

aws:RequestedRegion 조건 키를 사용하면 서비스의 어떤 엔드포인트를 호출할지 제어할 수 있지만 작업의 영향은 제어할 수 없습니다. 일부 서비스의 경우 교차 리전 영향이 있습니다. 예를 들어, Amazon S3에 교차 리전 복제를 제어하는 API 작업이 있습니다. s3:PutBucketReplication 조건 키의 영향을 받는 한 리전에서 aws:RequestedRegion을 호출할 수 있는데 다른 리전은 복제 구성 설정에 따라 영향을 받습니다.

이 컨텍스트 키를 사용하여 지정된 리전 세트 내에서 AWS 서비스에 대한 액세스를 제한할 수 있습니다. 예를 들어, 다음 정책은 사용자가 AWS Management 콘솔에서 모든 Amazon EC2 인스턴스를 조회하도록 허용합니다. 그러나 이 정책은 아일랜드(eu-west-1), 런던(eu-west-2) 또는 파리(eu-west-3)의 인스턴스만 변경하도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InstanceConsoleReadOnly", "Effect": "Allow", "Action": [ "ec2:Describe*", "ec2:Export*", "ec2:Get*", "ec2:Search*" ], "Resource": "*" }, { "Sid": "InstanceWriteRegionRestricted", "Effect": "Allow", "Action": [ "ec2:Associate*", "ec2:Import*", "ec2:Modify*", "ec2:Monitor*", "ec2:Reset*", "ec2:Run*", "ec2:Start*", "ec2:Stop*", "ec2:Terminate*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "eu-west-1", "eu-west-2", "eu-west-3" ] } } } ] }

aws:RequestTag/tag-key

문자열 연산자를 사용합니다.

이 키를 사용하여 요청에서 전달된 태그 키-값 페어를 정책에서 지정한 태그 페어와 비교합니다. 예를 들어, 요청에 태그 키 "Dept"가 포함되어 있으며 값이 "Accounting"인지 확인할 수 있습니다. 자세한 내용은 AWS 요청 중 액세스 제어 단원을 참조하십시오.

  • 가용성 – 이 키는 요청에 태그가 전달될 때 요청 컨텍스트에 포함됩니다. 요청에 여러 태그가 전달되면 각 태그 키-값 페어에 대해 하나의 컨텍스트 키가 있습니다.

이 컨텍스트 키는 "aws:RequestTag/tag-key":"tag-value" 형식으로, 여기서 tag-keytag-value는 한 쌍의 태그 키와 값입니다.

요청에 여러 개의 태그 키-값 페어를 포함할 수 있으므로 요청 콘텐츠는 다중 값 요청이 될 수 있습니다. 이 경우 ForAllValues 또는 ForAnyValue 설정 연산자 사용을 고려해야 합니다. 자세한 내용은 다수의 키와 값 사용 단원을 참조하십시오.

aws:ResourceTag/tag-key

문자열 연산자를 사용합니다.

이 키를 사용하여 정책에서 지정한 태그 키-값 페어를 리소스에 연결된 키-값 페어와 비교합니다. 예를 들어 리소스에 값이 "Marketing"인 태그 키 "Dept"와 연결된 경우에만 리소스에 대한 액세스가 필요할 수 있습니다. 자세한 내용은 AWS 리소스에 대한 액세스 제어 단원을 참조하십시오.

  • 가용성 – 요청된 리소스에 이미 태그가 연결된 경우 이 키는 요청 컨텍스트에 포함됩니다. 이 키는 태그를 기반으로 권한 부여를 지원하는 리소스에 대해서만 반환됩니다. 각 태그 키-값 페어에는 하나의 컨텍스트 키가 있습니다.

이 컨텍스트 키는 "aws:ResourceTag/tag-key":"tag-value" 형식으로, 여기서 tag-keytag-value는 한 쌍의 태그 키와 값입니다.

aws:SecureTransport

부울 연산자를 사용합니다.

이 키를 사용하여 요청이 SSL을 사용하여 전송되었는지 여부를 확인합니다. 요청 컨텍스트는 true 또는 false를 반환합니다. 정책에서 SSL을 사용하여 요청이 전송된 경우에만 특정 작업을 허용할 수 있습니다.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

aws:SourceAccount

문자열 연산자를 사용합니다.

이 키를 사용하여 서비스 대 서비스 요청을 하는 리소스의 계정 ID를 정책에서 지정한 계정 ID와 비교합니다.

  • 가용성 – 이 키는 리소스에 액세스하여 리소스 소유자를 대신하여 다른 서비스를 호출하도록 AWS 서비스를 트리거하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스 ARN을 호출된 서비스로 전달해야 합니다. 이 ARN은 원본 계정 ID를 포함합니다.

이 조건 키를 사용하여 Amazon S3가 혼동된 대리자로 사용되고 있지 않은지 확인할 수 있습니다. 예를 들어 Amazon S3 버킷 업데이트가 Amazon SNS 주제 게시물을 트리거하면 Amazon S3 서비스에서 sns:Publish API 작업을 호출합니다. 버킷은 SNS 요청의 소스로 간주되며 키 값은 버킷 ARN의 계정 ID입니다.

aws:SourceArn

ARN 연산자문자열 연산자와 함께 사용됩니다.

이 키를 사용하여 서비스 대 서비스 요청을 하는 리소스의 Amazon 리소스 이름(ARN)을 정책에서 지정한 ARN과 비교합니다.

이 키는 요청을 하는 보안 주체의 ARN에서는 작동하지 않습니다. 대신 aws:PrincipalArn를 사용합니다. 소스의 ARN에는 계정 ID가 포함되어 있으므로 aws:SourceAccount와 함께 aws:SourceArn을 사용할 필요가 없습니다.

  • 가용성 – 이 키는 리소스에 액세스하여 리소스 소유자를 대신하여 다른 서비스를 호출하도록 AWS 서비스를 트리거하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스의 ARN을 호출된 서비스로 전달해야 합니다.

이 조건 키를 사용하여 Amazon S3가 혼동된 대리자로 사용되지 않는지 확인할 수 있습니다. 예를 들어, Amazon S3 버킷 업데이트가 Amazon SNS 주제 게시물을 트리거하면 Amazon S3 서비스에서 sns:Publish API 작업을 호출합니다. 버킷은 SNS 요청의 소스로 간주되며 키 값은 버킷의 ARN입니다.

aws:SourceIp

IP 주소 연산자를 사용합니다.

이 키를 사용하여 요청자의 IP 주소를 정책에서 지정한 IP 주소와 비교합니다.

  • 가용성 – 이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우를 제외하고 요청 컨텍스트에 포함됩니다.

정책 내에서 aws:SourceIp 조건 키를 사용하여 보안 주체가 지정된 IP 범위 내에서만 요청하도록 할 수 있습니다. 그러나 AWS 서비스가 보안 주체를 대신하여 호출을 하는 경우 이 정책은 액세스를 거부합니다. 이 경우 aws:ViaAWSService 키와 함께 aws:SourceIp을 사용하여 소스 IP 제한이 보안 주체가 직접 수행한 요청에만 적용되도록 할 수 있습니다.

예를 들어 다음 정책을 IAM 사용자에게 연결할 수 있습니다. 이 정책은 사용자가 지정된 IP 주소에서 호출을 수행하는 경우 객체를 my-service-bucket Amazon S3 버킷에 직접 넣을 수 있도록 허용합니다. 그러나 사용자가 또 다른 요청을 수행하여 서비스에서 Amazon S3를 호출하도록 하는 경우에 IP 주소 제한이 적용되지 않습니다. PrincipalPutObjectIfIpAddress 문은 서비스에 의해 요청이 수행되지 않은 경우에만 IP 주소를 제한합니다. ServicePutObject 문은 서비스에 의해 요청이 수행되는 경우 IP 주소 제한 없이 작업을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalPutObjectIfIpAddress", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "false"}, "IpAddress": {"aws:SourceIp": "123.45.167.89"} } }, { "Sid": "ServicePutObject", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-service-bucket/*", "Condition": { "Bool": {"aws:ViaAWSService": "true"} } } ] }

요청이 Amazon VPC 엔드포인트를 사용하는 호스트로부터 오는 경우, aws:SourceIp 키를 사용할 수 없습니다. 대신에 aws:VpcSourceIp와 같은 VPC 전용 키를 사용해야 합니다. VPC 엔드포인트 사용에 대한 자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트 - 엔드포인트 사용 제어를 참조하십시오.

aws:SourceVpc

문자열 연산자를 사용합니다.

이 키를 사용하여 요청이 사용자가 정책에서 지정한 VPC에서 왔는지 확인합니다. 정책에서 이 키를 사용하여 특정 VPC에 대한 액세스만 허용할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 개발자 가이드특정 VPC에 대한 액세스 제한 단원을 참조하십시오.

  • 가용성 – 이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다.

aws:SourceVpce

문자열 연산자를 사용합니다.

이 키를 사용하여 요청의 VPC 엔드포인트 식별자를 정책에서 지정한 엔드포인트 ID와 비교합니다. 정책에서 이 키를 사용하여 특정 VPC에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service 개발자 가이드특정 VPC 엔드포인트에 대한 액세스 제한 단원을 참조하십시오.

  • 가용성 – 이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다.

aws:TagKeys

문자열 연산자를 사용합니다.

이 키를 사용하여 요청의 태그 키를 정책에서 지정한 키와 비교합니다. 정책을 사용하여 태그를 통해 액세스를 제어할 때 aws:TagKeys 조건 키를 사용하여 어떤 태그 키가 허용되는지 정의하는 것이 가장 좋습니다. 정책 예제 및 자세한 내용은 태그 키를 기반으로 액세스 제어 단원을 참조하십시오.

  • 가용성 – 이 키는 작업에서 리소스에 태그를 연결하는 것을 지원하는 경우에만 요청 컨텍스트에 포함됩니다.

이 컨텍스트 키는 "aws:TagKeys":"tag-key" 형식이며, 여기서 tag-key는 값이 없는 태그 키 목록입니다(예: ["Dept","Cost-Center"]).

요청에 여러 개의 태그 키-값 페어를 포함할 수 있으므로 요청 콘텐츠는 다중 값 요청이 될 수 있습니다. 이 경우 ForAllValues 또는 ForAnyValue 설정 연산자 사용을 고려해야 합니다. 자세한 내용은 다수의 키와 값 사용 단원을 참조하십시오.

일부 서비스는 리소스 생성, 수정 또는 삭제와 같은 리소스 작업을 포함한 태그 지정을 지원합니다. 태그 지정 및 단일 호출과 같은 작업을 허용하려면 태그 지정 작업 및 리소스 수정 작업을 모두 포함하는 정책을 생성해야 합니다. 그런 다음 aws:TagKeys 조건 키를 사용하여 요청 내 특정 태그 키 사용을 적용할 수 있습니다. 예를 들어 누군가 Amazon EC2 스냅샷을 생성할 때 태그를 제한하려면 ec2:CreateSnapshot 생성 작업 ec2:CreateTags 태그 지정 작업을 정책에 포함시켜야 합니다. aws:TagKeys를 사용하는 이 시나리오에 대한 정책을 보려면 Linux 인스턴스용 Amazon EC2 사용 설명서태그를 사용하여 스냅샷 생성 단원을 참조하십시오.

aws:TokenIssueTime

날짜 연산자를 사용합니다.

이 키를 사용하여 임시 보안 자격 증명이 발급된 날짜와 시간을 정책에서 지정한 날짜 및 시간과 비교할 수 있습니다.

  • 가용성 – 이 키는 보안 주체가 임시 자격 증명을 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다. 액세스 키를 사용하는 AWS CLI, AWS API 또는 AWS SDK 요청에는 이 키가 존재하지 않습니다.

임시 자격 증명의 사용을 지원하는 서비스에 대해 알아보려면 IAM로 작업하는 AWS 서비스 단원을 참조하십시오.

aws:UserAgent

문자열 연산자를 사용합니다.

이 키를 사용하여 요청자의 클라이언트 애플리케이션을 정책에서 지정한 애플리케이션과 비교합니다.

  • 가용성 – 이 키는 항상 요청 컨텍스트에 포함됩니다.

주의

이 키를 사용할 때는 주의해야 합니다. aws:UserAgent 값은 HTTP 헤더의 호출자가 제공하기 때문에, 권한이 없는 사용자가 수정된 브라우저나 사용자 지정 브라우저를 사용하여 원하는 aws:UserAgent 값을 제공할 수 있습니다. 따라서 무단 사용자의 직접 AWS 요청을 차단할 목적으로 aws:UserAgent를 사용해서는 안 됩니다. 특정 클라이언트 애플리케이션을 허용하는 데 사용할 수 있으며 정책을 테스트한 후에만 사용할 수 있습니다.

aws:userid

문자열 연산자를 사용합니다.

이 키를 사용하여 요청자의 보안 주체 식별자를 정책에서 지정한 ID와 비교합니다. IAM 사용자의 경우 요청 컨텍스트 값은 사용자 ID입니다. IAM 역할의 경우 이 값 형식은 다를 수 있습니다. 다른 보안 주체에 대한 정보가 표시되는 방법에 대한 자세한 내용은 보안 주체 지정 단원을 참조하십시오.

  • 가용성 – 이 키는 서명된 모든 요청에 대한 요청 컨텍스트에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다.

aws:username

문자열 연산자를 사용합니다.

이 키를 사용하여 요청자의 사용자 이름을 정책에서 지정한 사용자 이름과 비교합니다. 다른 보안 주체에 대한 정보가 표시되는 방법에 대한 자세한 내용은 보안 주체 지정 단원을 참조하십시오.

  • 가용성 – 이 키는 항상 IAM 사용자의 요청 컨텍스트에 포함됩니다. 익명 요청 및 AWS 계정 루트 사용자 또는 IAM 역할에서 생성된 요청에는 이 키가 포함되지 않습니다.

aws:ViaAWSService

부울 연산자를 사용합니다.

이 키를 사용하여 AWS 서비스가 사용자를 대신하여 다른 서비스에 요청을 하는지 여부를 확인합니다.

서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하면 요청 컨텍스트 키에서 true를 반환합니다. 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 컨텍스트 키에서 false를 반환합니다. 보안 주체가 직접 호출을 할 때도 요청 컨텍스트 키에서 false를 반환합니다.

  • 가용성 – 이 키는 항상 대다수 서비스의 요청 컨텍스트에 포함됩니다.

다음 서비스는 현재 aws:ViaAWSService를 지원하지 않습니다.

  • Amazon EC2

  • AWS Glue

  • AWS Lake Formation

  • AWS OpsWorks

이 조건 키를 사용하여 서비스에 의해 요청이 수행되었는지 여부에 따라 액세스를 허용하거나 거부할 수 있습니다. 정책에 대한 예제는 AWS: 소스 IP를 바탕으로 AWS에 대한 액세스 거부 단원을 참조하십시오.

aws:VpcSourceIp

IP 주소 연산자를 사용합니다.

이 키를 사용하여 요청한 IP 주소를 정책에서 지정한 IP 주소와 비교합니다. 정책에서 이 키는 요청이 지정된 IP 주소에서 시작되고 VPC 엔드포인트를 통과하는 경우에만 일치합니다.

  • 가용성 – 이 키는 요청이 VPC 엔드포인트를 사용하여 이루어진 경우에만 요청 컨텍스트에 포함됩니다.

자세한 내용은 Amazon VPC 사용 설명서VPC 엔드포인트를 통해 서비스에 대한 액세스 제어 단원을 참조하십시오.