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 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하고 키를 보려는 서비스를 선택합니다.

중요

조건을 여러 키 값이 있는 요청 컨텍스트와 비교하려면 ForAllValues 또는 ForAnyValue 연산자를 설정해야 합니다. 집합 연산자는 다중 값 조건 키에만 사용합니다. 단일 값 조건 키(single-valued condition keys)에는 집합 연산자를 사용하지 마세요. 자세한 정보는 다수의 키 또는 값을 사용하는 조건 생성을 참조하십시오.

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이 AWS CloudFormation을 호출하도록 DynamoDB에 요청하면 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:FederatedProvider

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

이 키를 사용하여 요청자의 보안 주체 식별자 공급자(IdP)를 정책에서 지정한 IdP와 비교합니다. 이는 AssumeRoleWithWebIdentity 또는 AssumeRoleWithSAML AWS STS 작업을 사용하여 IAM 역할을 수임했음을 의미합니다. 결과 역할 세션의 임시 자격 증명이 요청을 수행하는 데 사용되는 경우 요청 컨텍스트는 원래 페더레이션 자격 증명을 인증한 IdP를 식별합니다.

  • 가용성 - 이 키는 보안 주체가 역할 세션 보안 주체이고 해당 세션이 서드 파티 자격 증명 공급자를 사용하여 발급된 경우에 표시됩니다.

  • 값 유형 - 단일 값

예를 들어 Amazon Cognito를 통해 사용자가 인증된 경우 요청 컨텍스트에 cognito-identity.amazonaws.com 값이 포함됩니다. 마찬가지로 Login with Amazon을 통해 사용자가 인증된 경우 요청 컨텍스트에 www.amazon.com 값이 포함됩니다.

단일 값 조건 키를 변수로 사용할 수 있습니다. 다음 리소스 기반 정책 예에서는 aws:FederatedProvider 키를 리소스 ARN의 정책 변수로 사용합니다. 이 정책은 IdP를 사용하여 인증한 모든 보안 주체가 발급 자격 증명 공급자와 관련된 경로를 사용하여 Amazon S3 버킷에서 객체를 가져올 수 있도록 허용합니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/${aws:FederatedProvider}/*" } }

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 Console 사용자와 함께 사용합니다. IAM 사용자 액세스 키는 장기 자격 증명이지만 경우에 따라 AWS는 작업을 수행하기 위해 IAM 사용자를 대신하여 임시 자격 증명을 생성합니다. 이러한 경우 aws:MultiFactorAuthPresent 키는 요청에 있으며 false 값으로 설정됩니다. 이런 일이 발생할 수 있는 두 가지 일반적인 경우가 있습니다.

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

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

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

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 필수(MFA required)를 선택하면 이 조합이 적용됩니다. 이러한 설정에서는 콘솔 액세스를 위해 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

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

이 키를 사용하여 요청한 보안 주체가 속한 계정과 정책에서 지정한 계정 식별자를 비교합니다. 익명 요청의 경우 요청 컨텍스트는 anonymous를 반환합니다.

  • 가용성 - 이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.

  • 값 유형 - 단일 값

다음 예에서는 계정 번호가 123456789012인 보안 주체를 제외하고 액세스가 거부되었습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Action": "service:*", "Effect": "Deny", "Resource": [ "arn:partition:service:region:accountID:resource" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }

aws:PrincipalArn

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

이 키를 사용하여 요청한 보안 주체의 Amazon 리소스 이름(ARN)을 정책에서 지정한 ARN과 비교합니다. IAM 역할의 경우 요청 컨텍스트는 역할을 수임한 사용자의 ARN이 아니라 역할의 ARN을 반환합니다.

  • 가용성 - 이 키는 서명된 모든 요청에 대한 요청 컨텍스트에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다. 이 조건 키에서 다음 유형의 보안 주체를 지정할 수 있습니다.

    • IAM 역할

    • IAM 사용자

    • AWS STS 페더레이션 사용자 세션

    • AWS 계정 루트 사용자

  • 값 유형 - 단일 값

다음 목록은 aws:PrincipalArn 조건 키에서 지정할 수 있는 여러 유형의 보안 주체에 대해 반환된 요청 컨텍스트 값을 보여 줍니다.

  • IAM 역할 – 요청 컨텍스트에는 조건 키 aws:PrincipalArn에 대한 다음 값이 포함됩니다. 맡은 역할 세션 ARN을 조건 키의 값으로 지정하지 마십시오. 위임된 역할 세션 보안 주체에 대한 자세한 내용은 역할 세션 보안 주체 섹션을 참조하세요.

    arn:aws:iam::123456789012:role/role-name
  • IAM 사용자 - 요청 컨텍스트에 조건 키 aws:PrincipalArn에 대한 다음 값이 포함됩니다.

    arn:aws:iam::123456789012:user/user-name
  • AWS STS 페더레이션 사용자 세션 - 요청 컨텍스트에 조건 키 aws:PrincipalArn에 대한 다음 값이 포함됩니다.

    arn:aws:sts::123456789012:federated-user/user-name
  • AWS 계정 루트 사용자 - 요청 컨텍스트에 조건 키 aws:PrincipalArn에 대한 다음 값이 포함됩니다. 루트 사용자 ARN을 aws:PrincipalArn 조건 키에 대한 값으로 지정하는 경우 AWS 계정의 루트 사용자에 대한 권한만 제한합니다. 이는 리소스 기반 정책의 보안 주체 요소에서 루트 사용자 ARN을 지정하는 것 즉, AWS 계정에 권한을 위임하는 것과는 다릅니다. 리소스 기반 정책의 보안 주체 요소에 루트 사용자 ARN 지정하는 방법에 대한 자세한 내용은 AWS 계정 보안 주체 섹션을 참조하세요.

    arn:aws:iam::123456789012:root

    루트 사용자 ARN을 AWS Organizations 서비스 제어 정책(SCP)의 조건 키 aws:PrincipalArn의 값으로 지정할 수 있습니다. SCP는 조직의 권한을 관리하는 데 사용되는 조직 정책 유형이며 조직의 구성원 계정에만 영향을 미칩니다. SCP는 멤버 계정의 IAM 사용자 및 역할(멤버 계정의 루트 사용자 포함)에 대해 권한을 제한합니다. SCP가 권한에 미치는 영향에 대한 자세한 내용은 조직 사용 설명서SCP가 권한에 미치는 영향을 참조하세요.

aws:PrincipalIsAWSService

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

이 키를 사용하여 리소스에 대한 호출이 AWS 서비스 보안 주체에 의해 직접 수행되고 있는지를 확인합니다. 예를 들어 AWS CloudTrail은 서비스 보안 주체 cloudtrail.amazonaws.com을 사용하여 Amazon S3 버킷에 로그를 작성합니다. 서비스가 서비스 보안 주체를 사용하여 리소스에 대한 직접 작업을 수행하는 경우 요청 컨텍스트 키는 true로 설정됩니다. 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하면 요청 컨텍스트 키가 false로 설정됩니다. 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우에도 false로 설정됩니다.

  • 가용성 - 이 키는 AWS 자격 증명을 사용하는 모든 API 요청에 대한 요청 컨텍스트에 표시됩니다. 익명 요청에는 이 키가 포함되지 않습니다.

  • 값 유형 - 단일 값

이 조건 키를 사용하여 신뢰할 수 있는 자격 증명 및 예상 네트워크 위치에 대한 액세스를 제한하면서AWS 서비스에 대한 액세스 권한를 안전하게 부여합니다.

다음 Amazon S3 버킷 정책 예에서 vpc-111bbb22에서 시작된 요청 또는 CloudTrail 과 같은 서비스 주체로부터 온 경우를 제외하고 버킷에 대한 액세스는 제한됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Expected-network+service-principal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/AWSLogs/AccountNumber/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22" }, "BoolIfExists": { "aws:PrincipalIsAWSService": "false" } } } ] }

다음 비디오에서 aws:PrincipalIsAWSService 조건 키를 정책에서 사용하는 방법에 대해 자세히 알아보세요.

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 조직의 관리 계정에도 적용됩니다. 이 정책은 지정된 조직 외부의 모든 보안 주체가 Amazon S3 버킷에 액세스하지 못하도록 합니다. 여기에는 AWS CloudTrail이(가) Amazon S3 버킷에 로그 데이터를 전송하는 것과 같이 내부 리소스와 상호 작용하는 모든 AWS 서비스가 포함됩니다. AWS 서비스에 대한 액세스 권한을 안전하게 부여하는 방법을 알아보려면 aws:PrincipalIsAWSService 섹션을 참조하세요.

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-ab12-22222222 OU에 직접 연결되지만 하위 OU에는 연결되지 않은 계정의 보안 주체에 대해 true를 반환합니다.

"Condition" : { "ForAnyValue:StringEquals" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"] }}

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

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/*"] }}

다음 조건은 하위 OU(단 상위 OU에 직접으로는 제외)에 직접 연결된 계정의 보안 주체에 대해 true를 반환합니다. 이전 조건은 OU 또는 모든 하위 항목을 위한 것입니다. 다음 조건은 하위 항목(및 해당 하위 항목의 하위 항목)에만 해당됩니다.

"Condition" : { "ForAnyValue:StringLike" : { "aws:PrincipalOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/ou-*"] }}

다음 조건에서는 상위 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-ab12/ou-ab12-33333333/*", "o-a1b2c3d4e5/r-ab12/ou-ab12-22222222/*" ] } }

aws:PrincipalServiceName

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

이 키를 사용하여 정책의 서비스 보안 주체이름을 리소스에 요청하는 서비스 보안 주체와 비교합니다. 이 키를 사용하여 이 호출이 특정 서비스 보안 주체에 의해 수행되었는지를 확인할 수 있습니다. 서비스 보안 주체가 리소스에 직접 요청하면 aws:PrincipalServiceName 키에는 서비스 보안 주체의 이름이 포함됩니다. 예를 들어 AWS CloudTrail 서비스 보안 주체의 이름은 cloudtrail.amazonaws.com입니다.

  • 가용성 - 이 키는 호출이 AWS 서비스 보안 주체에 의해 이루어질 때 요청에 표시됩니다. 이 키는 다음과 같은 다른 상황에서는 나타나지 않습니다.

    • 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우.

    • 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하는 경우.

    • IAM 보안 주체가 직접 호출한 경우.

    • 익명의 요청자가 호출하는 경우.

  • 값 유형 - 단일 값

이 조건 키를 사용하여 신뢰할 수 있는 자격 증명 및 예상 네트워크 위치에 대한 액세스를 제한하면서AWS 서비스에 대한 액세스 권한를 안전하게 부여합니다.

다음 Amazon S3 버킷 정책 예에서 vpc-111bbb22에서 시작된 요청 또는 CloudTrail 과 같은 서비스 주체로부터 온 경우를 제외하고 버킷에 대한 액세스는 제한됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "expected-network+service-principal", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/AWSLogs/AccountNumber/*", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": "vpc-111bbb22", "aws:PrincipalServiceName": "cloudtrail.amazonaws.com" } } } ] }

aws:PrincipalServiceNamesList

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

이 키는 서비스에 속한 모든 서비스 보안 주체 이름의 목록을 제공합니다. 이 키는 고급 조건 키입니다. 이를 사용해 서비스가 특정 리전에서만 리소스에 액세스하지 못하도록 제한할 수 있습니다. 일부 서비스는 특정 리전 내에서 서비스의 특정 인스턴스를 나타내는 리전 서비스 보안 주체를 생성할 수 있습니다. 리소스에 대한 액세스를 서비스의 특정 인스턴스로 제한할 수 있습니다. 서비스 보안 주체가 리소스에 직접 요청하는 경우 aws:PrincipalServiceNamesList에는 서비스의 리전별 인스턴스와 연결된 모든 서비스 보안 주체 이름의 순서가 지정되지 않은 목록이 포함되어 있습니다.

  • 가용성 - 이 키는 호출이 AWS 서비스 보안 주체에 의해 이루어질 때 요청에 표시됩니다. 이 키는 다음과 같은 다른 상황에서는 나타나지 않습니다.

    • 서비스가 서비스 역할 또는 서비스 연결 역할을 사용해 보안 주체를 대신하여 호출을 하는 경우.

    • 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하는 경우.

    • IAM 보안 주체가 직접 호출한 경우.

    • 익명의 요청자가 호출하는 경우.

  • 값 유형 - 다중 값

aws:PrincipalServiceNamesList는 다중 값 조건 키입니다. 다중 값 키에는 하나 이상의 값이 목록 형식으로 포함됩니다. 결과는 논리적 OR입니다. 이 키를 사용할 때 StringLike 조건 연산자와 함께 ForAnyValue 또는 ForAllValues를 사용해 연산자를 설정해야 합니다. 단일 키에 대해 여러 값을 포함하는 정책의 경우 조건을 배열(예: ("Key":["Value1", "Value2"]))처럼 대괄호로 묶어야 합니다. 단일 값이 있는 경우에도 이 대괄호를 포함해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 다수의 키와 값 사용 섹션을 참조하세요.

aws:PrincipalTag/tag-key

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

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

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

  • 값 유형 - 단일 값

사용자 또는 역할에 사용자 지정 속성을 키 값 페어의 형태로 추가할 수 있습니다. IAM에서의 태그 사용에 대한 자세한 내용은 IAM 리소스에 태깅 섹션을 참조하세요. aws:PrincipalTag를 사용하여 AWS 보안 주체에 대한 액세스를 제어할 수 있습니다.

이 예제는 department=hr 태그가 지정된 사용자가 IAM 사용자, 그룹 또는 역할을 관리하도록 허용하는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다. 이 정책을 사용하려면 정책 예제의 기울임꼴 자리 표시자 텍스트를 본인의 정보로 대체합니다. 그런 다음 정책 생성 또는 정책 편집의 지침을 따릅니다.

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

aws:PrincipalType

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

이 키를 사용하여 요청을 하는 보안 주체의 유형을 정책에서 지정한 보안 주체 유형과 비교합니다. 자세한 내용은 보안 주체 지정 섹션을 참조하세요. principal 키 값의 구체적인 예제를 보려면 보안 주체 키 값 섹션을 참조하세요.

  • 가용성 - 이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.

  • 값 유형 - 단일 값

aws:referer

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

이 키를 사용하여 클라이언트 브라우저에서 요청을 참조한 사람과 정책에서 지정한 참조자를 비교합니다. aws:referer 요청 컨텍스트 값은 HTTP 헤더의 호출자에 의해 제공됩니다. 웹 페이지에서 링크를 선택하면 웹 브라우저 요청에 Referer 헤더가 포함됩니다. Referer 헤더에는 링크가 선택된 웹 페이지의 URL이 포함됩니다.

  • 가용성 - 이 키는 브라우저의 웹 페이지 URL에서 링크하여 AWS 리소스에 대한 요청을 호출한 경우에만 요청 컨텍스트에 포함됩니다. 이 키는 AWS 리소스에 액세스할 때 브라우저 링크를 사용하지 않기 때문에 프로그래밍 방식의 요청에 포함되지 않습니다.

  • 값 유형 - 단일 값

예를 들어 URL을 사용하거나 직접 API 호출을 사용하여 Amazon S3 객체에 직접 액세스할 수 있습니다. 자세한 내용은 웹 브라우저를 직접 사용한 Amazon S3 API 작업을 참조하세요. 웹 페이지에 있는 URL에서 Amazon S3 객체에 액세스하면 소스 웹 페이지의 URL이 aws:referer에 사용됩니다. 브라우저에 URL을 입력하여 Amazon S3 객체에 액세스하는 경우에는 aws:referer가 없습니다. API를 직접 호출하는 경우에도 aws:referer가 없습니다. 정책에서 aws:referer 조건 키를 사용하여 회사 도메인의 웹 페이지에 대한 링크와 같은 특정 참조자의 요청을 허용할 수 있습니다.

주의

이 키를 사용할 때는 주의해야 합니다. 공개적으로 알려진 참조자 헤더 값을 포함하는 것은 위험합니다. 권한이 없는 사용자가 수정된 브라우저나 사용자 지정 브라우저를 사용하여 원하는 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 Console에서 모든 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는 한 쌍의 태그 키와 값입니다. 태그 키와 값은 대/소문자를 구분하지 않습니다. 따라서 정책의 조건 요소에서 "aws:RequestTag/TagKey1": "Value1" 지정을 완료한 경우 조건은 이름이 TagKey1 또는 tagkey1인 요청 태그 키와 일치하지만 두 가지 모두와 일치하지는 않습니다.

이 예제는 키가 단일 값이지만 키가 다른 경우 요청에 여러 키-값 페어를 사용할 수 있음을 보여줍니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:::instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": [ "preprod", "production" ], "aws:RequestTag/team": [ "engineering" ] } } } }

aws:ResourceAccount

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

이 키를 사용하여 요청된 리소스 소유자의 AWS 계정 ID를 정책의 리소스 계정과 비교합니다. 그런 다음 리소스를 소유한 계정을 기반으로 해당 리소스에 대한 액세스를 허용하거나 거부할 수 있습니다.

  • 가용성 - 이 키는 항상 대다수 서비스 작업의 요청 컨텍스트에 포함됩니다. 다음 작업은 이 키를 지원하지 않습니다.

    • Amazon Elastic Block Store – 모든 작업

    • Amazon EC2

      • ec2:CopyFpgaImage

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge - 모든 작업

    • Amazon WorkSpaces

      • workspaces:CopyWorkspaceImage

      • workspaces:DescribeWorkspaceImages

  • 값 유형 - 단일 값

이 키는 요청에서 평가된 리소스가 있는 계정의 AWS 계정 ID와 같습니다.

계정에 있는 대부분의 리소스에 대해 ARN에는 해당 리소스의 소유자 계정 ID가 포함되어 있습니다. Amazon S3 버킷과 같은 특정 리소스의 경우 리소스 ARN에 계정 ID가 포함되지 않습니다. 다음 두 예제는 ARN에 계정 ID가 있는 리소스와 계정 ID가 없는 Amazon S3 ARN의 차이점을 보여줍니다.

  • arn:aws:iam::123456789012:role/AWSExampleRole - 계정 123456789012 내에서 생성되고 소유된 IAM 역할.

  • arn:aws:s3:::DOC-EXAMPLE-BUCKET2- 계정 111122223333 내에서 생성되고 소유된 Amazon S3 버킷, ARN에 표시되지 않음

AWS 콘솔, API 또는 CLI를 사용하여 모든 리소스와 해당 ARN 찾기

리소스 소유자의 계정 ID를 기반으로 리소스에 대한 권한을 거부하는 정책을 작성합니다. 예를 들어, 다음 아이덴티티 기반 정책은 리소스가 지정된 계정에 속하지 않는 경우 지정된 리소스에 대한 액세스를 거부합니다.

이 정책을 사용하려면 기울임꼴 자리 표시자 텍스트를 계정 정보로 바꿉니다.

중요

이 정책은 어떤 작업도 허용하지 않습니다. 대신 이는 나열된 계정에 속하지 않는 문에 나열된 모든 리소스에 대한 액세스를 명시적으로 거부하는 Deny 효과를 사용합니다. 이 정책을 특정 리소스에 대한 액세스를 허용하는 다른 정책과 함께 사용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyInteractionWithResourcesNotInSpecificAccount", "Action": "service:*", "Effect": "Deny", "Resource": [ "arn:partition:service:region:account:*" ], "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "account" ] } } } ] }

이 정책은 지정된 AWS 계정이 리소스를 소유하지 않는 한 특정 AWS 서비스의 모든 리소스에 대한 액세스를 거부합니다.

참고

일부 AWS 서비스은(는) 다른 AWS 계정에서 호스팅되는 AWS 소유 리소스에 액세스해야 합니다. 아이덴티티 기반 정책에서 aws:ResourceAccount를 사용하면 이러한 리소스에 대한 아이덴티티의 액세스 가능성에 영향을 있을 수 있습니다.

AWS Data Exchange, CloudFormation 등의 특정 AWS 서비스는 정상적인 작업을 위해 AWS 계정 외부의 리소스에 대한 액세스에 의존합니다. 정책에서 aws:ResourceAccount 요소를 사용하는 경우 해당 서비스에 대한 예외를 생성하는 추가 문을 포함합니다. 다음 예제 정책은 서비스 소유 리소스에 대한 예외를 정의하면서 리소스 계정을 기반으로 액세스를 거부하는 방법을 보여줍니다.

이러한 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 설명서를 참조하세요.

aws:ResourceOrgID

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

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

  • 가용성 - 이 키는 리소스를 소유한 계정이 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 이 전역 조건 키는 다음 작업을 지원하지 않습니다.

    • Amazon Elastic Block Store – 모든 작업

    • Amazon EC2

      • ec2:CopyFpgaImage

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge - 모든 작업

    • Amazon WorkSpaces

      • workspaces:CopyWorkspaceImage

      • workspaces:DescribeWorkspaceImages

  • 값 유형 - 단일 값

이 전역 키는 지정된 요청에 대한 리소스 조직 ID를 반환합니다. 이를 통해 아이덴티티 기반 정책Resource 요소에 지정된 조직의 모든 리소스에 적용되는 규칙을 생성할 수 있습니다. 조건 요소에서 조직 ID를 지정할 수 있습니다. 계정을 추가하고 제거할 때 aws:ResourceOrgID 키가 포함된 정책에 올바른 계정이 자동으로 포함되므로 수동으로 업데이트할 필요가 없습니다.

예를 들어, 다음 정책은 Amazon S3 리소스가 요청하는 보안 주체와 동일한 조직에 속하지 않는 한 보안 주체가 policy-genius-dev 리소스에 객체를 추가하지 못하도록 합니다.

중요

이 정책은 어떤 작업도 허용하지 않습니다. 대신 이는 나열된 계정에 속하지 않는 문에 나열된 모든 리소스에 대한 액세스를 명시적으로 거부하는 Deny 효과를 사용합니다. 이 정책을 특정 리소스에 대한 액세스를 허용하는 다른 정책과 함께 사용합니다.

{ "Version": "2012-10-17", "Statement": { "Sid": "DenyPutObjectToS3ResourcesOutsideMyOrganization", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:partition:s3:::policy-genius-dev/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } }
참고

일부 AWS 서비스은(는) 다른 AWS 계정에서 호스팅되는 AWS 소유 리소스에 액세스해야 합니다. 아이덴티티 기반 정책에서 aws:ResourceOrgID를 사용하면 이러한 리소스에 대한 아이덴티티의 액세스 가능성에 영향을 있을 수 있습니다.

AWS Data Exchange, CloudFormation 등의 특정 AWS 서비스는 정상적인 작업을 위해 AWS 계정 외부의 리소스에 대한 액세스에 의존합니다. 정책에서 aws:ResourceOrgID 키를 사용하는 경우 해당 서비스에 대한 예외를 생성하는 추가 문을 포함합니다. 다음 예제 정책은 서비스 소유 리소스에 대한 예외를 정의하면서 리소스 계정을 기반으로 액세스를 거부하는 방법을 보여줍니다. 유사한 정책을 만들어 서비스 소유 리소스를 고려하면서 aws:ResourceOrgID 키를 사용하여 조직 내 리소스에 대한 액세스를 제한할 수 있습니다.

이러한 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 설명서를 참조하세요.

다음 비디오에서 aws:ResourceOrgID 조건 키를 정책에서 사용하는 방법에 대해 자세히 알아보세요.

aws:ResourceOrgPaths

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

이 키를 사용하여 액세스한 리소스의 AWS Organizations 경로를 정책의 경로와 비교합니다. 정책에서 이 조건 키는 리소스가 AWS Organizations의 지정된 조직 루트 또는 조직 단위(OU) 내의 계정 멤버에게 속하도록 합니다. AWS Organizations 경로는 조직 엔터티 구조의 텍스트 표현입니다. 경로 사용 및 이해에 대한 자세한 내용을 알아보려면 AWS Organizations 엔터티 경로 이해 섹션을 참조하세요.

  • 가용성 - 이 키는 리소스를 소유한 계정이 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 이 전역 조건 키는 다음 작업을 지원하지 않습니다.

    • Amazon Elastic Block Store – 모든 작업

    • Amazon EC2

      • ec2:CopyFpgaImage

      • ec2:CopyImage

      • ec2:CopySnapshot

      • ec2:CreateTransitGatewayPeeringAttachment

      • ec2:CreateVolume

      • ec2:CreateVpcPeeringConnection

    • Amazon EventBridge - 모든 작업

    • Amazon WorkSpaces

      • workspaces:CopyWorkspaceImage

      • workspaces:DescribeWorkspaceImages

  • 값 유형 - 다중 값

aws:ResourceOrgPaths는 다중 값 조건 키입니다. 다중 값 키에는 하나 이상의 값이 목록 형식으로 포함됩니다. 결과는 논리적 OR입니다. 이 키를 사용할 때 StringLike 조건 연산자와 함께 ForAnyValue 또는 ForAllValues를 사용해 연산자를 설정해야 합니다. 단일 키에 대해 여러 값을 포함하는 정책의 경우 조건을 배열(예: ("Key":["Value1", "Value2"]))처럼 대괄호로 묶어야 합니다. 단일 값이 있는 경우에도 이 대괄호를 포함해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 다수의 키와 값 사용 섹션을 참조하세요.

예를 들어, 다음 조건은 o-a1b2c3d4e5 조직에 속한 리소스에 대해 True를 반환합니다. 와일드카드를 포함할 때는 StringLike 조건 연산자를 사용해야 합니다.

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

다음 조건은 OU ou-ab12-11111111 또는 하위 OU에 연결된 계정이 소유한 리소스에 대해 True를 반환합니다.

"Condition": { "ForAnyValue:StringLike" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*"] }}

다음 조건은 하위 OU가 아닌 OU ou-ab12-22222222에 직접 연결된 계정이 소유한 리소스에 대해 True를 반환합니다. 다음 예제에서는 StringEquals 조건 연산자를 사용하여 와일드카드 일치가 아닌 OU에 대한 정확한 일치 요구 사항을 지정합니다.

"Condition": { "ForAnyValue:StringEquals" : { "aws:ResourceOrgPaths":["o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"] }}
참고

일부 AWS 서비스은(는) 다른 AWS 계정에서 호스팅되는 AWS 소유 리소스에 액세스해야 합니다. 아이덴티티 기반 정책에서 aws:ResourceOrgPaths를 사용하면 이러한 리소스에 대한 아이덴티티의 액세스 가능성에 영향을 있을 수 있습니다.

AWS Data Exchange, CloudFormation 등의 특정 AWS 서비스는 정상적인 작업을 위해 AWS 계정 외부의 리소스에 대한 액세스에 의존합니다. 정책에서 aws:ResourceOrgPaths 키를 사용하는 경우 해당 서비스에 대한 예외를 생성하는 추가 문을 포함합니다. 다음 예제 정책은 서비스 소유 리소스에 대한 예외를 정의하면서 리소스 계정을 기반으로 액세스를 거부하는 방법을 보여줍니다. 유사한 정책을 만들어 서비스 소유 리소스를 고려하면서 aws:ResourceOrgPaths 키를 사용하여 조직 단위(OU) 내 리소스에 대한 액세스를 제한할 수 있습니다.

이러한 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 설명서를 참조하세요.

aws:ResourceTag/tag-key

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

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

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

  • 값 유형 - 단일 값

이 컨텍스트 키는 "aws:ResourceTag/tag-key":"tag-value" 형식으로, 여기서 tag-keytag-value는 한 쌍의 태그 키와 값입니다. 태그 키와 값은 대/소문자를 구분하지 않습니다. 따라서 정책의 조건 요소에서 "aws:ResourceTag/TagKey1": "Value1" 지정을 완료한 경우 조건은 이름이 TagKey1 또는 tagkey1인 리소스 태그 키와 일치하지만 두 가지 모두와 일치하지는 않습니다.

aws:ResourceTag 키를 사용하여 IAM 리소스에 대한 액세스를 제어하는 예는 AWS 리소스에 대한 액세스 제어 섹션을 참조하세요.

aws:ResourceTag 키를 사용하여 다른 AWS 리소스에 대한 액세스를 제어하는 예는 태그를 사용한 AWS 리소스 액세스 제어 섹션을 참조하세요.

속성 기반 액세스 제어(ABAC)에 aws:ResourceTag 조건 키를 사용하는 방법에 대한 자습서는 IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의 섹션을 참조하세요.

aws:SecureTransport

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

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

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

  • 값 유형 - 단일 값

aws:SourceAccount

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

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

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

  • 값 유형 - 단일 값

이 조건 키를 사용하여 AWS 서비스가 서비스간 트랜잭션 중에 혼동된 대리자로 사용되는 것을 방지합니다. 이 조건 키의 값을 요청에 있는 리소스의 계정으로 설정합니다. 예를 들어, Amazon S3 버킷 업데이트가 Amazon SNS 주제 게시물을 트리거하면 Amazon S3 서비스에서 sns:Publish API 작업을 호출합니다. sns:Publish 작업을 허용하는 정책에서 조건 키의 값을 Amazon S3 버킷의 계정 ID로 설정합니다. 이러한 조건 키가 권장되는 방법 및 시기에 대한 자세한 내용은 사용하시는 AWS 서비스의 설명서를 참조하세요.

aws:SourceArn

ARN 연산자문자열 연산자와 함께 작동합니다. AWS은(는) ARN을 비교할 때 문자열 연산자 대신 ARN 연산자를 사용하는 것이 좋습니다.

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

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

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

  • 값 유형 - 단일 값

이 조건 키를 사용하여 AWS 서비스가 서비스간 트랜잭션 중에 혼동된 대리자로 사용되는 것을 방지합니다. 이 조건 키의 값을 요청에 있는 리소스의 ARN으로 설정합니다. 예를 들어, Amazon S3 버킷 업데이트가 Amazon SNS 주제 게시물을 트리거하면 Amazon S3 서비스에서 sns:Publish API 작업을 호출합니다. sns:Publish 작업을 허용하는 정책에서 조건 키의 값을 Amazon S3 버킷의 ARN으로 설정합니다. 이러한 조건 키가 권장되는 방법 및 시기에 대한 자세한 내용은 사용하시는 AWS 서비스의 설명서를 참조하세요.

aws:SourceIdentity

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

이 키를 사용하여 보안 주체가 설정한 소스 자격 증명과 정책에 지정한 소스 자격 증명을 비교합니다.

  • 가용성 - 이 키는 AWS STS assume-role CLI 명령 또는 AWS STS AssumeRole API 작업을 사용해 역할이 수임된 경우 소스 자격 증명이 설정된 후에 요청 컨텍스트에 포함됩니다.

  • 값 유형 - 단일 값

정책에 이 키를 사용하여, 역할을 수임할 때 소스 자격 증명을 설정한 보안 주체에 의해 AWS에서 작업을 허용할 수 있습니다. 역할의 지정된 소스 자격 증명이 AWS CloudTrail에 표시되는 활동. 이를 통해 관리자는 AWS의 역할로 누가 어떤 작업을 수행했는지 쉽게 확인할 수 있습니다.

sts:RoleSessionName과 달리 소스 자격 증명을 설정한 후에는 값을 변경할 수 없습니다. 이것은 역할에서 수행되는 모든 작업의 요청 컨텍스트에 있습니다. 세션 자격 증명을 사용하여 다른 역할을 수임하는 경우 값이 후속 역할 세션에 유지됩니다. 한 역할에서 다른 역할을 맡는 것을 역할 체인이라고 합니다.

AWS STS assume-role CLI 명령 또는 AWS STS AssumeRole API 작업을 사용해 역할을 수임하는 동안 보안 주체가 소스 자격 증명을 처음 설정할 때 sts:SourceIdentity 키가 요청에 표시됩니다. 소스 자격 증명 집합이 있는 역할 세션에서 수행된 모든 작업에 대한 요청에 aws:SourceIdentity 키가 표시됩니다.

CriticalRole에 대한 계정 111122223333의 다음 역할 신뢰 정책은 Saanvi 또는 Diego로 설정된 소스 자격 증명이 없는 보안 주체가 역할을 수임하는 것을 방지하는 aws:SourceIdentity에 대한 조건을 포함합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRoleIfSourceIdentity", "Effect": "Allow", "Principal": {"AWS": " arn:aws:iam::123456789012:role/CriticalRole"}, "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Condition": { "StringLike": { "aws:SourceIdentity": ["Saanvi","Diego"] } } } ] }

소스 자격 증명 정보에 대한 자세한 내용은 위임된 역할로 수행한 작업 모니터링 및 제어 섹션을 참조하세요.

aws:SourceIp

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

이 키를 사용하여 요청자의 IP 주소를 정책에서 지정한 IP 주소와 비교합니다. aws:SourceIp 조건 키는 퍼블릭 IP 주소 범위에만 사용할 수 있습니다.

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

  • 값 유형 - 단일 값

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

예를 들어 다음 정책을 IAM 사용자에게 연결할 수 있습니다. 이 정책은 사용자가 지정된 IP 주소에서 호출을 수행하는 경우 객체를 DOC-EXAMPLE-BUCKET3 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:::DOC-EXAMPLE-BUCKET3/*", "Condition": { "Bool": {"aws:ViaAWSService": "false"}, "IpAddress": {"aws:SourceIp": "203.0.113.0"} } }, { "Sid": "ServicePutObject", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "Bool": {"aws:ViaAWSService": "true"} } } ] }

요청이 Amazon VPC 엔드포인트를 사용하는 호스트로부터 오는 경우, aws:SourceIp 키를 사용할 수 없습니다. 대신에 aws:VpcSourceIp와 같은 VPC 전용 키를 사용해야 합니다. VPC 엔드포인트 사용에 대한 자세한 내용을 알아보려면 AWS PrivateLink 가이드VPC 엔드포인트 및 VPC 엔드포인트 서비스에 대한 ID 및 액세스 관리를 참조하세요.

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 요청에는 이 키가 존재하지 않습니다.

  • 값 유형 - 단일 값

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

aws:UserAgent

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

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

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

  • 값 유형 - 단일 값

주의

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

aws:userid

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

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

  • 가용성 - 이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.

  • 값 유형 - 단일 값

aws:username

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

이 키를 사용하여 요청자의 사용자 이름을 정책에서 지정한 사용자 이름과 비교합니다. 다른 보안 주체에 대한 정보가 표시되는 방법에 대한 자세한 내용은 보안 주체 지정 섹션을 참조하세요. principal 키 값의 구체적인 예제를 보려면 보안 주체 키 값을(를) 참조하세요.

  • 가용성 - 이 키는 항상 IAM 사용자의 요청 컨텍스트에 포함됩니다. 익명 요청 및 AWS 계정루트 사용자 또는 IAM 역할에서 생성된 요청에는 이 키가 포함되지 않습니다. IAM Identity Center 보안 인증을 사용하여 수행된 요청에는 컨텍스트에 이 키가 포함되지 않습니다. IAM Identity Center 사용자에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 AWS의 액세스 제어에 IAM Identity Center 아이덴티티 스토어의 미리 정의된 속성 사용에서 identitystore:UserId를 참조하세요. IAM Identity Center 사용자는 AWS 계정 또는 클라우드 애플리케이션에 대한 액세스 권한이 필요한 인력의 사용자입니다.

  • 값 유형 - 단일 값

aws:ViaAWSService

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

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

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

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

  • 값 유형 - 단일 값

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

aws:VpcSourceIp

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

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

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

  • 값 유형 - 단일 값

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

기타 교차 서비스 조건 키

글로벌 조건 키는 aws: 접두사가 있는 조건 키입니다. 개별 서비스에서 자체 조건 키를 생성할 수 있습니다. 이러한 서비스별 조건 키에는 서비스 이름과 일치하는 접두사(예: iam: 또는 sts:)가 포함됩니다.

서비스는 다른 서비스의 요청 컨텍스트에서 사용할 수 있는 서비스별 키를 생성할 수 있습니다. 이러한 키는 여러 서비스에서 사용할 수 있지만 글로벌 조건 키는 아닙니다. 예를 들어 AWS STS는 SAML 기반 연동 조건 키를 지원합니다. 이러한 키는 SAML을 사용하여 연동된 사용자가 다른 서비스에서 AWS 작업을 수행할 때 사용될 수 있습니다. 다른 예로는 identitystore:UserIdec2:SourceInstanceArn이 있습니다.

서비스에 대한 서비스별 조건 키를 보려면 AWS 서비스에 대한 작업, 리소스 및 조건 키를 참조하고 키를 보려는 서비스를 선택합니다.