

# IAM JSON 정책 참조
<a name="reference_policies"></a>

이 섹션에서는 IAM에서 JSON 정책의 자세한 구문과 설명, 요소의 예, 변수, 평가 로직을 설명합니다. 더 일반적인 내용은 [JSON 정책 개요](access_policies.md#access_policies-json) 섹션을 참조하세요.

본 참조는 다음 섹션을 포함합니다:
+  [IAM JSON 정책 요소 참조](reference_policies_elements.md) - 정책을 생성할 때 사용할 수 있는 요소에 대해 자세히 알아봅니다. 더 많은 정책 예제를 보면서 조건, 지원되는 데이터 유형, 다양한 서비스에서 사용되는 방법을 살펴봅니다.
+ [정책 평가 로직](reference_policies_evaluation-logic.md) - 이 섹션에서는 AWS 요청, 그 요청이 인증되는 방식 및 AWS가 정책을 사용하여 리소스에 대한 액세스를 결정하는 방식을 기술합니다.
+ [IAM JSON 정책 언어의 문법](reference_policies_grammar.md) - 이 섹션은 IAM에서 정책 생성에 사용되는 언어에 대한 공식 구문을 설명합니다.
+ [직무에 관한 AWS 관리형 정책](access_policies_job-functions.md) - 이 단원에서는 IT 업계의 일반적인 직무와 직접 매핑되는 모든 AWS 관리형 정책이 나열됩니다. 이러한 정책을 사용하여 특정 직무 담당자에게 기대되는 작업 수행에 필요한 권한을 부여할 수 있습니다. 이러한 정책은 다수의 서비스에 대한 권한을 단일 정책으로 통합합니다.
+ [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md) - 이 섹션에는 IAM 정책에서 권한을 제한하는 데 사용할 수 있는 모든 AWS 전역 조건 키 목록이 포함되어 있습니다.
+ [IAM 및 AWS STS 조건 컨텍스트 키](reference_policies_iam-condition-keys.md) - 이 섹션에는 IAM 정책에서 권한을 제한하는 데 사용할 수 있는 모든 IAM 및 AWS STS 조건 키 목록이 포함되어 있습니다.
+ [AWS 서비스에 대한 작업, 리소스 및 조건 키](reference_policies_actions-resources-contextkeys.html) - 이 섹션에는 IAM 정책에서 권한으로 사용할 수 있는 모든 AWS API 작업을 나열합니다. 또한 요청을 추가로 미세 조정하는 데 사용할 수 있는 서비스별 조건 키도 포함되어 있습니다.

# IAM JSON 정책 요소 참조
<a name="reference_policies_elements"></a>

JSON 정책 문서는 여러 요소로 구성됩니다. 여기에 나열되는 요소들은 정책에서 사용되는 일반적인 순서를 따릅니다. 요소 순서는 중요하지 않습니다.예를 들어 `Resource` 요소는 `Action` 요소 앞에 올 수 있습니다. 또한 정책에서 `Condition` 요소는 지정하지 않아도 됩니다. JSON 정책 문서의 일반적인 구조와 목적에 대해 자세히 알아보려면 [JSON 정책 개요](access_policies.md#access_policies-json)를 참조하세요.

일부 JSON 정책 요소는 함께 사용할 수 없습니다. 즉, 둘 다 사용하는 정책을 생성할 수 없습니다. 예를 들어 동일한 정책 문에서 `Action`과 `NotAction` 둘 다 사용할 수 없습니다. 함께 사용할 수 없는 다른 쌍에는 `Principal`/`NotPrincipal` 및 `Resource`/`NotResource`가 있습니다.

정책 세부 정보는 서비스에서 유효한 작업이나 추가되는 리소스 유형 등에 따라 각 서비스마다 차이가 있습니다. 따라서 특정 서비스에 맞는 정책을 작성할 때는 해당 서비스의 정책 예제를 살펴보는 것이 좋습니다. IAM을 지원하는 모든 서비스 목록을 비롯해 각 서비스의 IAM 및 정책 설명서 링크는 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md) 섹션을 참조하세요.

 JSON 정책을 생성하거나 편집할 때 IAM은 효과적인 정책을 생성하는 데 도움이 되는 정책 검증을 수행할 수 있습니다. IAM은 JSON 구문 오류를 식별하는 반면, IAM Access Analyzer는 정책을 더욱 구체화하는 데 도움이 되는 권장 사항과 함께 추가 정책 검사를 제공합니다. 정책 검증에 대한 자세한 내용은 [IAM 정책 검증](access_policies_policy-validator.md) 섹션을 참조하세요. IAM Access Analyzer 정책 검사기 및 실행 가능한 권장 사항에 대한 자세한 내용은 [IAM Access Analyzer 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.

**Topics**
+ [Version](reference_policies_elements_version.md)
+ [Id](reference_policies_elements_id.md)
+ [Statement](reference_policies_elements_statement.md)
+ [Sid](reference_policies_elements_sid.md)
+ [Effect](reference_policies_elements_effect.md)
+ [Principal](reference_policies_elements_principal.md)
+ [NotPrincipal](reference_policies_elements_notprincipal.md)
+ [Action](reference_policies_elements_action.md)
+ [NotAction](reference_policies_elements_notaction.md)
+ [Resource](reference_policies_elements_resource.md)
+ [NotResource](reference_policies_elements_notresource.md)
+ [Condition](reference_policies_elements_condition.md)
+ [변수와 태그](reference_policies_variables.md)
+ [지원되는 데이터 유형](reference_policies_elements_datatypes.md)

# IAM JSON 정책 요소: Version
<a name="reference_policies_elements_version"></a>

**동음이의어 참고**  
`Version` JSON 정책 요소는 *정책 버전*과 다릅니다. `Version` 정책 요소는 정책 내에서 사용되며 정책 언어의 버전을 정의합니다. 반면에 정책 버전은 IAM에서 고객 관리형 정책을 변경할 때 생성됩니다. 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 생성합니다. 관리형 정책에서 사용할 수 있는 여러 버전 지원에 대한 정보를 찾고 있다면 [IAM 정책 버전 관리](access_policies_managed-versioning.md) 섹션을 참조하세요.

`Version` 정책 요소는 정책의 처리에 사용할 언어 구문 규칙을 지정합니다. 사용 가능한 모든 정책 기능을 사용하려면 모든 정책의 `Statement` 요소 **외부**에 다음 `Version` 요소를 포함시킵니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

IAM은 다음과 같은 `Version` 요소 값을 지원합니다.
+ `2012-10-17`. 이 값은 정책 언어의 현재 버전이며, 항상 `Version` 요소를 포함하여 `2012-10-17`로 설정해야 합니다. 그렇지 않으면 이 버전에 채택되지 않은 [정책 변수](reference_policies_variables.md) 등의 기능을 사용할 수 없습니다.
+ `2008-10-17`. 이 값은 이전 정책 언어 버전입니다. 따라서 오래된 기존 정책에서는 이 버전이 표시될 수도 있습니다. 새로운 정책에서는 또는 기존 정책을 업데이트하는 경우에는 이 버전을 사용하지 마세요. 정책 변수와 같은 최신 기능이 사용자의 정책에서 작동하지 않습니다. 예를 들어 `${aws:username}` 같은 변수가 정책에서 변수로 인식되지 않고 리터럴 문자열로 취급됩니다.

# IAM JSON 정책 요소: Id
<a name="reference_policies_elements_id"></a>

`Id` 요소는 정책 식별자(옵션)를 지정합니다. 다른 서비스의 ID 사용 방법과는 다릅니다. ID는 리소스 기반 정책에서는 허용되지만 ID 기반 정책에서는 사용할 수 없습니다.

`ID` 요소를 설정할 수 있는 서비스의 경우에는 UUID(GUID)를 값으로 사용하거나, UUID를 ID 일부로 사용하여 고유성을 확보하는 것이 좋습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "cd3ad3d9-2776-4ef1-a904-4c229d1642ee",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

**참고**  
AWS 서비스(예: Amazon SQS 또는 Amazon SNS 등) 중에는 이 요소가 필요하거나 고유성 요건을 따로 요구하는 경우도 있습니다. 정책 작성에 대한 서비스별 정보는 이용하려는 서비스의 설명서를 참조하세요.

# IAM JSON 정책 요소: Statement
<a name="reference_policies_elements_statement"></a>

`Statement` 요소는 정책의 주요 요소로서 필수입니다. `Statement` 요소는 단일 문 또는 개별 문의 배열을 포함할 수 있습니다. 각 개별 문 블록은 중괄호 \$1 \$1로 묶어야 합니다. 여러 문의 경우 배열은 대괄호 [ ]로 묶어야 합니다.

```
"Statement": [{...},{...},{...}]
```

다음은 단일 `Statement` 요소에서 3개의 문이 하나의 배열을 이루는 정책을 나타낸 예제입니다 (이 정책에서는 Amazon S3 콘솔에서 자신의 'home 폴더'에 액세스할 수 있습니다). 정책에는 `aws:username` 변수가 추가되었습니다. 이 변수는 정책 평가 중 요청이 있으면 사용자 이름으로 바뀝니다. 자세한 내용은 [소개](reference_policies_variables.md#policy-vars-intro) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {"StringLike": {"s3:prefix": [
        "",
        "home/",
        "home/${aws:username}/"
      ]}}
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}",
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*"
      ]
    }
  ]
}
```

------

# IAM JSON 정책 요소: Sid
<a name="reference_policies_elements_sid"></a>

정책 문에 입력되는 식별자(선택 사항)로 `Sid`(문 ID)를 제공할 수 있습니다. `Sid` 값은 문 배열에서 각 문에 할당할 수 있습니다. `Sid` 값을 정책 문에 대한 설명으로 사용할 수 있습니다. SQS나 SNS처럼 `ID` 요소를 지정할 수 있는 서비스에서는 `Sid` 값이 정책 문서 ID의 하위 ID나 마찬가지입니다. IAM에서 `Sid` 값은 JSON 정책 내 고유성이 보장되어야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExampleStatementID",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}
```

------

`Sid` 요소는 ASCII 대문자(A\$1Z), 소문자(a\$1z) 및 숫자(0\$19)를 지원합니다.

IAM에서 `Sid`는 IAM API에 노출되지 않습니다. 따라서 이 ID를 근거로 특정 문을 가져올 수는 없습니다.

**참고**  
AWS 서비스(예: Amazon SQS 또는 Amazon SNS 등) 중에는 이 요소가 필요하거나 고유성 요건을 따로 요구하는 경우도 있습니다. 정책 작성에 대한 서비스별 정보는 이용하려는 서비스의 설명서를 참조하세요.

# IAM JSON 정책 요소: Effect
<a name="reference_policies_elements_effect"></a>

`Effect` 요소는 필수로서, 문의 허용(allow) 또는 명시적 거부(explicit deny) 중 하나를 지정합니다. `Effect` 유효값은 `Allow` 및 `Deny`입니다. `Effect` 값은 대소문자를 구분합니다.

```
"Effect":"Allow"
```

기본적으로 리소스 액세스는 거부됩니다. 리소스 액세스를 허용하려면 `Effect` 요소를 `Allow`로 설정해야 합니다. 허용을 재정의하려면(예: 그 밖에 다른 방법으로 실행 중인 허용을 재정의하려면) `Effect` 요소를 `Deny`로 설정합니다. 자세한 내용은 [정책 평가 로직](reference_policies_evaluation-logic.md) 섹션을 참조하세요.

# AWS JSON 정책 요소: Principal
<a name="reference_policies_elements_principal"></a>

리소스 기반 JSON 정책의 `Principal` 요소를 사용하여 리소스에 대한 액세스가 허용되거나 거부되는 보안 주체를 지정합니다.

[리소스 기반 정책](access_policies_identity-vs-resource.md)의 `Principal` 요소를 사용해야 합니다. IAM을 비롯한 여러 서비스가 리소스 기반 정책을 지원합니다. IAM 리소스 기반 정책 유형은 역할 신뢰 정책입니다. IAM 역할에서 역할 신뢰 정책의 `Principal` 요소를 사용하여 역할을 수임할 수 있는 사용자를 지정합니다. 크로스 계정 액세스인 경우에는 신뢰할 수 있는 계정의 12자리 식별자를 지정합니다. 해당 신뢰 영역(신뢰할 수 있는 조직 또는 계정) 외의 계정 내 보안 주체가 역할을 수임하는 권한이 있는지 자세히 알고 싶다면, [IAM Access Analyzer란 무엇일까요?](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)를 참조하세요.

**참고**  
역할을 생성한 이후 계정을 "\$1"로 변경하여 모두가 이 역할을 수임하도록 할 수 있습니다. 이렇게 하는 경우 다른 방법(예: 특정 IP 주소로만 액세스를 제한하는 `Condition` 요소)을 통해 역할에 액세스할 수 있는 사용자를 제한하는 것이 좋습니다. 역할을 모두 액세스할 수 있는 상태로 두지 마세요.

리소스 기반 정책을 지원하는 리소스의 다른 예에는 Amazon S3 버킷 또는 AWS KMS key(이)가 포함됩니다.

자격 증명 기반 정책에서는 `Principal` 요소를 사용할 수 없습니다. 자격 증명 기반 정책은 IAM 자격 증명(사용자, 그룹 또는 역할)에 연결할 수 있는 권한 정책입니다. 이 경우, 보안 주체는 암시적으로 정책이 연결된 자격 증명입니다.

**Topics**
+ [보안 주체를 지정하는 방법](#Principal_specifying)
+ [AWS 계정 보안 주체](#principal-accounts)
+ [IAM 역할 보안 주체](#principal-roles)
+ [역할 세션 보안 주체](#principal-role-session)
+ [OIDC 페더레이션 보안 주체](#principal-federated-web-identity)
+ [SAML 페더레이션 보안 주체](#principal-saml)
+ [IAM 사용자 보안 주체](#principal-users)
+ [IAM Identity Center 보안 주체](#principal-identity-users)
+ [AWS STS 페더레이션 사용자 보안 주체](#sts-session-principals)
+ [AWS 서비스 보안 주체](#principal-services)
+ [옵트인 리전용 AWS 서비스 주체](#principal-services-in-opt-in-regions)
+ [모든 보안 주체](#principal-anonymous)
+ [추가 정보](#Principal_more-info)

## 보안 주체를 지정하는 방법
<a name="Principal_specifying"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 보안 주체를 지정합니다.

정책에서 다음 보안 주체를 지정할 수 있습니다.
+ AWS 계정 및 루트 사용자
+ IAM 역할
+ 역할 세션 
+ IAM 사용자
+ 페더레이션 사용자 보안 주체
+ AWS 서비스
+ 모든 보안 주체

그룹은 인증이 아니라 권한과 관련이 있고 보안 주체는 인증된 IAM 엔터티이기 때문에 정책(예: 리소스 기반 정책)에서 사용자 그룹을 보안 주체로 식별할 수 없습니다.

배열을 사용하여 다음 섹션에서 각 보안 주체 유형에 대해 둘 이상의 보안 주체를 지정할 수 있습니다. 배열은 하나 이상의 값을 갖습니다. 요소에 둘 이상의 보안 주체를 지정할 때는 각 보안 주체에 권한을 부여하십시오. 한 번에 하나의 보안 주체로 인증되기 때문에, 이것은 논리적 `OR`가 아닌 논리적 `AND`입니다. 값을 두 개 이상 포함하는 경우 배열의 각 항목을 대괄호(`[` 및 `]`) 및 쉼표로 구분합니다. 다음 예시 정책은 123456789012 계정 또는 555555555555 계정에 대한 권한을 정의합니다.

```
"Principal" : { 
"AWS": [ 
  "123456789012",
  "555555555555" 
  ]
}
```

**참고**  
보안 주체 이름이나 ARN의 일부를 나타내기 위해 와일드카드를 사용할 수 없습니다.

## AWS 계정 보안 주체
<a name="principal-accounts"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 AWS 계정 식별자를 지정할 수 있습니다. 이렇게 하면 계정에 권한을 위임합니다. 다른 계정에 대한 액세스를 허용하면 해당 계정의 관리자는 해당 계정의 자격 증명(IAM 사용자 또는 역할)에 대한 액세스 권한을 부여해야 합니다. AWS 계정을 지정하는 경우 계정 ARN(arn:aws:iam::*account-ID*:root)을 사용하거나 `"AWS":` 접두사와 그 뒤에 계정 ID가 따라오는 약식 형태를 사용할 수 있습니다.

예를 들어, 계정 ID `123456789012`의 경우 다음 방법 중 하나를 사용하여 `Principal` 요소에서 해당 계정을 지정할 수 있습니다.

```
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
```

```
"Principal": { "AWS": "123456789012" }
```

계정 ARN과 단축된 계정 ID도 같은 방식으로 작동합니다. 둘 다 계정에 권한을 위임합니다. `Principal` 요소에서 계정 ARN 사용해도 계정의 루트 사용자에게만 권한이 제한되지는 않습니다.

**참고**  
단축된 계정 ID를 포함하는 리소스 기반 정책을 저장하면 서비스에서 이를 보안 주체 ARN으로 변환할 수 있습니다. 이렇게 해도 정책의 기능은 변경되지 않습니다.

일부 AWS 서비스는 계정 보안 주체를 지정하기 위한 몇 가지 옵션을 추가로 지원합니다. 예를 들어 Amazon S3에서는 다음 형식을 사용하여 [정식 사용자 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingCanonicalId)를 지정할 수 있습니다.

```
"Principal": { "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be" }
```

또한 배열을 사용하여 둘 이상의 AWS 계정(또는 표준 사용자 ID)을 보안 주체로 지정할 수 있습니다. 예를 들어, 세 가지 방법 모두를 사용하여 보안 주체를 버킷 정책에 지정할 수 있습니다.

```
"Principal": { 
  "AWS": [
    "arn:aws:iam::123456789012:root",
    "999999999999"
  ],
  "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"
}
```

## IAM 역할 보안 주체
<a name="principal-roles"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 IAM 역할 보안 주체 ARN을 지정할 수 있습니다. IAM 역할은 자격 증명입니다. IAM에서 자격 증명은 권한을 할당할 수 있는 리소스입니다. 역할은 다른 인증된 자격 증명을 신뢰하여 해당 역할을 수임합니다. 여기에는 AWS의 보안 주체 또는 외부 자격 증명 공급자(IdP)가 포함됩니다. 보안 주체 또는 자격 증명이 역할을 맡으면 수임된 역할의 권한이 있는 임시 보안 자격 증명을 수신합니다. AWS에서 작업을 수행하기 위해 이러한 세션 자격 증명을 사용하면 *역할 세션 보안 주체*가 됩니다.

리소스 기반 정책에서 역할 보안 주체를 지정하는 경우 보안 주체에 대한 유효 사용 권한은 해당 역할에 대한 사용 권한을 제한하는 모든 정책 유형에 의해 제한됩니다. 여기에는 세션 정책과 권한 경계가 포함됩니다. 역할 세션에 대한 유효한 사용 권한을 평가하는 방법에 대한 자세한 내용은 [정책 평가 로직](reference_policies_evaluation-logic.md)을(를) 참조하세요.

`Principal` 요소에서 ARN 역할을 지정하려면 다음 형식을 사용하십시오.

```
"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:role/role-name" }
```

**중요**  
역할 신뢰 정책의 `Principal` 요소에 특정 IAM 역할을 가리키는 ARN이 포함되어 있으면, 정책을 저장할 때 해당 ARN이 해당 역할의 고유 보안 주체 ID로 변환됩니다. 그러면 누군가가 해당 역할을 제거하고 다시 만들어 본인의 권한을 에스컬레이션할 위험을 완화할 수 있습니다. IAM은 신뢰 정책이 표시될 때 역할 ARN로 역변환을 다시 사용하기 때문에 일반적으로 콘솔에서는 이 ID가 표시되지 않습니다. 그러나 해당 역할을 삭제하면 관계가 깨집니다. 역할을 다시 만들더라도 해당 정책이 더 이상 적용되지 않습니다. 새 역할의 새 보안 주체 ID가 신뢰 정책에 저장된 ID와 일치하지 않기 때문입니다. 이 경우 AWS가 더 이상 유효한 ARN에 다시 매핑할 수 없기 때문에 보안 주체 ID가 리소스 기반 정책에 나타납니다. 결과적으로 신뢰 정책의 `Principal` 요소에서 참조된 역할을 삭제하고 다시 만드는 경우, 보안 주체 ID를 올바른 ARN으로 바꾸도록 정책에서 역할을 편집해야 합니다. 정책을 저장하면 ARN이 다시 해당 역할의 새로운 보안 주체 ID로 변환됩니다. 자세한 내용은 [Understanding AWS's Handling of Deleted IAM roles in Policies](https://repost.aws/articles/ARSqFcxvd7R9u-gcFD9nmA5g/understanding-aws-s-handling-of-deleted-iam-roles-in-policies)를 참조하세요.

또는 리소스 기반 정책에서 역할 보안 주체를 보안 주체로 지정하거나 `aws:PrincipalArn` 조건 키를 사용하는 [광범위한 권한 정책을 생성](#principal-anonymous)할 수 있습니다. 이 키를 사용하면 역할 세션 보안 주체에게 결과 세션의 ARN이 아니라 수임된 역할의 ARN을 기반으로 권한이 부여됩니다. 이는 AWS은(는) 조건 키 ARN을 ID로 변환하지 않기 때문입니다. 역할 ARN에 부여된 권한은 역할을 삭제한 다음 동일한 이름으로 새 역할을 생성하면 유지됩니다. 자격 증명 기반 정책에 명시적 거부가 포함되지 않는 한, 권한 경계 또는 세션 정책과 같은 자격 증명 기반 정책 유형은 `Principal` 요소에서 와일드카드(\$1)와 함께 `aws:PrincipalArn` 조건 키를 사용하여 부여한 권한을 제한하지 않습니다.

## 역할 세션 보안 주체
<a name="principal-role-session"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 역할 세션을 지정할 수 있습니다. 보안 주체 또는 자격 증명이 역할을 맡으면 수임된 역할의 권한이 있는 임시 보안 자격 증명을 수신합니다. AWS에서 작업을 수행하기 위해 이러한 세션 자격 증명을 사용하면 *역할 세션 보안 주체*가 됩니다.

역할 세션 보안 주체에 사용하는 형식은 역할을 수임하는 데 사용된 AWS STS 작업에 따라 다릅니다.

**중요**  
AWS는 가능한 한 역할 세션 위탁자 대신 [IAM 역할 위탁자](#principal-roles)를 정책에 사용할 것을 권장합니다. 필요한 경우 `Condition` 문과 조건 키를 사용하여 액세스 범위를 더 좁힐 수 있습니다.

`Principal` 요소에서 역할 세션 위탁자 ARN을 지정하려면 다음 형식을 사용하세요.

```
"Principal": { "AWS": "arn:aws:sts::AWS-account-ID:assumed-role/role-name/role-session-name" }
```

또한 관리자는 역할 세션이 발행되는 방식을 제어하는 프로세스를 설계할 수 있습니다. 예를 들어 예측 가능한 세션 이름을 생성하는 원클릭 솔루션을 사용자에게 제공할 수 있습니다. 관리자가 이를 수행하는 경우, 정책 또는 조건 키에서 역할 세션 보안 주체를 사용할 수 있습니다. 그렇지 않으면 역할 ARN을 `aws:PrincipalArn` 조건 키의 보안 주체로 지정할 수 있습니다. 역할을 보안 주체로 지정하는 방법에 따라 결과 세션에 대한 유효한 권한이 변경될 수 있습니다. 자세한 내용은 [IAM 역할 보안 주체](#principal-roles) 섹션을 참조하세요.

## OIDC 페더레이션 보안 주체
<a name="principal-federated-web-identity"></a>

OIDC 페더레이션 보안 주체는 OpenID 제공업체(OP)라고도 하는 OIDC 준수 IDP에서 JSON 웹 토큰(JWT)으로 AWS STS `AssumeRoleWithWebIdentity` API를 직접적으로 호출하여 임시 AWS 자격 증명을 요청할 때 사용되는 보안 주체입니다. OIDC 페더레이션 보안 주체는 AWS 계정의 OIDC IDP 또는 Login with Amazon, Google, Facebook, [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) 등 4개의 기본 제공 ID 제공업체를 나타낼 수 있습니다.

OIDC IDP에서 JWT를 발급받은 사용자, 워크로드 또는 시스템은 JWT를 사용하여 `AssumeRoleWithWebIdentity`를 직접적으로 호출하면 JWT를 발급한 OIDC IDP를 신뢰하도록 구성된 IAM 역할의 임시 AWS 보안 자격 증명을 요청할 수 있습니다. JWT는 [AWS STS에 나열된 요구 사항](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html#manage-oidc-provider-prerequisites)을 충족하는 한 다른 방법으로 제공되는 ID 토큰, 액세스 토큰 또는 JWT 토큰일 수 있습니다. 자세한 내용은 [일반적인 시나리오](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_federation_common_scenarios.html) 및 [OIDC 공급자를 통한 자격 증명 요청](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity)을 참조하세요.

역할 신뢰 정책에서 이 보안 주체 유형을 사용하여 `AssumeRoleWIthWebIdentity`에 있는 OIDC IDP 또는 기본 제공 IDP 4개 중 1개를 사용하여 AWS 계정를 직접적으로 호출할 수 있는 권한을 허용하거나 거부합니다. 역할 신뢰 정책의 `Principal` 요소에서 OIDC 페더레이션 보안 주체 ARN을 지정하려면 기본 제공 OIDC IDP에 다음 4가지 형식 중 하나를 사용합니다.

```
"Principal": { "Federated": "cognito-identity.amazonaws.com" }
```

```
"Principal": { "Federated": "www.amazon.com" }
```

```
"Principal": { "Federated": "graph.facebook.com" }
```

```
"Principal": { "Federated": "accounts.google.com" }
```

GitHub와 같이 계정에 추가하는 OIDC 제공업체를 사용하는 경우 역할의 신뢰 정책에서 제공업체의 ARN을 지정합니다. 본 구성을 사용하면 사용자 지정 자격 증명 공급자를 통해 인증된 사용자에 대해 액세스를 제어하는 IAM 정책을 작성할 수 있습니다.

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:oidc-provider/full-OIDC-identity-provider-URL" }
```

예를 들어 GitHub이 신뢰할 수 있는 웹 ID 제공업체인 경우 역할 신뢰 정책의 `Principal` 요소에 있는 OIDC 역할 세션 ARN은 다음 형식을 사용합니다.

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:oidc-provider/tokens.actions.githubusercontent.com" }
```

자세한 내용은 [Amazon Web Services에서 OpenID Connect 구성](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)을 참조하세요.

OIDC 페더레이션 보안 주체는 역할 신뢰 정책 이외의 정책 유형에서는 지원되지 않습니다.

## SAML 페더레이션 보안 주체
<a name="principal-saml"></a>

*SAML 페더레이션 보안 주체*는 AWS STS `AssumeRoleWithSAML` API를 직접적으로 호출하여 SAML 어설션으로 임시 AWS 자격 증명을 요청할 때 사용되는 보안 주체입니다. SAML ID 제공업체(IdP)를 사용하여 로그인한 다음 이 작업을 사용하여 IAM 역할을 수임할 수 있습니다. `AssumeRoleWithWebIdentity`와 마찬가지로 `AssumeRoleWithSAML`도 인증에 AWS 자격 증명이 필요하지 않습니다. 대신 사용자는 먼저 SAML ID 제공업체에 인증한 다음 SAML 어설션을 사용하여 `AssumeRoleWithSAML` API를 직접적으로 호출하거나 AWS 로그인/SAML 페이지로 리디렉션되어 AWS Management Console에 로그인합니다. 이 작업을 사용하여 역할을 수임할 수 있는 보안 주체에 대한 자세한 내용은 [AWS STS 자격 증명 비교](id_credentials_sts-comparison.md)을(를) 참조하세요.

역할 신뢰 정책에서 이 보안 주체 유형을 사용하여 신뢰할 수 있는 SAML ID 제공업체를 기반으로 권한을 허용하거나 거부합니다. `Principal` 요소에서 SAML 아이덴티티 역할 세션 ARN을 지정하려면 다음 형식을 사용하세요.

```
"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:saml-provider/provider-name" }
```

## IAM 사용자 보안 주체
<a name="principal-users"></a>

리소스 기반 정책의 `Principal` 요소 또는 보안 주체를 지원하는 조건 키에서 IAM 사용자를 지정할 수 있습니다.

**참고**  
`Principal` 요소에서 [*Amazon 리소스 이름*(ARN)](reference_identifiers.md#identifiers-arns)의 사용자 이름 부분은 대/소문자를 구분합니다.

```
"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:user/user-name" }
```

```
"Principal": {
  "AWS": [
    "arn:aws:iam::AWS-account-ID:user/user-name-1", 
    "arn:aws:iam::AWS-account-ID:user/user-name-2"
  ]
}
```

`Principal` 요소로 사용자를 지정할 때는 "모든 사용자"의 의미로 와일드카드(`*`)를 사용할 수 없습니다. 보안 주체는 항상 특정 사용자가 되어야 하기 때문입니다.

**중요**  
역할 신뢰 정책의 `Principal` 요소에 특정 IAM 사용자를 가리키는 ARN이 포함되어 있으면, IAM은 정책을 저장할 때 ARN을 사용자의 고유한 보안 주체 ID로 변환합니다. 그러면 누군가가 해당 사용자를 제거하고 다시 만들어 본인의 권한을 에스컬레이션할 위험을 완화할 수 있습니다. 일반적으로 콘솔에서는 이 ID가 보이지 않습니다. 신뢰 정책이 표시될 때 해당 사용자의 ARN으로 다시 역변환되기 때문입니다. 그러나 해당 사용자를 삭제하면 관계가 깨집니다. 사용자를 다시 생성해도 정책은 더 이상 적용되지 않습니다. 새 사용자의 새 보안 주체 ID가 신뢰 정책에 저장된 ID와 일치하지 않기 때문입니다. 이 경우 AWS가 더 이상 유효한 ARN에 다시 매핑할 수 없기 때문에 보안 주체 ID가 리소스 기반 정책에 나타납니다. 결과적으로 신뢰 정책의 `Principal` 요소에서 참조된 사용자를 삭제하고 다시 만드는 경우, 역할을 편집하여 현재의 잘못된 보안 주체 ID를 올바른 ARN으로 바꿔야 합니다. IAM은 정책을 저장하면 ARN이 다시 해당 사용자의 새로운 보안 주체 ID로 변환됩니다.

## IAM Identity Center 보안 주체
<a name="principal-identity-users"></a>

IAM Identity Center에서는 리소스 기반 정책의 보안 주체를 AWS 계정 보안 주체로 정의해야 합니다. 액세스를 지정하려면 조건 블록에 있는 권한 세트의 역할 ARN을 참조합니다. 자세한 내용은 *IAM Identity Center 사용 설명서*에서 [리소스 정책, Amazon EKS 및 AWS KMS의 권한 세트 참조](https://docs.aws.amazon.com/singlesignon/latest/userguide/referencingpermissionsets.html)를 참조하세요.

## AWS STS 페더레이션 사용자 보안 주체
<a name="sts-session-principals"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 *페더레이션 사용자 세션*을 지정할 수 있습니다.

**중요**  
AWS는 AWS STS 페더레이션 사용자 세션의 사용을 제한할 것을 권장합니다. 대신 [IAM 역할](IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)을 사용하세요.

AWS STS 페더레이션 사용자 보안 주체는 수명이 긴 IAM 자격 증명이라고 하는 `GetFederationToken` 작업을 통해 생성됩니다. 페더레이션 사용자 권한은 `GetFederationToken`을 직접적으로 호출한 보안 주체와 `GetFederationToken` API에 파라미터로 전달된 세션 정책의 교집합입니다.

AWS에서 IAM 사용자 또는 AWS 계정 루트 사용자는 장기 액세스 키를 사용하여 인증할 수 있습니다. 이 작업을 사용하여 페더레이션할 수 있는 보안 주체에 대한 자세한 내용은 [AWS STS 자격 증명 비교](id_credentials_sts-comparison.md)을(를) 참조하세요.
+ **IAM 페더레이션 사용자** - IAM 사용자는 해당 IAM 사용자에 대한 페더레이션 사용자 세션을 생성하는 `GetFederationToken` 작업을 사용하여 페더레이션합니다.
+ **페더레이션 루트 사용자** - 루트 사용자는 해당 루트 사용자에 대한 페더레이션 사용자 세션을 생성하는 `GetFederationToken` 작업을 사용하여 페더레이션합니다.

IAM 사용자 또는 루트 사용자가 이 작업을 사용하여 AWS STS에서 임시 자격 증명을 요청하면 임시 페더레이션 사용자 세션이 시작됩니다. 이 세션의 ARN은 페더레이션된 원래 자격 증명을 기반으로 합니다.

`Principal` 요소에서 페더레이션 사용자 세션 ARN을 지정하려면 다음 형식을 사용하십시오.

```
"Principal": { "AWS": "arn:aws:sts::AWS-account-ID:federated-user/user-name" }
```

## AWS 서비스 보안 주체
<a name="principal-services"></a>

보안 주체를 지원하는 리소스 기반 정책이나 조건 키의 `Principal` 요소에 있는 AWS 서비스를 지정할 수 있습니다. *서비스 보안 주체*는 서비스의 식별자입니다.

AWS 서비스에서 위임할 수 있는 IAM 역할을 *[서비스 역할](id_roles.md#iam-term-service-role)*이라고 합니다. 서비스 역할에는 신뢰 정책이 포함되어 있어야 합니다. *신뢰 정책*은 역할을 수임할 수 있는 보안 주체를 정의하는 역할에 연결된 리소스 기반 정책입니다. 일부 서비스 역할에는 신뢰 정책이 미리 정의되어 있습니다. 그러나 신뢰 정책에 서비스 보안 주체를 지정해야 하는 경우도 있습니다. IAM 정책의 서비스 보안 주체는 `"Service": "*"`일 수 없습니다.

**중요**  
서비스 보안 주체의 식별자에는 서비스 이름이 포함되어 있고 일반적으로 다음과 같은 형식을 갖습니다.  
`service-name.amazonaws.com`

서비스 보안 주체는 서비스가 정의합니다. 일부 서비스에 대한 서비스 보안 주체는 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md)를 열고 **서비스 연결 역할** 열에서 서비스에 **예**가 선택되어 있는지 확인한 다음 **예** 링크를 열어 해당 서비스에 대한 서비스 연결 역할 문서를 확인할 수 있습니다. **서비스 보안 주체**를 보려면 서비스 연결 역할 권한 섹션을 참조하세요.

다음 예제는 서비스 역할에 연결할 수 있는 정책을 보여줍니다. 이 정책은 Amazon ECS 및 Elastic Load Balancing의 두 서비스가 역할을 수임할 수 있도록 합니다. 그러면 서비스가 해당 역할에 할당된 권한 정책에서 부여한 모든 작업을 수행할 수 있습니다(표시되지 않음). 여러 서비스 보안 주체를 지정할 때 `Service` 요소를 두 개 지정하면 안 됩니다. 하나만 지정할 수 있습니다. 대신 여러 서비스 보안 주체의 배열을 하나의 `Service` 요소의 값으로 사용합니다.

```
"Principal": {
    "Service": [
        "ecs.amazonaws.com",
        "elasticloadbalancing.amazonaws.com"
   ]
}
```

## 옵트인 리전용 AWS 서비스 주체
<a name="principal-services-in-opt-in-regions"></a>

여러 AWS 리전에서 리소스를 시작할 수 있으며 이러한 리전 중 일부는 반드시 옵트인해야 합니다. 옵트인해야 하는 전체 지역 목록은 *AWS 일반 참조* 가이드의 [AWS 리전 관리](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)를 참조하세요.

옵트인 리전의 AWS 서비스가 동일한 리전 내에서 요청을 보내는 경우 서비스 주체 이름 형식은 해당 서비스 주체 이름의 리전별이 아닌 버전으로 식별됩니다.

`service-name.amazonaws.com`

옵트인 리전의 AWS 서비스가 다른 리전에 교차 리전 요청을 보내면 서비스 주체 이름 형식이 해당 서비스 주체 이름의 리전별 버전으로 식별됩니다.

`service-name.{region}.amazonaws.com`

예를 들어 Amazon SNS 주제가 리전 `ap-southeast-1`에 있고 Amazon S3 버킷이 옵트인 리전 `ap-east-1`에 있다고 가정해 보겠습니다. SNS 주제에 메시지를 게시하도록 S3 버킷 알림을 구성하려고 합니다. S3 서비스에서 SNS 주제에 메시지를 게시할 수 있도록 하려면 해당 주제의 리소스 기반 액세스 정책을 통해 S3 서비스 주체에게 `sns:Publish` 권한을 부여해야 합니다.

주제 액세스 정책에서 S3 서비스 주체 `s3.amazonaws.com`의 리전별이 아닌 버전을 지정하는 경우 버킷에서 주제로의 `sns:Publish` 요청이 실패합니다. 다음 예제에서는 SNS 주제 액세스 정책의 `Principal` 정책 요소에 리전별이 아닌 S3 서비스 주체를 지정합니다.

```
"Principal": { "Service": "s3.amazonaws.com" }
```

버킷은 옵트인 리전에 있고 요청은 동일한 리전 외부에서 이루어지므로 S3 서비스 주체는 리전별 서비스 주체 이름 `s3.ap-east-1.amazonaws.com`으로 표시됩니다. 옵트인 리전의 AWS 서비스가 다른 리전에 요청할 때는 리전별 서비스 주체 이름을 사용해야 합니다. 리전별 서비스 주체 이름을 지정한 후 버킷이 다른 리전에 있는 SNS 주제에 `sns:Publish` 요청을 하면 요청이 성공합니다. 다음 예제에서는 SNS 주제 액세스 정책의 `Principal` 정책 요소에 리전별 S3 서비스 주체를 지정합니다.

```
"Principal": { "Service": "s3.ap-east-1.amazonaws.com" }
```

옵트인 리전에서 다른 리전으로의 리전 간 요청에 대한 리소스 정책 또는 서비스 주체 기반 허용 목록은 리전별 서비스 주체 이름을 지정한 경우에만 성공합니다.

**참고**  
IAM 역할 신뢰 정책의 경우 리전별이 아닌 서비스 사용자 이름을 사용하는 것이 좋습니다. IAM 리소스는 글로벌 리소스이므로 모든 리전에서 동일한 역할을 사용할 수 있습니다.

## 모든 보안 주체
<a name="principal-anonymous"></a>

와일드카드(\$1)를 사용하여 리소스 기반 정책의 `Principal` 요소 또는 보안 주체를 지원하는 조건 키에 모든 보안 주체를 지정할 수 있습니다. [리소스 기반 정책](access_policies.md#policies_resource-based)은 권한을 *부여*하고 [조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)는 정책 문의 조건을 제한하는 데 사용됩니다.

**중요**  
퍼블릭 또는 익명 액세스 권한을 부여하려는 경우가 아니면 `Allow` 효과가 있는 리소스 기반 정책의 `Principal` 요소에 와일드카드(\$1)를 사용하지 않는 것이 좋습니다. 그렇지 않으면 `Principal` 요소에서 의도한 보안 주체, 서비스 또는 AWS 계정을 지정한 다음 `Condition` 요소에서 액세스를 추가로 제한하세요. 이는 특히 다른 보안 주체가 계정의 보안 주체가 될 수 있도록 허용하기 때문에 IAM 역할 신뢰 정책에 특히 해당됩니다.

리소스 기반 정책의 경우 `Allow` 효과와 함께 와일드카드(\$1)를 사용하면 익명 사용자(퍼블릭 액세스)를 포함한 모든 사용자에게 액세스 권한이 부여됩니다. 계정 내의 IAM 사용자 및 역할 보안 주체의 경우 다른 권한이 필요하지 않습니다. 다른 계정의 보안 주체의 경우 계정에 리소스에 액세스할 수 있는 자격 증명 기반 권한도 있어야 합니다. 이를 [크로스 계정 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)라고 합니다.

익명 사용자의 경우 다음 요소는 동일합니다.

```
"Principal": "*"
```

```
"Principal" : { "AWS" : "*" }
```

보안 주체 이름이나 ARN의 일부를 나타내기 위해 와일드카드를 사용할 수 없습니다.

다음 예제는 [AWS JSON 정책 요소: NotPrincipal](reference_policies_elements_notprincipal.md) 대신 `Condition` 요소에 지정된 보안 주체를 *제외*한 모든 보안 주체를 명시적으로 거부하는 데 사용할 수 있는 리소스 기반 정책을 보여줍니다. 이 정책은 [Amazon S3 버킷에 추가](https://docs.aws.amazon.com//AmazonS3/latest/userguide/add-bucket-policy.html)해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UsePrincipalArnInsteadOfNotPrincipalWithDeny",
      "Effect": "Deny",
      "Action": "s3:*",
      "Principal": "*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*",
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:user/user-name"
        }
      }
    }
  ]
}
```

------

## 추가 정보
<a name="Principal_more-info"></a>

자세한 내용은 다음을 참조하세요.
+ *Amazon Simple Storage Service 사용 설명서*의 [버킷 정책 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)
+ *Amazon Simple Notification Service 개발자 안내서*의 [Amazon SNS에 대한 정책 예제](https://docs.aws.amazon.com/sns/latest/dg/UsingIAMwithSNS.html#ExamplePolicies_SNS)
+ *Amazon Simple Queue Service Developer Guide*(Amazon Simple Storage Service 개발자 안내서)의 [Amazon SQS policy examples](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSExamples.html)(Amazon SQS 정책 예제)
+ *AWS Key Management Service 개발자 안내서*의 [키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)
+ **AWS 일반 참조의 [계정 식별자](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)
+ [OIDC 페더레이션](id_roles_providers_oidc.md)

# AWS JSON 정책 요소: NotPrincipal
<a name="reference_policies_elements_notprincipal"></a>

`NotPrincipal` 요소는 `"Effect":"Deny"`를 사용하여 `NotPrincipal` 요소에 지정된 위탁자를 ***제외한*** 모든 위탁자의 액세스를 거부합니다. 보안 주체는 IAM 사용자, AWS STS 페더레이션 사용자 보안 주체, IAM 역할, 수임한 역할 세션, AWS 계정, AWS 서비스 또는 기타 보안 주체 유형일 수 있습니다. 위탁자에 대한 자세한 내용은 [AWS JSON 정책 요소: Principal](reference_policies_elements_principal.md) 섹션을 참조하세요.

`NotPrincipal`은 `"Effect":"Deny"`와 함께 사용해야 합니다. `"Effect":"Allow"`와 함께 사용은 지원되지 않습니다.

**중요**  
보안 및 권한 부여 전략의 일환으로 새로운 리소스 기반 정책에 `NotPrincipal`을 사용하는 것은 권장되지 않습니다. `NotPrincipal`을 사용할 경우 여러 정책 유형의 영향을 해결하기 어려울 수 있습니다. 대신 ARN 조건 연산자와 함께 `aws:PrincipalArn` 컨텍스트 키를 사용하는 것이 좋습니다.

## 중요 사항
<a name="notprincipal-key-points"></a>
+ `NotPrincipal` 요소는 VPC 엔드포인트를 포함한 일부 AWS 서비스의 리소스 기반 정책에서 지원됩니다. 리소스 기반 정책은 리소스에 직접 삽입할 수 있는 정책입니다. IAM ID 기반 정책 또는 IAM 역할 신뢰 정책에는 `NotPrincipal` 요소를 사용할 수 없습니다.
+ 권한 경계 정책이 연결된 IAM 사용자 또는 역할에는 `Deny` 효과를 포함하는 `NotPrincipal` 정책 요소가 있는 리소스 기반 정책 문을 사용하지 않도록 합니다. `Deny` 효과를 포함하는 `NotPrincipal` 요소는 `NotPrincipal` 요소에 지정된 값에 관계없이 권한 경계 정책이 연결된 IAM 보안 주체를 항상 거부합니다. 이로 인해 원래 리소스에 액세스할 수 있는 일부 IAM 사용자 또는 역할이 해당 리소스에 더 이상 액세스할 수 없습니다. `NotPrincipal` 요소 대신 액세스를 제한하기 위해 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN) 조건 연산자를 [`aws:PrincipalArn`](reference_policies_condition-keys.md#condition-keys-principalarn) 컨텍스트 키와 함께 사용하도록 리소스 기반 정책 문을 변경하는 것이 좋습니다. 권한 경계에 대한 자세한 내용은 [IAM 엔터티의 권한 범위](access_policies_boundaries.md) 섹션을 참조하세요.
+ `NotPrincipal`을 사용할 때 거부되지 않은 위탁자의 계정 ARN도 지정해야 합니다. 지정하지 않으면 정책에서 해당 보안 주체를 포함하는 전체 계정에 대한 액세스가 거부될 수 있습니다. 정책에 포함하는 서비스에 따라 AWS에서 먼저 계정을 검증한 후 사용자를 검증할 수 있습니다. 위임된 역할 사용자(역할을 사용하는 사람)를 평가할 때 AWS는 먼저 계정을 검증한 후 위임된 역할 사용자를 평가합니다. 위임된 역할 사용자는 그 역할을 위임 받을 때 지정된 역할 세션 이름으로 식별할 수 있습니다. 따라서 사용자 계정의 ARN을 명시적으로 포함시키거나, 역할의 ARN과 해당 역할을 포함하는 계정의 ARN을 모두 포함시킬 것을 권장합니다.
+ `NotPrincipal` 요소는 서비스 제어 정책(SCP)과 리소스 제어 정책(RCP)에서 지원되지 않습니다.

## `NotPrincipal` 요소의 대안
<a name="notprincipal-alternatives"></a>

AWS에서 액세스 제어를 관리할 때 지정한 하나 이상의 위탁자를 제외한 리소스에 대한 모든 위탁자 액세스를 명시적으로 거부해야 하는 시나리오가 있을 수 있습니다. AWS는 보다 정확한 제어와 쉬운 문제 해결을 위해 글로벌 조건 컨텍스트 키와 함께 거부 문을 사용할 것을 권장합니다. 다음 예제에서는 `StringNotEquals` 또는 `ArnNotEquals`와 같은 조건 연산자를 사용하여 조건 요소에 지정된 위탁자를 제외한 모든 위탁자에 대한 액세스를 거부하는 대체 접근 방식을 보여줍니다.

## IAM 역할을 사용하는 예제 시나리오
<a name="notprincipal-alternative-role"></a>

거부 문과 함께 리소스 기반 정책을 사용하여 조건 요소에 지정된 역할을 제외한 모든 IAM 역할이 리소스에 액세스하거나 조작하지 못하도록 할 수 있습니다. 이러한 접근 방식은 명시적 거부가 항상 모든 허용 문보다 우선한다는 AWS 보안 원칙을 따르며 AWS 인프라 전반에서 최소 권한 원칙을 유지하는 데 도움이 됩니다.

`NotPrincipal`을 사용하는 대신 [`ArnNotEquals`](reference_policies_elements_condition_operators.md#Conditions_ARN)와 같은 조건 연산자와 전역 조건 컨텍스트 키와 함께 거부 문을 사용하여 IAM 역할이 리소스에 액세스할 수 있도록 명시적으로 허용하는 것이 좋습니다. 다음 예제에서는 [aws:PrincipalArn](reference_policies_condition-keys.md#condition-keys-principalarn)을 사용하여 `read-only-role` 역할이 `Bucket_Account_Audit` 폴더의 Amazon S3 버킷에 액세스할 수 있도록 명시적으로 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyCrossAuditAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::Bucket_Account_Audit",
        "arn:aws:s3:::Bucket_Account_Audit/*"
      ],
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:role/read-only-role"
        }
      }
    }
  ]
}
```

------

## 서비스 위탁자를 사용하는 예제 시나리오
<a name="notprincipal-alternative-service-principal"></a>

거부 문을 사용하여 `Condition` 요소에 지정된 위탁자를 제외한 모든 서비스 위탁자가 리소스에 액세스하거나 리소스를 조작하지 못하도록 할 수 있습니다. 이 접근 방식은 세분화된 액세스 제어를 구현하거나 AWS 환경의 다양한 서비스와 애플리케이션 간에 보안 경계를 설정해야 하는 경우에 특히 유용합니다.

`NotPrincipal`을 사용하는 대신 전역 조건 컨텍스트 키가 있는 거부 문과 [`StringNotEquals`](reference_policies_elements_condition_operators.md#Conditions_String)와 같은 조건 연산자를 사용하여 리소스에 대한 서비스 위탁자 액세스를 명시적으로 허용하는 것이 좋습니다. 다음 예제에서는 `aws:PrincipalServiceName`을 사용하여 AWS CodeBuild 서비스 위탁자가 `BUCKETNAME` 폴더의 Amazon S3 버킷에 액세스할 수 있도록 명시적으로 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyNotCodeBuildAccess",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::BUCKETNAME",
        "arn:aws:s3:::BUCKETNAME/*"
      ],
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:PrincipalServiceName": "codebuild.amazonaws.com"
        }
      }
    }
  ]
}
```

------

# IAM JSON 정책 요소: Action
<a name="reference_policies_elements_action"></a>

`Action` 요소는 특정 작업의 허용 또는 거부 여부를 지정합니다. 문에는 `Action` 또는 `NotAction` 요소가 반드시 추가되어야 합니다. AWS 서비스마다 실행할 수 있는 작업을 설명한 목록이 있습니다. 예를 들어 Amazon S3 작업 목록은 *Amazon Simple Storage Service 사용 설명서*의 [정책에 권한 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html)에서, Amazon EC2 작업 목록은 [Amazon EC2 API 참조](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-apis.html)에서, 그리고 AWS Identity and Access Management 작업 목록은 [IAM API 참조](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html)에서 확인할 수 있습니다. 그 밖에 다른 서비스의 작업 목록은 해당 서비스의 API 참조 [설명서](https://aws.amazon.com/documentation)를 참조하세요.

또한 AWS는 정책 관리 워크플로의 자동화를 간소화하기 위해 서비스 참조 정보를 JSON 형식으로 제공합니다. 서비스 참조 정보를 사용하면 기계가 읽을 수 있는 파일에서 AWS 서비스에 걸쳐 사용 가능한 작업, 리소스, 조건 키에 액세스할 수 있습니다. 자세한 내용은 서비스 권한 부여 참조의 [프로그래밍 방식의 액세스를 위해 간소화된 AWS 서비스 정보](https://docs.aws.amazon.com/service-authorization/latest/reference/service-reference.html)를 참조하세요.

서비스 네임스페이스를 작업 접두사(`iam`, `ec2`, `sqs`, `sns`, `s3` 등)로 사용하고 허용 또는 거부할 작업 이름을 사용하여 값을 지정합니다. 이름은 서비스에서 지원되는 작업과 일치해야 합니다. 접두사와 작업 이름은 대/소문자를 구분하지 않습니다. 예를 들어 `iam:ListAccessKeys`는 `IAM:listaccesskeys`와 동일합니다. 다음은 각 서비스의 `Action` 요소를 나타낸 예제입니다.

**Amazon SQS 작업**

```
"Action": "sqs:SendMessage"
```

**Amazon EC2 작업**

```
"Action": "ec2:StartInstances"
```

**IAM 작업**

```
"Action": "iam:ChangePassword"
```

**Amazon S3 작업**

```
"Action": "s3:GetObject"
```

`Action` 요소는 다수의 값을 지정할 수도 있습니다.

```
"Action": [ "sqs:SendMessage", "sqs:ReceiveMessage", "ec2:StartInstances", "iam:ChangePassword", "s3:GetObject" ]
```

다중 문자 일치 와일드카드(`*`) 및 단일 문자 일치 와일드카드(`?`)를 사용하여 특정 AWS 제품에서 제공하는 모든 작업에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어, 다음 `Action` 요소는 모든 S3 작업에 적용됩니다.

```
"Action": "s3:*"
```

와일드카드(`*` 또는 `?`)는 작업 이름에도 사용할 수 있습니다. 예를 들어 다음 `Action` 요소는 `AccessKey`, `CreateAccessKey`, `DeleteAccessKey`, `ListAccessKeys` 등 문자열 `UpdateAccessKey`를 포함하는 IAM 작업 모두에게 적용됩니다.

```
"Action": "iam:*AccessKey*"
```

일부 서비스에서는 사용 가능한 작업을 제한할 수도 있습니다. 예를 들어 Amazon SQS에서는 가능한 모든 Amazon SQS 작업의 하위 집합만 사용할 수 있습니다. 이 경우 와일드카드(`*`)는 대기열 전체를 제어하지 못하고, 공유한 작업의 하위 집합만 제어가 가능합니다. 자세한 내용은 *Amazon Simple Queue Service 개발자 안내서*의 [권한 이해](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html#PermissionTypes)를 참조하세요.

# IAM JSON 정책 요소: NotAction
<a name="reference_policies_elements_notaction"></a>

`NotAction`은 지정된 작업의 목록을 *제외*한 모든 작업과 명시적으로 일치하는 고급 정책 요소입니다. `NotAction`을 사용하면 일치하는 작업의 긴 목록을 포함하는 대신 일치하지 않는 몇몇 작업만 나열함으로써 정책을 줄일 수 있습니다. `NotAction`에 지정된 작업은 정책 설명의 `Allow` 또는 `Deny` 효과의 영향을 받지 않습니다. 따라서 나열되지 않은 모든 해당 작업 또는 서비스가 `Allow` 효과를 사용할 경우 허용되고, `Deny`를 사용하려는 경우에는 나열되지 않은 작업 또는 서비스가 거부됩니다. `NotAction`을 `Resource` 요소와 함께 사용할 경우 정책 범위를 제공해야 합니다. 이에 따라 AWS는 어떤 작업이나 서비스를 적용할 수 있는지 결정합니다. 자세한 내용은 다음 예제 정책을 참조하세요.

**NotAction 및 Allow** 

설명문에서 `NotAction` 요소를 `"Effect": "Allow"`와 함께 사용하여 AWS 서비스에서 `NotAction`에 지정된 작업을 제외한 모든 작업에 대한 액세스 권한을 제공할 수 있습니다. 이 요소와 `Resource` 요소를 함께 사용하여 정책에 대한 범위를 제공하고 지정한 리소스에서 수행할 수 있는 작업으로만 작업을 제한할 수 있습니다.

다음 예제에서는 버킷 삭제를 *제외하고* 사용자가 S3 리소스에서 수행할 수 있는 모든 Amazon S3 작업에 액세스할 수 있도록 허용합니다. 이 정책은 또한 다른 서비스에서의 작업을 허용하지 않습니다. 다른 서비스 작업은 S3 리소스에 적용되지 않기 때문입니다.

```
"Effect": "Allow",
"NotAction": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::*",
```

때로는 다수의 작업에 액세스하도록 허용해야 할 수 있습니다. `NotAction` 요소를 사용하여 효과적으로 설명문을 반전시켜 작업 목록을 단축시킬 수 있습니다. 예를 들어 AWS 서비스는 종류가 다양하므로 사용자에게 IAM 작업에 대한 액세스를 제외한 모든 것을 허용하는 정책을 생성하기를 원할 수 있습니다.

다음 예제는 사용자가 IAM을 제외한 모든 AWS 서비스에서 모든 작업에 액세스하도록 허용합니다.

```
"Effect": "Allow",
"NotAction": "iam:*",
"Resource": "*"
```

동일한 설명문에서 또는 동일한 정책의 다른 설명문에서 `NotAction` 요소와 `"Effect": "Allow"`를 사용할 경우 주의하세요. `NotAction`은 명시적으로 나열되지 않거나 특정 리소스에 적용되지 않는 모든 서비스 및 작업과 일치하므로 사용자에게 의도한 것보다 많은 권한을 부여하는 결과를 가져올 수 있습니다.

**NotAction 및 Deny**

설명문에서 `NotAction` 요소를 `"Effect": "Deny"`와 함께 사용하여 `NotAction` 요소에 지정된 작업을 제외하고 모든 나열된 리소스에 대한 액세스를 거부할 수 있습니다. 이 조합은 나열된 항목을 허용하는 것이 아니라 나열되지 않은 작업을 명시적으로 거부합니다. 그러므로 허용하려는 작업은 별도로 허용해야 합니다.

다음의 조건부 예제는 사용자가 MFA를 사용하여 로그인하지 않은 경우 비 IAM 작업에 대한 액세스를 거부합니다. 사용자가 MFA를 사용하여 로그인한 경우에는 `"Condition"` 테스트에 실패하며 최종 `"Deny"` 문은 효과가 없습니다. 단, 이 정책은 사용자에게 작업에 대한 액세스 권한을 부여하는 것이 아니라 IAM 작업을 제외한 다른 모든 작업을 명시적으로 거부할 뿐입니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyAllUsersNotUsingMFA",
        "Effect": "Deny",
        "NotAction": "iam:*",
        "Resource": "*",
        "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
    }]
}
```

------

특정 서비스의 작업을 제외하고 특정 리전 외부의 작업에 대한 액세스를 거부하는 정책의 예는 [AWS: 요청된 리전에 따라 AWS에 대한 액세스를 거부](reference_policies_examples_aws_deny-requested-region.md) 섹션을 참조하세요.

# IAM JSON 정책 요소: Resource
<a name="reference_policies_elements_resource"></a>

IAM 정책 문에서 `Resource` 요소는 문의 적용 대상인 객체를 정의합니다. 문에는 `Resource`또는 `NotResource`요소가 반드시 추가되어야 합니다.

Amazon 리소스 이름(ARN)을 사용하여 리소스를 지정합니다. ARN의 형식은 참조하는 AWS 서비스 및 참조하는 특정 리소스에 따라 다릅니다. ARN 형식은 다양하지만 항상 ARN을 사용하여 리소스를 식별합니다. ARL의 형식에 대한 자세한 내용은 [IAM ARN](reference_identifiers.md#identifiers-arns) 섹션을 참조하세요. 리소스 지정 방법에 대한 자세한 내용은 문을 작성하려는 리소스의 서비스 설명서를 참조하세요.

**참고**  
일부 AWS 서비스에서는 개별 리소스에 대한 작업 지정을 허용하지 않습니다. 이러한 경우 `Action` 또는 `NotAction` 요소에 나열한 모든 작업이 해당 서비스의 모든 리소스에 적용됩니다. 이 경우 `Resource` 요소에 와일드카드 문자(`*`)를 사용합니다.

다음은 특정 Amazon SQS 대기열을 나타낸 예시입니다.

```
"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"
```

다음은 AWS 계정에서 `Bob`이라는 이름의 IAM 사용자를 나타내는 예제입니다.

**참고**  
`Resource` 요소에서 IAM 사용자 이름은 대/소문자를 구분합니다.

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"
```

## 리소스 ARN에서 와일드카드 사용
<a name="reference_policies_elements_resource_wildcards"></a>

개별 ARN 세그먼트(콜론으로 구분된 부분) 내에서 와일드카드 문자(`*` 및 `?`)를 사용하여 다음을 표현할 수 있습니다.
+ 모든 문자 조합(`*`)
+ 모든 단일 문자(`?`)

각 세그먼트에 여러 개의 `*` 또는 `?` 문자를 사용할 수 있습니다. `*` 와일드카드가 리소스 ARN 세그먼트의 마지막 문자인 경우 콜론 경계를 넘어서 일치하도록 확장할 수 있습니다. 콜론으로 구분된 ARN 세그먼트 내에서 와일드카드(`*` 및 `?`)를 사용하는 것이 좋습니다.

**참고**  
AWS 제품을 식별하는 서비스 세그먼트에서는 와일드카드 문자를 사용할 수 없습니다. ARN 세그먼트에 대한 자세한 내용은 [Amazon 리소스 이름(ARN)으로 AWS 리소스를 식별합니다.](reference-arns.md) 섹션을 참조하세요.

다음은 경로가 `/accounting`인 IAM 사용자를 모두 나타낸 예시입니다.

```
"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"
```

다음은 특정 Amazon S3 버킷 내에 포함된 모든 항목을 나타낸 예시입니다.

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
```

별표(`*`) 문자는 확장하여 특정 서비스 네임스페이스 내에서 구분 기호로 나타날 수 있는 슬래시(`/`)와 같은 문자를 포함하여 세그먼트 내의 모든 항목을 바꿀 수 있습니다. 예를 들어, 모든 서비스에 동일한 와일드카드 확장 논리가 적용되는 다음 Amazon S3 ARN을 생각해 봅시다.

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*/test/*"
```

ARN의 와일드카드는 나열된 첫 번째 객체뿐만 아니라 버킷의 다음 모든 객체에 적용됩니다.

```
amzn-s3-demo-bucket/1/test/object.jpg
amzn-s3-demo-bucket/1/2/test/object.jpg
amzn-s3-demo-bucket/1/2/test/3/object.jpg 
amzn-s3-demo-bucket/1/2/3/test/4/object.jpg
amzn-s3-demo-bucket/1///test///object.jpg
amzn-s3-demo-bucket/1/test/.jpg
amzn-s3-demo-bucket//test/object.jpg
amzn-s3-demo-bucket/1/test/
```

이전 목록의 마지막 두 객체를 고려하세요. Amazon S3 객체 이름은 일반적인 구분 기호 슬래시(`/`) 문자로 시작하거나 끝낼 수 있습니다. `/` 문자는 구분 기호로 작동하지만 리소스 ARN 내에서 이 문자를 사용할 때는 특별한 의미가 없습니다. 다른 유효한 문자와 동일하게 처리됩니다. ARN이 다음 객체와 일치하지 않습니다.

```
amzn-s3-demo-bucket/1-test/object.jpg
amzn-s3-demo-bucket/test/object.jpg
amzn-s3-demo-bucket/1/2/test.jpg
```

## 여러 리소스 지정
<a name="reference_policies_elements_resource_multiple-resources"></a>

ARN 배열을 사용하여 `Resource` 요소에 여러 리소스를 지정할 수 있습니다. 다음은 DynamoDB 테이블을 두 개 나타낸 예시입니다.

```
"Resource": [
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
    "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]
```

## 리소스 ARN에서 정책 변수 사용
<a name="reference_policies_elements_resource_policy-variables"></a>

`Resource` 요소에서 ARN의 부분에 JSON [정책 변수](reference_policies_variables.md)를 사용하여 특정 리소스를 식별할 수 있습니다(ARN의 끝 부분에 사용). 예를 들어 `{aws:username}` 키를 리소스 ARN에 사용하여 현재 사용자의 이름을 리소스 이름에 추가해야 한다는 것을 나타낼 수 있습니다. 다음은 `{aws:username}` 요소에서 `Resource` 키를 사용하는 방법을 나타낸 예시입니다. 이 정책에서는 현재 사용자 이름과 일치하는 Amazon DynamoDB 테이블에 대한 액세스가 허용됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:*",
        "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/${aws:username}"
    }
}
```

------

JSON 정책 변수에 대한 자세한 내용은 [IAM 정책 요소: 변수 및 태그](reference_policies_variables.md) 섹션을 참조하세요.

# IAM JSON 정책 요소: NotResource
<a name="reference_policies_elements_notresource"></a>

`NotResource`는 지정된 리소스를 제외한 모든 리소스와 명시적으로 일치하는 고급 정책 요소입니다. `NotResource`를 사용하면 일치하는 리소스의 긴 목록을 포함하는 대신 일치하지 않는 몇몇 리소스만 나열함으로써 정책을 줄일 수 있습니다. 이는 단일 AWS 서비스 내에서 적용되는 정책에 특히 유용합니다.

예를 들어 `HRPayroll`라는 이름의 그룹이 있다고 가정하겠습니다. 그리고 `HRPayroll` 멤버는 `HRBucket` 버킷의 `Payroll` 폴더를 제외하고 모든 Amazon S3 리소스에 액세스할 수 없습니다. 다음 정책은 나열된 리소스 이외의 모든 Amazon S3 리소스에 대한 액세스를 거부합니다. 단, 이 정책은 사용자에게 리소스에 대한 액세스 권한을 부여하는 것이 아닙니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": "s3:*",
    "NotResource": [
      "arn:aws:s3:::HRBucket/Payroll",
      "arn:aws:s3:::HRBucket/Payroll/*"
    ]
  }
}
```

------

일반적으로 리소스에 대한 액세스를 명시적으로 거부하려면 `"Effect":"Deny"`를 사용하고 각 폴더를 개별적으로 나열하는 `Resource` 요소를 포함하는 정책을 작성합니다. 하지만 이때 사용자가 `HRBucket`에 폴더를 추가하거나 액세스하면 안 되는 Amazon S3에 리소스를 추가할 때마다 그 이름 역시 `Resource` 요소의 목록에 추가해야 합니다. 그렇지 않고 `NotResource` 요소를 사용할 때는 폴더 이름을 `NotResource` 요소에 추가하지 않더라도 사용자가 새 폴더에 대한 액세스 권한이 자동으로 거부됩니다.

`NotResource`를 사용할 때는 이 요소에 지정된 리소스가 제한되지 않는 *유일한* 리소스라는 점을 명심해야 합니다. 이렇게 하면 작업에 적용되는 모든 리소스가 제한됩니다. 위의 예에서 정책은 Amazon S3 작업에만 적용되므로 Amazon S3 리소스에만 영향을 미칩니다. `Action` 요소에도 Amazon EC2 작업이 포함되어 있으면 정책에서 `NotResource` 요소에 지정되지 않은 EC2 리소스에 대한 액세스를 거부합니다. 리소스의 ARN을 지정할 수 있는 서비스 작업에 대해 알아보려면 [AWS 서비스에 사용되는 작업, 리소스 및 조건 키](reference_policies_actions-resources-contextkeys.html)를 참조하세요.

## 다른 요소가 있는 NotResource
<a name="notresource-element-combinations"></a>

`"Effect": "Allow"`, `"Action": "*"` 및 `"NotResource": "arn:aws:s3:::HRBucket"` 요소를 함께 사용하면 **안 됩니다**. 이 문은 `HRBucket` S3 버킷을 제외한 모든 리소스에 대해 AWS의 모든 작업을 허용하므로 매우 위험합니다. 이렇게 하면 `HRBucket`에 액세스할 수 있는 정책을 사용자가 직접 추가할 수 있으므로 주의해야 합니다.

동일한 설명문에서 또는 동일한 정책의 다른 설명문에서 `NotResource` 요소와 `"Effect": "Allow"`를 사용할 경우 주의하세요. `NotResource`은 명시적으로 나열되지 않은 모든 서비스 및 작업을 허용하므로 사용자에게 의도한 것보다 많은 권한을 부여하는 결과를 가져올 수 있습니다. 동일한 설명문에서 `NotResource` 요소와 `"Effect": "Deny"`를 사용하면 명시적으로 나열되지 않은 서비스 및 리소스를 거부합니다.

# IAM JSON 정책 요소: Condition
<a name="reference_policies_elements_condition"></a>

`Condition` 요소(또는 `Condition` *블록*)를 사용하여 정책의 효력이 발생하는 시점에 대한 조건을 지정할 수 있습니다. `Condition` 요소는 옵션입니다. `Condition` 요소에서 [조건 연산자](reference_policies_elements_condition_operators.md)(같음, 보다 작음 등)를 사용하여 정책의 컨텍스트 키 및 값을 요청 컨텍스트의 키 및 값과 일치시키는 표현식을 작성합니다. 요청 컨텍스트에 대한 자세한 내용은 [요청 구성 요소](intro-structure.md#intro-structure-request) 섹션을 참조하세요.

```
"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}
```

정책 조건에서 지정하는 컨텍스트 키는 [전역 조건 컨텍스트 키](reference_policies_condition-keys.md) 또는 서비스별 컨텍스트 키일 수 있습니다. 전역 조건 컨텍스트 키에는 `aws:` 접두사가 있습니다. 서비스별 컨텍스트 키에는 서비스 접두사가 있습니다. 예를 들어, Amazon EC2를 사용하면 `ec2:InstanceType` 컨텍스트 키를 사용하여 해당 서비스에 고유한 조건을 작성할 수 있습니다. `iam:` 접두사가 있는 서비스별 IAM 컨텍스트 키를 보려면 [IAM 및 AWS STS 조건 컨텍스트 키](reference_policies_iam-condition-keys.md) 섹션을 참조하세요.

컨텍스트 키 **이름은 대/소문자를 구분하지 않습니다. 예를 들어 `aws:SourceIP` 컨텍스트 키를 포함시키는 것은 `AWS:SourceIp`에 대한 테스트와 동일합니다. 컨텍스트 키 **값의 대/소문자 구분은 사용하는 [조건 연산자](reference_policies_elements_condition_operators.md)에 따라 다릅니다. 예를 들어 다음 조건에는 `john`의 요청만 일치하도록 하는 `StringEquals` 연산자가 포함됩니다. 이름이 `John`인 사용자는 액세스가 거부됩니다.

```
"Condition" : { "StringEquals" : { "aws:username" : "john" }}
```

다음 조건은 [`StringEqualsIgnoreCase`](reference_policies_elements_condition_operators.md#Conditions_String) 연산자를 사용하여 이름이 `john` 또는 `John`인 사용자와 일치합니다.

```
"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "john" }}
```

일부 컨텍스트 키는 키 이름의 특정 부분을 지정하도록 허용하는 키 값 페어를 지원합니다. [`aws:RequestTag/tag-key`](reference_policies_condition-keys.md#condition-keys-requesttag) 컨텍스트 키, AWS KMS [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context) 및 여러 서비스에서 지원하는 [`ResourceTag/tag-key`](reference_policies_condition-keys.md#condition-keys-resourcetag) 컨텍스트 키가 그 예입니다.
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policy-structure.html#amazon-ec2-keys)와 같은 서비스에 대해 `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`](reference_policies_condition-keys.md#condition-keys-tagkeys) 컨텍스트 키를 사용하거나 AWS KMS 암호화 컨텍스트에 대해 [https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-encryption-context-keys) 사용을 통해 이를 적용할 수 있습니다.
+ 모든 조건 연산자의 목록과 각 연산자의 작동 방식에 대한 설명을 보려면 [조건 연산자](reference_policies_elements_condition_operators.md)를 참조하세요.
+ 달리 지정하지 않는 경우 모든 컨텍스트 키는 다수의 값을 가질 수 있습니다. 다수의 값을 가진 컨텍스트 키를 취급하는 방법에 대한 설명은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.
+ 전역에서 사용 가능한 모든 컨텍스트 키의 목록은 [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md) 섹션을 참조하세요.
+ 각 서비스에서 정의하는 조건 컨텍스트 키는 [AWS 서비스에 사용되는 작업, 리소스 및 조건 키](reference_policies_actions-resources-contextkeys.html)를 참조하세요.

## 요청 컨텍스트
<a name="AccessPolicyLanguage_RequestContext"></a>

[보안 주체](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal)가 AWS에 [요청](intro-structure.md#intro-structure-request)하면 AWS는 요청 정보를 요청 컨텍스트로 수집합니다. 요청 컨텍스트에는 위탁자, 리소스, 작업 및 기타 환경 속성에 대한 정보가 포함됩니다. 정책 평가는 정책의 속성과 요청에서 전송된 속성을 일치시켜 AWS에서 수행할 수 있는 작업을 평가하고 승인합니다.

JSON 정책의 `Condition` 요소를 사용하여 요청 컨텍스트에 대해 특정 컨텍스트 키를 테스트할 수 있습니다. 예를 들어, [사용자가 특정 날짜 범위 중에만 작업을 수행할 수 있도록](reference_policies_examples_aws-dates.md) [aws:CurrentTime](reference_policies_condition-keys.md#condition-keys-currenttime) 컨텍스트 키를 사용하는 정책을 생성할 수 있습니다.

다음 예제에서는 Martha Rivera가 MFA 디바이스를 비활성화하기 위해 요청을 전송하는 요청 컨텍스트의 표현을 보여줍니다.

```
Principal: AROA123456789EXAMPLE
Action: iam:DeactivateMFADevice
Resource: arn:aws:iam::user/martha
Context:
  – aws:UserId=AROA123456789EXAMPLE:martha
  – aws:PrincipalAccount=1123456789012
  – aws:PrincipalOrgId=o-example
  – aws:PrincipalARN=arn:aws:iam::1123456789012:assumed-role/TestAR
  – aws:MultiFactorAuthPresent=true
  – aws:MultiFactorAuthAge=2800
  – aws:CurrentTime=...
  – aws:EpochTime=...
  – aws:SourceIp=...
```

요청 컨텍스트는 사용자가 지난 1시간(3,600초) 동안 MFA를 사용하여 로그인한 경우에만 자신의 다중 인증(MFA) 디바이스를 제거할 수 있도록 하는 정책과 일치합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid": "AllowRemoveMfaOnlyIfRecentMfa",
        "Effect": "Allow",
        "Action": [
            "iam:DeactivateMFADevice"
        ],
        "Resource": "arn:aws:iam::*:user/${aws:username}",
        "Condition": {
            "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"}
        }
    }
}
```

------

이 예제에서 정책은 요청 컨텍스트와 일치합니다. 작업은 동일하고, 리소스는 ‘\$1’ 와일드카드와 일치하며, `aws:MultiFactorAuthAge`의 값은 3,600보다 작은 2,800이므로 정책은 이 권한 부여 요청을 허용합니다.

AWS는 정책의 각 컨텍스트 키를 평가하고 *true* 또는 *false* 값을 반환합니다. 요청에 없는 컨텍스트 키는 불일치로 간주됩니다.

요청 컨텍스트는 다음 값을 반환할 수 있습니다.
+ **True** - 요청자가 지난 1시간 이내에 MFA를 사용하여 로그인한 경우 조건은 *true*를 반환합니다.
+ **False** - 요청자가 1시간 이전에 MFA를 사용하여 로그인한 경우 조건은 *false*를 반환합니다.
  + **Not present** - 요청자가 AWS CLI 또는 AWS API에서 IAM 사용자 액세스 키를 사용하여 요청한 경우 키가 존재하지 않습니다. 이 경우 키가 존재하지 않으므로 일치하지 않습니다.

**참고**  
어떤 경우에는 조건 키 값이 없어도 조건이 true를 반환할 수 있습니다. 예를 들어 `ForAllValues` 한정자를 추가하면 컨텍스트 키가 요청에 없으면 요청이 true를 반환합니다. 누락된 컨텍스트 키 또는 값이 비어 있는 컨텍스트 키를 true로 평가하지 않도록 정책에서 [Null 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_Null)를 `false` 값과 함께 포함하여 컨텍스트 키가 존재하고 해당 값이 Null이 아닌지 확인할 수 있습니다.

## 조건 블록
<a name="AccessPolicyLanguage_ConditionBlock"></a>

다음은 `Condition` 요소의 기본 형식을 나타낸 예제입니다.

```
"Condition": {"StringLike": {"s3:prefix": ["jane/*"]}}
```

요청 값은 컨텍스트 키로 표현되며, 여기에서는 `s3:prefix`가 요청 값에 해당합니다. 컨텍스트 키 값은 `jane/*`와(과) 같이 리터럴 값으로 지정하는 값과 비교됩니다. 비교 유형은 [조건 연산자](reference_policies_elements_condition_operators.md)에서 지정합니다(여기서는 `StringLike`). equals, greater than 및 less than과 같은 일반적인 부울 비교를 사용하여 문자열, 날짜, 숫자 등을 비교하는 조건을 만들 수 있습니다. [문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String) 또는 [ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용하는 경우 컨텍스트 키 값에 [정책 변수](reference_policies_variables.md)를 사용할 수도 있습니다. 다음 예에는 `aws:username` 변수가 포함되어 있습니다.

```
"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
```

컨텍스트 키에 다수의 값을 추가할 수 있는 경우도 있습니다. 예를 들어 Amazon DynamoDB에 대한 요청에서는 다수의 테이블 속성 반환이나 업데이트를 요청할 수 있습니다. DynamoDB 테이블에 대한 액세스 정책에 따르면 `dynamodb:Attributes` 컨텍스트 키를 추가하여 요청 시 나열되는 모든 속성 저장이 가능합니다. `Condition` 요소의 설정 연산자를 사용하여 정책에 허용된 속성 목록과 요청에 포함된 속성 여러 가지를 비교함으로써 테스트할 수 있습니다. 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

요청 단계에서 정책을 평가할 때는 AWS가 키를 해당하는 요청 값으로 변환합니다. (이 예제에서는 AWS가 요청 날짜와 시간을 사용합니다). 조건 평가에 따라 true 또는 false가 반환되고, 이후 이 조건 평가 결과를 고려하여 정책 전반적인 요청 허용 또는 거부 여부를 결정합니다.

### 다수의 조건 값
<a name="Condition-multiple-conditions"></a>

`Condition` 요소에는 여러 조건 연산자를 추가할 수 있으며, 각 조건 연산자마다 다수의 컨텍스트 키-값 페어가 포함될 수 있습니다. 다음은 이것을 설명한 그림입니다.

![\[두 개의 조건 연산자 블록 다이어그램. 첫 번째 블록에는 각각 여러 값이 있는 2개의 컨텍스트 키 자리표시자가 있습니다. 두 번째 조건 블록에는 여러 값이 있는 컨텍스트 키 1개가 포함되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block.diagram.png)


자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

# IAM JSON 정책 요소: 조건 연산자
<a name="reference_policies_elements_condition_operators"></a>

<a name="topiclist"></a>

`Condition` 요소의 조건 연산자를 사용하여 정책의 조건 키 및 값을 요청 컨텍스트의 값과 일치시킵니다. `Condition` 요소에 대한 자세한 내용은 [IAM JSON 정책 요소: Condition](reference_policies_elements_condition.md) 섹션을 참조하세요.

정책에서 사용할 수 있는 조건 연산자는 선택한 조건 키에 따라 다릅니다. 전역 조건 키 또는 서비스별 조건 키를 선택할 수 있습니다. 전역 조건 키에 사용할 수 있는 조건 연산자를 알아보려면 [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md) 섹션을 참조하세요. 서비스별 조건 키에 사용할 수 있는 조건 연산자를 알아보려면 [AWS 서비스에 대한 작업, 리소스 및 조건 키](reference_policies_actions-resources-contextkeys.html)를 참조하고 보려는 서비스를 선택합니다.

**중요**  
정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않으며 조건은 *false*입니다. 정책 조건에 따라 키가 일치하지 *않아야* 하며(예: `StringNotLike` 또는 `ArnNotLike`) 올바른 키가 존재하지 않는 경우 조건은 *true*입니다. 이 로직은 [...IfExists](#Conditions_IfExists) 및 [Null check](#Conditions_Null)를 제외한 모든 조건 연산자에 적용됩니다. 이 연산자는 키가 요청 컨텍스트에 존재하는지 여부를 테스트합니다.

조건 연산자는 다음 범주로 그룹화할 수 있습니다.
+ [문자열](#Conditions_String)
+ [숫자](#Conditions_Numeric)
+ [날짜 및 시간](#Conditions_Date)
+ [부울](#Conditions_Boolean)
+ [이진](#Conditions_BinaryEquals)
+ [IP 주소](#Conditions_IPAddress)
+ [Amazon 리소스 이름(ARN)](#Conditions_ARN)(일부 서비스에서만 사용 가능.)
+ [...IfExists](#Conditions_IfExists)(키 값이 다른 확인을 위해 존재하는지 여부를 확인)
+ [Null 확인](#Conditions_Null)(키 값이 단독 확인을 위해 존재하는지 여부를 확인)

## 문자열 조건 연산자
<a name="Conditions_String"></a>

문자열 조건 연산자를 사용하여 키와 문자열 값을 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다.
+  **정책 변수** - [지원됨](reference_policies_variables.md)
+ **와일드카드** - [지원됨](#Conditions_String-wildcard)


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `StringEquals`   |  정확한 일치, 대소문자 구분  | 
|   `StringNotEquals`   |  불일치  | 
|   `StringEqualsIgnoreCase`   |  정확한 일치, 대소문자 무시  | 
|   `StringNotEqualsIgnoreCase`   |  불일치, 대소문자 무시  | 
|   `StringLike`   | 대소문자 구분 일치. 문자열 어디에서나 다중 문자 일치 와일드카드(\$1) 및 단일 문자 일치 와일드카드(?)를 값에 포함할 수 있습니다. 부분적으로 문자열이 일치하도록 하려면 와일드카드를 지정해야 합니다.  키에 다수의 값이 저장되는 경우에는 설정 연산자(`StringLike`, `ForAllValues:StringLike`)를 사용해 `ForAnyValue:StringLike`을(를) 한정할 수 있습니다. 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.  | 
|   `StringNotLike`   |  대소문자 구분 불일치. 문자열 어디에서나 다중 문자 일치 와일드카드(\$1) 또는 단일 문자 일치 와일드카드(?)를 값에 포함할 수 있습니다.  | 

**Example 문자열 조건 연산자**  
예를 들어, 다음 문에는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag) 키를 사용하여 요청을 수행하는 보안 주체에게 `iamuser-admin` 작업 범주에서 태그를 지정하도록 지정하는 `Condition` 요소가 포함되어 있습니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalTag/job-category": "iamuser-admin"
            }
        }
    }
}
```
정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않습니다. 이 예제에서는 보안 주체가 태그가 연결된 IAM 사용자를 사용하는 경우 `aws:PrincipalTag/job-category` 키가 요청 컨텍스트에 존재합니다. 이는 태그 또는 세션 태그가 연결된 IAM 역할을 사용하는 보안 주체를 위해 포함된 것이기도 합니다. 태그가 없는 사용자가 액세스 키를 보거나 편집하려고 하면 조건이 `false`을 반환하고 요청이 이 문에 의해 묵시적으로 거부됩니다.  
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  | <pre>aws:PrincipalTag/job-category:<br />  – iamuser-admin</pre>  |  일치 항목 있음 | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  | <pre>aws:PrincipalTag/job-category:<br />  – dev-ops</pre>  | 일치 항목 없음 | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/job-category": "iamuser-admin"<br />}</pre>  |  요청 컨텍스트에 `aws:PrincipalTag/job-category`가 없습니다.  | 일치 항목 없음 | 

**Example 문자열 조건 연산자와 함께 정책 변수 사용**  
다음 예제에서는 `StringLike` 조건 연산자를 사용하여 [정책 변수](reference_policies_variables.md)와 문자열 일치를 수행해 IAM 사용자가 Amazon S3 콘솔을 사용하여 Amazon S3 버킷에서 자신의 ‘홈 디렉토리’를 관리할 수 있는 정책을 생성할 수 있습니다. 이 정책은 `s3:prefix`가 지정된 패턴 중 하나와 일치하는 경우 S3 버킷에서 지정된 작업을 허용합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringLike": {
          "s3:prefix": [
            "",
            "home/",
            "home/${aws:username}/"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}",
        "arn:aws:s3:::amzn-s3-demo-bucket/home/${aws:username}/*"
      ]
    }
  ]
}
```
다음 표에서는 AWS가 요청 컨텍스트에 있는 [aws:username](reference_policies_condition-keys.md#condition-keys-username) 값을 기반으로 서로 다른 사용자에 대해 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  | <pre>aws:username:<br />  – martha_rivera</pre>  | <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/martha_rivera/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  <pre>aws:username:<br />  – nikki_wolf</pre>  |  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/nikki_wolf/"<br />  ]<br />}</pre>  | 
|  <pre>"StringLike": {<br />  "s3:prefix": [<br />    "home/",<br />    "home/${aws:username}/"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `aws:username`가 없습니다.  | 일치 항목 없음 | 
OIDC 페더레이션 시 `Condition` 요소를 사용하여 애플리케이션 ID와 사용자 ID에 따라 리소스 액세스를 제한하는 방법을 보여주는 정책의 예는 [Amazon S3: Amazon Cognito 사용자가 버킷에 있는 객체에 액세스하도록 허용](reference_policies_examples_s3_cognito-bucket.md) 섹션을 참조하세요.

### 다중 값 문자열 조건 연산자
<a name="conditions_string_multivalued"></a>

요청에서 키가 다중 값을 포함하는 경우 문자열 연산자는 세트 연산자 `ForAllValues` 및 `ForAnyValue`를 사용해 한정할 수 있습니다. 여러 컨텍스트 키 또는 값의 평가 로직에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.


| 조건 연산자 | 설명 | 
| --- | --- | 
|  `ForAllValues:StringEquals` `ForAllValues:StringEqualsIgnoreCase`  |  요청에서 조건 키에 대한 모든 값이 정책에 있는 하나 이상의 값과 일치해야 합니다.  | 
|  `ForAnyValue:StringEquals` `ForAnyValue:StringEqualsIgnoreCase`  |  요청에서 하나 이상의 조건 키 값이 정책에 있는 값 중 하나와 일치해야 합니다.  | 
|  `ForAllValues:StringNotEquals` `ForAllValues:StringNotEqualsIgnoreCase`  |  불일치. 요청에서 모든 컨텍스트 키 값이 정책에 있는 컨텍스트 키 값과 일치할 수 없습니다.  | 
|  `ForAnyValue:StringNotEquals` `ForAnyValue:StringNotEqualsIgnoreCase`  |  불일치. 요청에서 하나 이상의 컨텍스트 키 값이 정책에 있는 컨텍스트 키의 값과 일치하지 않아야 합니다.  | 
|  `ForAllValues:StringLike`  |  요청에서 조건 키에 대한 모든 값이 정책에 있는 하나 이상의 값과 일치해야 합니다.  | 
|  `ForAnyValue:StringLike`  |  요청에서 하나 이상의 조건 키 값이 정책에 있는 값 중 하나와 일치해야 합니다.  | 
|  `ForAllValues:StringNotLike`  |  불일치. 요청에서 모든 컨텍스트 키 값이 정책에 있는 컨텍스트 키 값과 일치할 수 없습니다.  | 
|  `ForAnyValue:StringNotLike`  |  불일치. 요청에서 하나 이상의 컨텍스트 키 값이 정책에 있는 컨텍스트 키의 값과 일치하지 않아야 합니다.  | 

**Example 문자열 조건 연산자와 함께 `ForAnyValue` 사용**  
이 예제는 태그를 인스턴스에 연결하는 Amazon EC2 `CreateTags` 작업 사용을 허용하는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다. `StringEqualsIgnoreCase`를 사용할 때 태그에 `preprod` 또는 `storage` 값을 사용하는 `environment` 키가 있는 경우에만 태그를 연결할 수 있습니다. 연산자에 `IgnoreCase`를 추가하면 기존 태그 값의 대소문자 조합(예: `preprod`, `Preprod`, `PreProd`)을 true로 해석할 수 있습니다.  
[aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys) 조건 키와 함께 `ForAnyValue` 한정자를 추가하는 경우 요청에서 하나 이상의 태그 키 값이 `environment` 값과 일치해야 합니다. `ForAnyValue` 비교는 대소문자를 구분하므로 `environment` 대신 `Environment`를 사용하는 등 태그 키에 잘못된 대소문자를 사용할 수 없습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "ec2:CreateTags",
    "Resource": "arn:aws:ec2:*:*:instance/*",
    "Condition": {
      "StringEqualsIgnoreCase": {
        "aws:RequestTag/environment": [
          "preprod",
          "storage"
        ]
      },
      "ForAnyValue:StringEquals": {
        "aws:TagKeys": "environment"
      }
    }
  }
}
```
 다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />aws:RequestTag/environment:<br />  – preprod</pre>  | 일치 항목 있음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – costcenter<br />aws:RequestTag/environment:<br />  – PreProd</pre>  | 일치 항목 있음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – Environment<br />aws:RequestTag/Environment:<br />  – preprod</pre>  | 일치 항목 없음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – costcenter<br />aws:RequestTag/environment:<br />  – preprod</pre>  | 일치 항목 없음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  |  요청 컨텍스트에 `aws:TagKeys`가 없습니다. <pre>aws:RequestTag/environment:<br />  – storage</pre>  | 일치 항목 없음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre> 요청 컨텍스트에 `aws:RequestTag/environment`가 없습니다.  | 일치 항목 없음  | 
|  <pre>"StringEqualsIgnoreCase": {<br />  "aws:RequestTag/environment": [<br />    "preprod",<br />    "storage"<br />  ]<br />},<br />"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "environment"<br />}</pre>  |  요청 컨텍스트에 `aws:TagKeys`가 없습니다. 요청 컨텍스트에 `aws:RequestTag/environment`가 없습니다.  | 일치 항목 없음  | 

### 와일드카드 매칭
<a name="Conditions_String-wildcard"></a>

문자열 조건 연산자는 사전 정의된 형식을 적용하지 않는 패턴 없는 매칭을 수행합니다. ARN 및 날짜 조건 연산자는 조건 키 값에 구조를 적용하는 문자열 연산자의 하위 집합입니다.

키를 비교하려는 값에 해당하는 조건 연산자를 사용하는 것이 좋습니다. 예를 들어, 키를 문자열 값과 비교할 때는 [문자열 조건 연산자](#Conditions_String)을 사용해야 합니다. 마찬가지로 키를 ARN 값과 비교할 때는 [Amazon 리소스 이름(ARN) 조건 연산자](#Conditions_ARN)을 사용해야 합니다.

**Example**  
이 예제에서는 조직의 리소스에 대한 경계를 생성하는 방법을 보여줍니다. 이 정책의 조건은 액세스하는 리소스가 AWS Organizations에서 조직 단위(OU)의 특정 세트에 없으면 Amazon S3 작업에 대한 액세스를 거부합니다. AWS Organizations 경로는 조직 엔터티 구조의 텍스트 표현입니다.  
이 조건의 경우 `aws:ResourceOrgPaths`에 나열된 OU 경로가 포함되어 있어야 합니다. `aws:ResourceOrgPaths`는 다중 값 조건이므로 정책은 `ForAllValues:StringNotLike` 연산자를 사용하여 `aws:ResourceOrgPaths`의 값을 정책의 OU 목록과 비교합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyS3AccessOutsideMyBoundary",
      "Effect": "Deny",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:ResourceOrgPaths": [
            "o-acorg/r-acroot/ou-acroot-mediaou/",
            "o-acorg/r-acroot/ou-acroot-sportsou/*"
          ] 
        }
      }
    }
  ]
}
```
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-sportsou/costcenter/</pre>  | 일치 항목 있음 | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  | <pre>aws:ResourceOrgPaths:<br />  – o-acorg/r-acroot/ou-acroot-mediaou/costcenter/</pre>  | 일치 항목 없음 | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:ResourceOrgPaths": [<br />    "o-acorg/r-acroot/ou-acroot-mediaou/",<br />    "o-acorg/r-acroot/ou-acroot-sportsou/*"<br />  ] <br />}</pre>  |  요청에 `aws:ResourceOrgPaths:`가 없습니다.  | 일치 항목 없음 | 

## 숫자 조건 연산자
<a name="Conditions_Numeric"></a>

숫자 조건 연산자를 사용하여 키와 정수 또는 십진수 값을 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다.
+  **정책 변수** - 지원되지 않음
+ **와일드카드** - 지원되지 않음


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `NumericEquals`   |  일치  | 
|   `NumericNotEquals`   |  불일치  | 
|   `NumericLessThan`   |  "미만" 일치  | 
|   `NumericLessThanEquals`   |  "이하" 일치  | 
|   `NumericGreaterThan`   |  "초과" 일치  | 
|   `NumericGreaterThanEquals`   |  "이상" 일치  | 

예를 들어, 다음 문에는 `NumericLessThanEquals` 조건 연산자에 `s3:max-keys` 키를 사용하여 요청자가 `amzn-s3-demo-bucket`에서 한 번에 *최대* 10개까지 객체를 나열할 수 있다고 지정하는 `Condition` 요소가 포함되어 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "s3:ListBucket",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
    "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}}
  }
}
```

------

정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않습니다. 이 예제에서는`ListBucket` 작업을 수행할 때 요청에 `s3:max-keys` 키가 항상 존재합니다. 이 정책에서 모든 Amazon S3 작업을 허용한 경우에는 값이 10 이하인 `max-keys` 컨텍스트 키를 포함하는 작업만 허용됩니다.

## 날짜 조건 연산자
<a name="Conditions_Date"></a>

날짜 조건 연산자를 사용하여 키와 날짜/시간 값을 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다. 이러한 조건 연산자는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-currenttime) 키 또는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-epochtime) 키와 함께 사용합니다. 날짜/시간 값은 [ISO 8601 날짜 형식의 W3C 구현 값](http://www.w3.org/TR/NOTE-datetime) 중의 하나, 또는 epoch(UNIX) 시간으로 지정해야 합니다.
+  **정책 변수** - 지원되지 않음
+ **와일드카드** - 지원되지 않음


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `DateEquals`   |  특정 날짜 일치  | 
|   `DateNotEquals`   |  불일치  | 
|   `DateLessThan`   |  특정 날짜/시간 이전에 일치  | 
|   `DateLessThanEquals`   |  특정 날짜/시간 또는 이전에 일치  | 
|   `DateGreaterThan`   |  특정 날짜/시간 이후에 일치  | 
|   `DateGreaterThanEquals`   |  특정 날짜/시간 또는 이후에 일치  | 

예를 들어, 다음 문에는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tokenissuetime) 키와 함께 `DateGreaterThan` 조건 연산자를 사용하는 `Condition` 요소가 포함되어 있습니다. 이 조건은 요청을 생성하는 데 사용된 임시 보안 자격 증명이 2020년에 발급되었음을 지정합니다. 계정 멤버가 새로운 자격 증명을 사용하도록 매일 프로그래밍 방식으로 이 정책을 업데이트할 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "DateGreaterThan": {
                "aws:TokenIssueTime": "2020-01-01T00:00:01Z"
            }
        }
    }
}
```

------

정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않습니다. `aws:TokenIssueTime` 키는 사용자가 임시 자격 증명을 사용하여 요청을 생성하는 경우에만 요청 컨텍스트에 존재합니다. 액세스 키를 사용하는 AWS CLI, AWS API 또는 AWS SDK 요청에는 이 키가 존재하지 않습니다. 이 예제에서 IAM 사용자가 액세스 키를 보거나 편집하려고 하면 요청이 거부됩니다.

## 부울 조건 연산자
<a name="Conditions_Boolean"></a>

부울 조건을 사용하면 키를 `true` 또는 `false`와 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다.

키에 다중 값이 포함된 경우 부울 연산자는 세트 연산자 `ForAllValues` 및 `ForAnyValue`를 사용해여 한정할 수 있습니다. 여러 컨텍스트 키 또는 값의 평가 로직에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.
+  **정책 변수** - [지원됨](reference_policies_variables.md)
+ **와일드카드** - 지원되지 않음


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `Bool`   |  부울 일치  | 
|   `ForAllValues:Bool`   |  부울 배열 데이터 유형과 함께 사용합니다. 컨텍스트 키 값의 모든 부울이 정책에 있는 부울 값과 일치해야 합니다. `ForAllValues` 연산자가 누락된 컨텍스트 키 또는 값이 비어 있는 컨텍스트 키를 허용된 항목으로 평가하지 않도록 정책에 [Null 조건 연산자](#Conditions_Null)를 포함할 수 있습니다.  | 
|   `ForAnyValue:Bool`   |  부울 배열 데이터 유형과 함께 사용합니다. 컨텍스트 키 값에서 하나 이상의 부울이 정책에 있는 부울 값과 일치해야 합니다.  | 

**Example 부울 조건 연산자**  
다음과 같은 ID 기반 정책은 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-securetransport) 키와 함께 `Bool` 조건 연산자를 사용하여 요청이 SSL을 통해 전달되지 않는 경우 대상 버킷 및 해당 콘텐츠로의 객체 및 객체 태그 복제를 거부합니다.  
이 정책은 어떤 작업도 허용하지 않습니다. 이 정책을 특정 작업을 허용하는 다른 정책과 함께 사용합니다.  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "BooleanExample",
      "Action": "s3:ReplicateObject",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket",
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}
```
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  | <pre>aws:SecureTransport:<br />  – false</pre>  | 일치 항목 있음 | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  | <pre>aws:SecureTransport:<br />  – true</pre>  | 일치 항목 없음 | 
|  <pre>"Bool": {<br />  "aws:SecureTransport": "false"<br />}</pre>  |  요청 컨텍스트에 `aws:SecureTransport`가 없습니다.  | 일치 항목 없음 | 

## 이진 조건 연산자
<a name="Conditions_BinaryEquals"></a>

`BinaryEquals` 조건 연산자를 사용하면 이진 형식의 키 값을 테스트하는 `Condition` 요소를 생성할 수 있습니다. 지정한 키 값을 정책 내 이진 값의 [base-64](https://en.wikipedia.org/wiki/Base64) 인코딩 표시와 바이트 단위(byte for byte)로 비교합니다. 정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않습니다.
+  **정책 변수** - 지원되지 않음
+ **와일드카드** - 지원되지 않음

```
"Condition" : {
  "BinaryEquals": {
    "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="
  }
}
```


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  | <pre>key:<br />  – QmluYXJ5VmFsdWVJbkJhc2U2NA==</pre>  | 일치 항목 있음 | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  | <pre>key:<br />  – ASIAIOSFODNN7EXAMPLE</pre>  | 일치 항목 없음 | 
|  <pre>"BinaryEquals": {<br />  "key" : "QmluYXJ5VmFsdWVJbkJhc2U2NA=="<br />}</pre>  |  요청 컨텍스트에 `key`가 없습니다.  | 일치 항목 없음 | 

## IP 주소 조건 연산자
<a name="Conditions_IPAddress"></a>

IP 주소 조건 연산자를 사용하여 IPv4/IPv6 주소 또는 IP 주소 범위와 키를 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다. 이 조건에는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip) 키가 사용됩니다. 값은 표준 CIDR 형식(예: 203.0.113.0/24 또는 2001:DB8:1234:5678::/64)을 따라야 합니다. 연결된 라우팅 접두사 없이 IP 주소를 지정하면 IAM은 기본 접두사 값 `/32`를 사용합니다.

일부 AWS 서비스는 0의 범위를 나타내기 위해 ::을 사용해 IPv6를 지원합니다. 서비스가 IPv6를 지원하는지 여부를 확인하려면 서비스 설명서를 참조하세요.
+  **정책 변수** - 지원되지 않음
+ **와일드카드** - 지원되지 않음


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `IpAddress`   |  지정된 IP 주소 또는 범위  | 
|   `NotIpAddress`   |  지정된 IP 주소 또는 범위를 제외한 모든 IP 주소  | 

**Example IP 주소 조건 연산자**  
다음 명령문은 `IpAddress` 조건 연산자에 `aws:SourceIp` 키를 사용하여 IP 범위 203.0.113.0\$1203.0.113.255에서 요청이 전송되어야 한다고 지정하고 있습니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Action": "iam:*AccessKey*",
        "Resource": "arn:aws:iam::111122223333:user/*",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "203.0.113.0/24"
            }
        }
    }
}
```
`aws:SourceIp` 조건 키는 요청이 전송되는 IP 주소를 확인합니다. 요청이 Amazon EC2 인스턴스에서 전송된 경우에는 `aws:SourceIp`가 인스턴스의 퍼블릭 IP 주소로 계산되어야 합니다.  
정책 조건에서 지정한 키가 요청 컨텍스트에 없으면 값이 일치하지 않습니다. `aws:SourceIp` 키는 요청자가 VPC 엔드포인트를 사용하여 요청을 생성한 경우를 제외하고 요청 컨텍스트에 항상 존재합니다. 이 경우 조건이 `false`를 반환하고 요청이 이 문에 의해 묵시적으로 거부됩니다.  
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"IpAddress": {<br />  "aws:SourceIp": "203.0.113.0/24"<br />}</pre>  | <pre>aws:SourceIp:<br />  – 203.0.113.1</pre>  | 일치 항목 있음 | 
|  <pre>"IpAddress": {<br />  "aws:SourceIp": "203.0.113.0/24"<br />}</pre>  | <pre>aws:SourceIp:<br />  – 198.51.100.1</pre>  | 일치 항목 없음 | 
다음 예제에서는 IPv4와 IPv6 주소를 혼합하여 조직의 유효 IP 주소를 모두 표현하는 방법을 보여줍니다. IPv6으로 전환하는 동안 조직의 정책이 계속 적용되도록 하려면 기존의 IPv4 주소 범위에 IPv6 범위를 더하여 정책을 업그레이드하는 것이 좋습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "someservice:*",
    "Resource": "*",
    "Condition": {
      "IpAddress": {
        "aws:SourceIp": [
          "203.0.113.0/24",
          "2001:DB8:1234:5678::/64"
        ]
      }
    }
  }
}
```
사용자 자격으로 직접 테스트한 API를 호출하는 경우 `aws:SourceIp` 조건 키는 JSON 정책에서만 작동합니다. 서비스를 사용하여 사용자를 대신해 대상 서비스를 호출하는 경우, 대상 서비스는 원래 사용자의 IP 주소 대신 호출 서비스의 IP 주소를 봅니다. 이러한 상황은 예를 들어 AWS CloudFormation을 사용하여 인스턴스를 생성하는 Amazon EC2를 호출하는 경우에 발생할 수 있습니다. 현재로서는 JSON 정책에 따라 평가하기 위해 원본 IP 주소를 호출 서비스를 통해 대상 서비스로 보낼 방법이 없습니다. 이러한 서비스 API 호출 유형의 경우 `aws:SourceIp` 조건 키를 사용하지 마십시오.

## Amazon 리소스 이름(ARN) 조건 연산자
<a name="Conditions_ARN"></a>

Amazon 리소스 이름(ARN) 조건 연산자를 사용하면 키와 ARN을 비교한 결과에 따라 액세스를 제한하는 `Condition` 요소를 생성할 수 있습니다. ARN은 문자열로 알려져 있습니다.
+  **정책 변수** - [지원됨](reference_policies_variables.md)
+ **와일드카드** - [지원됨](reference_policies_elements_resource.md#reference_policies_elements_resource_wildcards)


****  

| 조건 연산자 | 설명 | 
| --- | --- | 
|   `ArnEquals`, `ArnLike`  |  ARN 대소문자 구분 일치. ARN에서 콜론으로 구분된 구성요소 6개는 각각 별도로 확인하며, 다중 문자 일치 와일드카드(\$1) 또는 단일 문자 일치 와일드카드(?)가 추가될 수 있습니다. `ArnEquals` 과 `ArnLike` 조건 연산자는 동일하게 동작합니다.  | 
|   `ArnNotEquals`, `ArnNotLike`  |  ARN 불일치. `ArnNotEquals` 과 `ArnNotLike` 조건 연산자는 동일하게 동작합니다.  | 

**Example ARN 조건 연산자**  
다음의 리소스 기반 정책 예는 SNS 메시지를 전송하고 싶은 Amazon SQS 대기열에 연결된 정책을 보여줍니다. 이 예제에서는 선택한 대기열로 메시지를 전송할 수 있는 권한을 Amazon SNS에 부여하고 있습니다. 단, 서비스에서 특정 Amazon SNS 주제와 관련하여 메시지를 전송하는 경우로 제한됩니다. 대기열을 `Resource` 필드에, 그리고 Amazon SNS 주제는 `SourceArn` 키 값으로 지정합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": {
            "Service": "sns.amazonaws.com"
        },
        "Action": "SQS:SendMessage",
        "Resource": "arn:aws:sqs:us-east-1:123456789012:QUEUE-ID",
        "Condition": {
            "ArnEquals": {
                "aws:SourceArn": "arn:aws:sns:us-east-1:123456789012:TOPIC-ID"
            }
        }
    }
}
```
[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 키는 리소스가 리소스 소유자를 대신하여 다른 서비스를 호출하도록 서비스를 트리거하는 경우에만 요청 컨텍스트에 존재합니다. IAM 사용자가 이 작업을 직접 수행하려고 하면 조건이 `false`을 반환하고 요청이 이 문에 의해 묵시적으로 거부됩니다.  
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  | <pre>aws:SourceArn:<br />  – arn:aws:sns:us-west-2:123456789012:TOPIC-ID</pre>  | 일치 항목 있음 | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  | <pre>aws:SourceArn:<br />  – arn:aws:sns:us-west-2:777788889999:TOPIC-ID</pre>  | 일치 항목 없음 | 
|  <pre>"ArnEquals": {<br />  "aws:SourceArn": "arn:aws:sns:us-west-2:123456789012:TOPIC-ID"<br />}</pre>  |  요청 컨텍스트에 `aws:SourceArn`가 없습니다.  | 일치 항목 없음 | 

### 다중 값 ARN 조건 연산자
<a name="conditions_arn_multivalued"></a>

요청에서 키가 다중 값을 포함하는 경우 ARN 연산자는 세트 연산자 `ForAllValues` 및 `ForAnyValue`를 사용해 한정할 수 있습니다. 여러 컨텍스트 키 또는 값의 평가 로직에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.


| 조건 연산자 | 설명 | 
| --- | --- | 
|  `ForAllValues:ArnEquals` `ForAllValues:ArnLike`  |  요청 컨텍스트에서 모든 ARN이 정책에 있는 하나 이상의 ARN 패턴과 일치해야 합니다.  | 
|  `ForAnyValue:ArnEquals` `ForAnyValue:ArnLike`  |  요청 컨텍스트에서 하나 이상의 ARN이 정책에 있는 ARN 패턴 중 하나와 일치해야 합니다.  | 
|  `ForAllValues:ArnNotEquals` `ForAllValues:ArnNotLike`  |  불일치. 요청 컨텍스트에서 모든 ARN이 정책에 있는 문자열 ARN 패턴과 일치할 수 없습니다.  | 
|  `ForAnyValue:ArnNotEquals` `ForAnyValue:ArnNotLike`  |  불일치. 요청 컨텍스트에서 하나 이상의 ARN이 정책에 있는 ARN 패턴과 일치해서는 안 됩니다.  | 

**Example ARN 조건 연산자와 함께 `ForAllValues` 사용**  
다음 예제에서는 `ForAllValues:ArnLike`를 사용하여 Amazon CloudWatch Logs 로그에 대한 논리적 전송 소스를 생성하거나 업데이트합니다. 조건 블록에는 요청에서 전달되는 로그 생성 리소스 ARN을 필터링하기 위해 [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-policy-keys](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-policy-keys) 조건 키가 포함됩니다. 이 조건 연산자를 사용하면 요청에서 모든 ARN이 정책에 있는 하나 이상의 ARN과 일치해야 합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "logs:PutDeliverySource",
            "Resource": "arn:aws:logs:us-east-1:123456789012:delivery-source:*",
            "Condition": {
                "ForAllValues:ArnLike": {
                    "logs:LogGeneratingResourceArns": [
                        "arn:aws:cloudfront::123456789012:distribution/*",
                        "arn:aws:cloudfront::123456789012:distribution/support*"
                    ]
                }
            }
        }
    ]
}
```
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter</pre>  | 일치 항목 있음 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter<br />  – arn:aws::cloudfront:123456789012:distribution/support2025</pre>  | 일치 항목 있음 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:123456789012:distribution/costcenter<br />  – arn:aws::cloudfront:123456789012:distribution/admin</pre>  | 일치 항목 없음 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  | <pre>logs:LogGeneratingResourceArns:<br />  – arn:aws::cloudfront:777788889999:distribution/costcenter</pre>  | 일치 항목 없음 | 
|  <pre>"ForAllValues:ArnLike": {<br />  "logs:LogGeneratingResourceArns": [<br />    "arn:aws::cloudfront:123456789012:distribution/*",<br />    "arn:aws::cloudfront:123456789012:distribution/support*"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `logs:LogGeneratingResourceArns`가 없습니다.  | 일치 항목 있음  | 
요청에 컨텍스트 키가 없거나 컨텍스트 키 값이 빈 문자열과 같은 Null 데이터세트로 해석되는 경우 `ForAllValues` 한정자는 true를 반환합니다. 누락된 컨텍스트 키 또는 값이 비어 있는 컨텍스트 키를 true로 평가하지 않도록 정책에서 [Null 조건 연산자](#Conditions_Null)를 `false` 값과 함께 포함하여 컨텍스트 키가 존재하고 해당 값이 Null이 아닌지 확인할 수 있습니다.

## …IfExists 조건 연산자
<a name="Conditions_IfExists"></a>

`Null` 조건을 제외하고 조건 연산자 이름 끝에 `IfExists`를 추가할 수 있습니다(예: `StringLikeIfExists`). 이렇게 하면 "요청 컨텍스트에 조건 키가 있으면 정책에 지정된 대로 키를 처리합니다. 키가 없으면 조건 요소를 true로 평가합니다." 문의 다른 조건 요소는 여전히 불일치한 결과를 발생시킬 수 있지만 `...IfExists`로 확인하면 누락되는 키는 없습니다. `StringNotEqualsIfExists`와 같은 부정 조건 연산자와 함께 `"Effect": "Deny"` 요소를 사용하는 경우 조건 키가 제공되지 않아도 요청이 계속 거부됩니다.

**`IfExists` 사용 예제**

대부분 조건 키는 특정 형식의 리소스 정보를 의미하기 때문에 해당 형식의 리소스에 액세스할 때만 존재합니다. 이러한 조건 키는 다른 형식의 리소스에는 표시되지 않습니다. 그렇다고 정책 문이 한 가지 형식의 리소스에만 적용된다고 해서 문제가 되지는 않습니다. 하지만 정책 문이 여러 서비스의 작업을 참조하는 경우나, 혹은 한 가지 서비스 내에서 임의의 작업이 동일한 서비스에서 여러 가지 다른 리소스 형식에 액세스하는 경우처럼 단일 문이 여러 유형의 리소스에 적용될 수 있는 경우도 있습니다. 이런 경우 오직 한 가지 리소스에만 적용되는 조건 키를 정책 문에 추가하면 정책 문의 `Condition` 요소를 충족하지 못하고 결국 `"Effect"`가 적용되지 않습니다.

예를 들어 다음과 같은 정책 예제를 살펴보십시오.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Sid": "THISPOLICYDOESNOTWORK",
    "Effect": "Allow",
    "Action": "ec2:RunInstances",
    "Resource": "*",
    "Condition": {"StringLike": {"ec2:InstanceType": [
      "t1.*",
      "t2.*",
      "m3.*"
    ]}}
  }
}
```

------

위 정책의 *의도*는 사용자가 `t1`, `t2` 또는 `m3` 형식의 인스턴스를 모두 실행할 수 있도록 하는 것이 목적입니다. 하지만 인스턴스를 실행하려면 인스턴스 외에도 이미지, 키 페어, 보안 그룹 등 다양한 리소스에 액세스해야 합니다. 전체 문은 인스턴스를 실행하는 데 필요한 모든 리소스와 비교하여 평가됩니다. 하지만 이러한 추가 리소스에는 `ec2:InstanceType` 조건 키가 없기 때문에 `StringLike` 검사는 fail로 끝나고 사용자에게 권한이 부여되지 않아 *어떤* 인스턴스 유형도 실행하지 못합니다.

이 문제를 해결하려면 그 대신 `StringLikeIfExists` 조건 연산자를 사용해야 합니다. 이렇게 하면 조건 키가 존재하는 경우에만 테스트가 실행됩니다. 그 결과 다음 정책은 이렇게 해석할 수 있습니다. “검사 대상 리소스에 '`ec2:InstanceType`' 조건 키가 있으면 키 값이 `t1.`, `t2.` 또는 `m3.`로 시작할 때에만 작업을 허용합니다. 검사 대상 리소스에 조건 키가 없으면 그냥 둡니다." 조건 키 값에 별표(\$1)를 `StringLikeIfExists` 조건 연산자와 함께 사용하면 와일드카드로 해석되어 문자열이 부분적으로 일치합니다. `DescribeActions` 문에는 콘솔에서 해당 인스턴스를 보는 데 필요한 작업이 포함되어 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RunInstance",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
        "StringLikeIfExists": {
          "ec2:InstanceType": [
            "t1.*",
            "t2.*",
            "m3.*"
          ]
        }
      }
    },
    {
      "Sid": "DescribeActions",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeImages",
        "ec2:DescribeInstances",
        "ec2:DescribeVpcs",
        "ec2:DescribeKeyPairs",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups"
      ],
      "Resource": "*"
    }
  ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – t1.micro</pre>  | 일치 항목 있음 | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  | <pre>ec2:InstanceType:<br />  – m2.micro</pre>  | 일치 항목 없음 | 
|  <pre>"StringLikeIfExists": {<br />  "ec2:InstanceType": [<br />    "t1.*",<br />    "t2.*",<br />    "m3.*"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `ec2:InstanceType`가 없습니다.  | 일치 항목 있음 | 

## 조건 키의 존재를 확인하는 조건 연산자
<a name="Conditions_Null"></a>

`Null` 조건 연산자를 사용하여 권한을 부여하는 시점에 조건 키가 없는지 확인합니다. 정책 문에서는 `true`(키가 부재하며 값이 null임) 또는 `false`(키가 존재하며 값이 null이 아님)를 사용합니다.

[정책 변수](reference_policies_variables.md)를 `Null` 조건 연산자와 함께 사용할 수 없습니다.

예를 들어, 이 조건 연산자를 사용하여 사용자가 요청 시 임시 자격 증명 또는 자신의 자격 증명을 사용하는지 여부를 알 수 있습니다. 사용자가 임시 자격 증명을 사용하는 경우에는 `aws:TokenIssueTime` 키가 존재하며, 값을 갖고 있습니다. 다음은 Amazon EC2 API 사용자의 경우 임시 자격 증명을 사용해야 한다는 것(키가 없을 수 없음)을 명시하는 조건을 나타낸 예제입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action":"ec2:*",
      "Effect":"Allow",
      "Resource":"*",
      "Condition":{"Null":{"aws:TokenIssueTime":"false"}}
  }
}
```

------

# 다수의 컨텍스트 키 또는 값을 사용하는 조건
<a name="reference_policies_condition-logic-multiple-context-keys-or-values"></a>

정책의 `Condition` 요소를 사용하여 요청에서 다수의 컨텍스트 키, 혹은 단일 컨텍스트 키에 대한 다수의 값을 테스트할 수 있습니다. 프로그래밍 방식이든, AWS Management Console을 사용하든 상관없이 AWS에게 요청할 경우 요청에 보안 주체, 작업, 태그 등에 대한 정보가 포함됩니다. 컨텍스트 키를 사용하여 정책 조건에서 컨텍스트 키가 지정된 요청에서 일치하는 컨텍스트 키의 값을 테스트할 수 있습니다. 요청에 포함되는 정보 및 데이터에 대한 자세한 내용은 [요청 컨텍스트](reference_policies_elements_condition.md#AccessPolicyLanguage_RequestContext) 섹션을 참조하세요.

**Topics**
+ [다수의 컨텍스트 키 또는 값에 대한 평가 로직](#reference_policies_multiple-conditions-eval)
+ [부정 일치 조건 연산자에 대한 평가 로직](#reference_policies_multiple-conditions-negated-matching-eval)

## 다수의 컨텍스트 키 또는 값에 대한 평가 로직
<a name="reference_policies_multiple-conditions-eval"></a>

`Condition` 요소에는 여러 조건 연산자를 추가할 수 있으며, 각 조건 연산자마다 다수의 컨텍스트 키-값 페어가 포함될 수 있습니다. 대부분의 컨텍스트 키에는 별도로 지정되지 않는 한 여러 개의 값을 사용할 수 있습니다.
+ 정책 문에 여러 개의 [조건 연산자](reference_policies_elements_condition_operators.md)가 있는 경우 조건 연산자는 논리 연산자 `AND`를 사용하여 평가됩니다.
+ 정책 문에서 다수의 컨텍스트 키가 단일 조건 연산자에 추가되어 있는 경우 논리 연산자 `AND`를 사용하여 컨텍스트 키가 평가됩니다.
+ 단일 조건 연산자에 하나의 컨텍스트 키에 대한 다수의 값이 포함된 경우 이러한 값은 논리 연산자 `OR`을 사용하여 평가됩니다.
+ 단일 부정 일치 조건 연산자에 하나의 컨텍스트 키에 대한 다수의 값이 포함된 경우 이러한 값은 논리 연산자 `NOR`을 사용하여 평가됩니다.

조건 요소 블록의 모든 컨텍스트 키가 true로 확인되어야 원하는 `Allow` 또는 `Deny` 효과를 간접적으로 호출할 수 있습니다. 다음 그림은 여러 조건 연산자와 컨텍스트 키-값 쌍이 있는 조건에 대한 평가 로직을 보여줍니다.

![\[AND와 OR가 다수의 컨텍스트 키와 값에 적용되는 방식을 나타낸 조건 블록\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_2.diagram.png)


예를 들어, 다음 S3 버킷 정책은 이전 그림이 정책에 어떻게 표시되는지 보여줍니다. 조건 블록에는 조건 연산자 `StringEquals` 및 `ArnLike`와, 컨텍스트 키 `aws:PrincipalTag` 및 `aws:PrincipalArn`이 포함됩니다. 원하는 `Allow` 또는 `Deny` 효과를 간접적으로 호출하기 위해 조건 블록의 모든 컨텍스트 키가 true로 확인되어야 합니다. 요청하는 사용자는 정책에 지정된 태그 키 값 중 하나를 포함하는 두 개의 보안 주체 태그 키(*department*와 *role*)를 모두 가지고 있어야 합니다. 또한 요청하는 사용자의 보안 주체 ARN이 정책에서 지정된 `aws:PrincipalArn` 값 중 하나와 일치해야 true로 평가됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/department": [
            "finance",
            "hr",
            "legal"
          ],
          "aws:PrincipalTag/role": [
            "audit",
            "security"
          ]
        },
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::222222222222:user/Ana",
            "arn:aws:iam::222222222222:user/Mary"
          ]
        }
      }
    }
  ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn: <br />  arn:aws:iam::222222222222:user/Mary</pre>  |  **일치 항목 있음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **일치 항목 없음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **일치 항목 없음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `aws:PrincipalTag/role`가 없습니다. <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **일치 항목 없음**  | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | 요청 컨텍스트에 `aws:PrincipalTag`가 없습니다. <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **일치 항목 없음**  | 

## 부정 일치 조건 연산자에 대한 평가 로직
<a name="reference_policies_multiple-conditions-negated-matching-eval"></a>

`StringNotEquals` 또는 `ArnNotLike`와 같은 일부 [조건 연산자](reference_policies_elements_condition_operators.md)는 부정 일치를 사용하여 정책의 컨텍스트 키-값 쌍과 요청의 컨텍스트 키-값 쌍을 비교합니다. 부정 일치 조건 연산자가 포함된 정책의 단일 컨텍스트 키에 대해 다수의 값이 지정되면 유효한 권한은 논리 연산자 `NOR`와 같이 작동합니다. 부정 일치에서 논리 연산자 `NOR` 또는 `NOT OR`은 모든 값이 false로 평가되는 경우에만 true를 반환합니다.

다음 그림은 여러 조건 연산자와 컨텍스트 키-값 쌍이 있는 조건에 대한 평가 로직을 보여줍니다. 그림에는 컨텍스트 키 3에 대한 부정 일치 조건 연산자가 포함되어 있습니다.

![\[부정 일치 조건 연산자가 사용되는 경우 AND와 OR가 다수의 컨텍스트 키와 값에 적용되는 방식을 나타낸 조건 블록\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/AccessPolicyLanguage_Condition_Block_AND_Negated_NOR_2.diagram.png)


예를 들어, 다음 S3 버킷 정책은 이전 그림이 정책에 어떻게 표시되는지 보여줍니다. 조건 블록에는 조건 연산자 `StringEquals` 및 `ArnNotLike`와, 컨텍스트 키 `aws:PrincipalTag` 및 `aws:PrincipalArn`이 포함됩니다. 원하는 `Allow` 또는 `Deny` 효과를 간접적으로 호출하기 위해 조건 블록의 모든 컨텍스트 키가 true로 확인되어야 합니다. 요청하는 사용자는 정책에 지정된 태그 키 값 중 하나를 포함하는 두 개의 보안 주체 태그 키(*department*와 *role*)를 모두 가지고 있어야 합니다. `ArnNotLike` 조건 연산자가 부정 일치를 사용하므로 요청하는 사용자의 보안 주체 ARN이 정책에서 지정된 `aws:PrincipalArn` 값 중에서 일치하는 게 없어야 true로 평가됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePolicy",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:root"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/department": [
            "finance",
            "hr",
            "legal"
          ],
          "aws:PrincipalTag/role": [
            "audit",
            "security"
          ]
        },
        "ArnNotLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::222222222222:user/Ana",
            "arn:aws:iam::222222222222:user/Mary"
          ]
        }
      }
    }
  ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: legal<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki<br /></pre>  |  **일치 항목 있음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: audit<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Mary</pre>  | **일치 항목 없음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalTag/role: payroll<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **일치 항목 없음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | >요청 컨텍스트에 `aws:PrincipalTag/role`가 없습니다. <pre>aws:PrincipalTag/department: hr<br />aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **일치 항목 없음** | 
|  <pre>"StringEquals": {<br />  "aws:PrincipalTag/department": [<br />    "finance",<br />    "hr",<br />    "legal"<br />  ],<br />  "aws:PrincipalTag/role": [<br />    "audit",<br />    "security"<br />  ]<br />},<br />"ArnNotLike": {<br />  "aws:PrincipalArn": [<br />      "arn:aws:iam::222222222222:user/Ana",<br />      "arn:aws:iam::222222222222:user/Mary"<br />  ]<br />}</pre>  | 요청 컨텍스트에 `aws:PrincipalTag`가 없습니다. <pre>aws:PrincipalArn:<br />  arn:aws:iam::222222222222:user/Nikki</pre>  | **일치 항목 없음**  | 

# 단일 값 vs. 다중 값 컨텍스트 키
<a name="reference_policies_condition-single-vs-multi-valued-context-keys"></a>

단일 값 및 다중 값 컨텍스트 키의 차이점은 정책 조건의 값 수가 아니라 [요청 컨텍스트](intro-structure.md#intro-structure-request)의 값 수에 있습니다.
+ **단일 값 조건 컨텍스트 키는 요청 컨텍스트에서 최대 하나의 값을 갖습니다. 예를 들어 AWS에서 리소스에 태그를 지정하면 각 리소스 태그가 키 값 페어로 저장됩니다. 리소스 태그 키는 단일 태그 값만 가질 수 있으므로 [aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag)는 단일 값 컨텍스트 키입니다. 단일 값 컨텍스트 키에는 조건 집합 연산자를 사용하지 마세요.
+ **다중 값 조건 컨텍스트 키는 요청 컨텍스트에서 여러 값을 가질 수 있습니다. 예를 들어, AWS에서 리소스에 태그를 지정하면 단일 요청에 여러 태그 키 값 페어를 포함할 수 있습니다. 따라서 [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys)는 다중 값 컨텍스트 키입니다. 다중 값 컨텍스트 키에는 조건 집합 연산자가 필요합니다.

예를 들어, 요청은 최대 하나의 VPC 엔드포인트에서 시작될 수 있으므로 [aws:SourceVpce](reference_policies_condition-keys.md#condition-keys-sourcevpce)의 경우 단일 값 컨텍스트 키입니다. 서비스에는 서비스에 속한 서비스 보안 주체 이름이 두 개 이상 있을 수 있으므로 [aws:PrincipalServiceNamesList](reference_policies_condition-keys.md#condition-keys-principalservicenameslist)의 경우 다중 값 컨텍스트 키입니다.

**중요**  
단일 값 컨텍스트 키와 다중 값 컨텍스트 키의 차이는 정책 조건의 값 수가 아니라 요청 컨텍스트의 값 수에 따라 달라집니다.

## 중요 사항
<a name="reference_policies_condition-key-points"></a>
+ **단일 값 및 **다중 값 분류는 [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md) 주제의 **값 유형으로 각 조건 컨텍스트 키의 설명에 포함됩니다.
+ [서비스 권한 부여 참조](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)의 다중 값 컨텍스트 키는 `ArrayOf` 접두사 뒤에 조건 연산자 범주 유형(예: `ArrayOfString` 또는 `ArrayOfARN`)을 사용하여 요청에 조건 컨텍스트 키에 대한 여러 값이 포함될 수 있음을 나타냅니다.
+ 사용 가능한 단일 값 컨텍스트 키를 정책 변수로 사용할 수 있습니다. 하지만 다중 값 컨텍스트 키는 정책 변수로 사용할 수 없습니다. 정책 변수에 대한 자세한 내용은 [IAM 정책 요소: 변수 및 태그](reference_policies_variables.md) 섹션을 참조하세요.
+ 키 값 페어가 포함된 컨텍스트 키를 사용하는 경우 태그 키 값이 여러 개 있을 수 있지만 각 `tag-key`에는 하나의 값만 보유할 수 있습니다.
  + [aws:PrincipalTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-principaltag), [aws:RequestTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-requesttag) 및 [aws:ResourceTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-resourcetag)는 단일 값 컨텍스트 키입니다.
  + [aws:TagKeys](reference_policies_condition-keys.md#condition-keys-tagkeys)는 요청에서 허용되는 태그 키를 정의하지만 태그 키 값은 포함하지 않습니다. 요청에 여러 개의 태그 키 값 페어를 포함할 수 있으므로 `aws:TagKeys`는 다중 값 컨텍스트 키가 될 수 있습니다.
+ 다중 값 컨텍스트 키에는 조건 집합 연산자가 필요합니다. 단일 값 컨텍스트 키에는 조건 집합 연산자 `ForAllValues` 또는 `ForAnyValue`를 사용하지 마세요. 단일 값 컨텍스트 키와 함께 조건 집합 연산자를 사용하면 정책이 과도하게 허용될 수 있습니다.

## 다중 값 컨텍스트 키에 대한 연산자 설정
<a name="reference_policies_condition-multi-valued-context-keys"></a>

조건 컨텍스트 키를 여러 키 값이 있는 [요청 컨텍스트](intro-structure.md#intro-structure-request)와 비교하려면 `ForAllValues` 또는 `ForAnyValue` 집합 연산자를 사용해야 합니다. 이러한 집합 연산자는 요청의 태그 집합 및 정책 조건의 태그 집합과 같이 두 값 집합을 비교하는 데 사용됩니다.

`ForAllValues` 및 `ForAnyValue` 한정자는 조건 연산자에 집합 연산 기능을 추가하므로 여러 값이 포함된 요청 컨텍스트 키를 정책 조건의 여러 컨텍스트 키 값에 대해 테스트할 수 있습니다. 또한 와일드카드 또는 변수를 사용하여 정책에 다중 값 문자열 컨텍스트 키를 포함하는 경우 `StringLike` [조건 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용해야 합니다. 여러 조건 키 값은 [배열](reference_policies_grammar.md#policies-grammar-json)처럼 대괄호로 묶어야 합니다(예: `"Key2":["Value2A", "Value2B"]`).

### ForAllValues
<a name="reference_policies_condition-forallvalues"></a>

`ForAllValues` 한정자는 요청 컨텍스트의 모든 멤버 값이 한정자를 따르는 조건 연산자와 일치하는지 테스트합니다. 요청의 모든 컨텍스트 키 값이 정책에 있는 컨텍스트 키 값과 일치하면 조건이 `true`를 반환합니다. 요청에 컨텍스트 키가 없는 경우에도 `true`를 반환합니다.

**중요**  
`Allow` 효과와 함께 `ForAllValues`를 사용하는 경우 요청 컨텍스트에 누락된 컨텍스트 키가 예상치 못하게 존재하면 지나치게 허용적일 수 있으므로 주의하세요. 항상 정책의 [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 조건 연산자에 `false` 값을 포함하여 컨텍스트 키가 존재하는지와 그 값이 null이 아닌지 확인해야 합니다. 문제 해결 예는 [태그 키를 기반으로 액세스 제어](access_tags.md#access_tags_control-tag-keys)을(를) 참조하세요.

#### ForAllValues 세트 연산자 예제
<a name="reference_policies_condition-forallvalues-example"></a>

다음 예제에서는 사용자가 EC2 인스턴스에 할당된 특정 태그를 삭제할 수 있도록 aws:TagKeys와 함께 ForAllValues를 사용합니다. 이 정책을 사용하면 사용자는 `environment` 및 `cost-center` 태그만 삭제할 수 있습니다. 이러한 태그를 개별적으로 또는 함께 삭제할 수 있습니다. 요청의 태그 키는 정책의 지정된 키와 정확히 일치해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                },
                "Null": {
                    "aws:TagKeys": "false"
                }
            }
        }
    ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **일치 항목 없음**  | 
|  <pre>"ForAllValues:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />},<br />"Null": {<br />  "aws:TagKeys": "false"<br />}</pre>  |  요청 컨텍스트에 `aws:TagKeys`가 없습니다.  |  **일치 항목 없음**  | 

마지막 예제에서 결과가 '일치 항목 없음'입니다. 이는 컨텍스트 키가 누락된 경우 Null 조건 검사에서 일치를 방지하기 때문입니다. 이는 지나치게 허용적인 정책을 피하는 가장 좋은 방법입니다.

### ForAnyValue
<a name="reference_policies_condition-foranyvalue"></a>

`ForAnyValue` 한정자는 요청 컨텍스트 키 값 집합에서 하나 이상의 멤버가 정책 조건의 컨텍스트 키 값 세트에서 하나 이상의 멤버와 일치하는지 테스트합니다. 요청의 컨텍스트 키 값 중 하나가 정책의 컨텍스트 키 값 중 하나와 일치하면 조건은 `true`를 반환합니다. 일치하는 컨텍스트 키가 없거나 키가 존재하지 않는 경우 조건은 `false`를 반환합니다.

**중요**  
`Deny` 효과와 함께 `ForAnyValue`를 사용하는 경우 요청에 컨텍스트 키가 없으면 정책은 **일치 항목 없음**으로 평가합니다. 일관된 동작을 위해 정책에 명시적 [`Null`](reference_policies_elements_condition_operators.md#Conditions_Null) 조건 검사를 추가하여 컨텍스트 키가 있는지 확인하세요. 자세한 내용은 [조건 키의 존재를 확인하는 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_Null)을 참조하세요.

#### ForAnyValue 세트 연산자 예제
<a name="reference_policies_condition-foranyvalue-example"></a>

다음 예제에서는 사용자가 EC2 인스턴스에 할당된 특정 태그를 삭제할 수 있도록 aws:TagKeys와 함께 ForAnyValue를 사용합니다. 이 정책을 사용하면 요청에 지정된 태그 키에 `environment` 또는 `cost-center`가 포함된 경우 사용자가 인스턴스의 태그를 삭제할 수 있습니다. 요청에는 정책에 지정된 것 외에 추가 태그 키가 포함될 수 있지만, 조건과 일치하려면 지정된 키 중 하나 이상을 포함해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DeleteTags",
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "environment",
                        "cost-center"
                    ]
                }
            }
        }
    ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – cost-center</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – cost-center</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – dept</pre>  |  **일치 항목 있음**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – dept</pre>  |  **일치 항목 없음**  | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": [<br />    "environment",<br />    "cost-center"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `aws:TagKeys`가 없습니다.  |  **일치 항목 없음**  | 

# 조건 정책 예제
<a name="reference_policies_condition_examples"></a>

IAM 정책에서 요청 컨텍스트와 비교하기 위해 단일 값 및 다중 값 컨텍스트 키 모두에 대해 여러 값을 지정할 수 있습니다. 다음은 다수의 컨텍스트 키와 값을 포함한 정책 조건을 보여주는 일련의 정책 예제입니다.

**참고**  
이 참조 설명에 포함시킬 정책을 제출하고자 하는 경우 이 페이지의 하단에 있는 **의견** 버튼을 사용합니다. IAM 자격 증명 기반 정책의 예는 [IAM 자격 증명 기반 정책의 예](access_policies_examples.md) 섹션을 참조하세요.

## 조건 정책 예: 단일 값 컨텍스트 키
<a name="reference_policies_condition_example_library_single-valued"></a>
+ 단일 값 컨텍스트 키가 있는 다수의 조건 블록. ([이 예제 보기](reference_policies_condition_examples-single-valued-context-keys.md#reference_policies_condition_examples-single-valued-context-keys-1).)
+ 다수의 단일 값 컨텍스트 키와 값이 있는 하나의 조건 블록. ([이 예제 보기](reference_policies_condition_examples-single-valued-context-keys.md#reference_policies_condition_examples-single-valued-context-keys-2).)

## 조건 정책 예: 다중 값 컨텍스트 키
<a name="reference_policies_condition_example_library_multi-valued"></a>
+ 조건 집합 연산자 `ForAllValues`를 포함하는 거부 정책 ([이 예제 보기](reference_policies_condition_examples-multi-valued-context-keys.md#reference_policies_condition_examples-multi-valued-context-keys-1).)
+ 조건 집합 연산자 `ForAnyValue`를 포함하는 거부 정책 ([이 예제 보기](reference_policies_condition_examples-multi-valued-context-keys.md#reference_policies_condition_examples-multi-valued-context-keys-2).)

# 다중 값 컨텍스트 키 예제
<a name="reference_policies_condition_examples-multi-valued-context-keys"></a>

다음은 다중 값 컨텍스트 키로 정책 조건을 만드는 방법을 보여주는 일련의 정책 예제입니다.

## 예: 조건 집합 연산자 ForAllValues를 포함한 거부 정책
<a name="reference_policies_condition_examples-multi-valued-context-keys-1"></a>

다음 예제에서는 ID 기반 정책을 사용하여 요청에 특정 태그 키 접두사가 포함된 경우 IAM 태깅 작업의 사용을 거부하는 방법을 보여줍니다. [`aws:TagKeys`](reference_policies_condition-keys.md#condition-keys-tagkeys) 값에는 부분 문자열 일치를 위한 와일드카드(\$1)가 포함됩니다. 정책에는 컨텍스트 키 `aws:TagKeys`가 포함된 `ForAllValues` 집합 연산자가 포함되는데, 요청 컨텍스트 키에 여러 값이 포함될 수 있기 때문입니다. 컨텍스트 키 `aws:TagKeys`가 일치하려면 요청 컨텍스트의 모든 값이 정책에서 하나 이상의 값과 일치해야 합니다.

요청에 컨텍스트 키가 없는 경우에도 `ForAllValues` 세트 연산자는 true를 반환합니다.

요청의 컨텍스트 키가 존재하고 그 값이 null이 아닌지 확인하기 위해 정책에 값이 `false`인 `Null` 조건 연산자를 포함하면 컨텍스트 키가 누락되거나 값이 비어 있는 컨텍스트 키가 true로 평가되는 것을 방지할 수 있습니다. 자세한 내용은 [조건 키의 존재를 확인하는 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_Null) 섹션을 참조하세요.

**중요**  
이 정책은 어떤 작업도 허용하지 않습니다. 이 정책을 특정 작업을 허용하는 다른 정책과 함께 사용합니다.

**Example 다중 값 컨텍스트 키에 대한 단일 정책 조건 값 거부**  
다음 예제에서 정책은 요청의 `aws:TagKeys` 값에 접두사 **key1**이 포함되지 않은 요청을 거부합니다. 요청 컨텍스트에는 여러 값이 있을 수 있지만 `ForAllValues` 조건 세트 연산자 때문에 요청 컨텍스트의 모든 태그 키 값은 접두사 **key1**로 시작해야 합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyRestrictedTags",
      "Effect": "Deny",
      "Action": [
        "iam:Tag*",
        "iam:UnTag*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:TagKeys": "key1*"
        }
      }
    }
  ]
}
```
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다. 거부 문의 경우 일치 항목 있음은 거부되고 일치 항목 없음은 거부되지 않으므로 다른 문에서 허용될 수 있습니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | <pre>aws:TagKeys:<br />  – key2:audit</pre>  | **일치 항목 있음** | 
| <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": "key1*"<br />}</pre>  | 요청 컨텍스트에 `aws:TagKeys`가 없습니다.  | **일치 항목 있음** | 

**Example 다중 값 컨텍스트 키에 대한 여러 정책 조건 값 거부**  
다음 예제에서 정책은 요청의 `aws:TagKeys` 값에 접두사 **key1** 또는 **key2**가 포함되지 않은 요청을 거부합니다. 요청 컨텍스트에는 여러 값이 있을 수 있지만 `ForAllValues` 조건 세트 연산자 때문에 요청 컨텍스트의 모든 태그 키 값은 접두사 **key1** 또는 **key2**로 시작해야 합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyRestrictedTags",
      "Effect": "Deny",
      "Action": [
        "iam:Tag*",
        "iam:UnTag*"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "ForAllValues:StringNotLike": {
          "aws:TagKeys": [
            "key1*",
            "key2*"
          ]
        }
      }
    }
  ]
}
```
다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다. 거부 문의 경우 일치 항목 있음은 거부되고 일치 항목 없음은 거부되지 않으므로 다른 문에서 허용될 수 있습니다.  


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAllValues:StringNotLike": {<br />  "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:legal</pre>  |  **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key1:personnel</pre>  | **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key1:hr<br />  – key2:audit</pre>  | **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | <pre>aws:TagKeys:<br />  – key3:legal</pre>  | **일치 항목 있음**  | 
| <pre>"ForAllValues:StringNotLike": {<br />   "aws:TagKeys": [<br />    "key1*",<br />    "key2*"<br />  ]<br />}</pre>  | 요청 컨텍스트에 `aws:TagKeys`가 없습니다.  | **일치 항목 있음** | 

## 예: 조건 집합 연산자 ForAnyValue를 포함한 거부 정책
<a name="reference_policies_condition_examples-multi-valued-context-keys-2"></a>

다음 자격 증명 기반 정책 예제는 정책에 지정된 태그 키(`environment` 또는 `webserver`) 중 하나로 태그가 지정된 스냅샷이 있는 경우 EC2 인스턴스 볼륨의 스냅샷 생성을 거부합니다. 정책에는 컨텍스트 키 `aws:TagKeys`가 포함된 `ForAnyValue` 집합 연산자가 포함되는데, 요청 컨텍스트 키에 여러 값이 포함될 수 있기 때문입니다. 정책에 지정된 태그 키 값 중 하나가 태깅 요청에 포함된 경우 `aws:TagKeys` 컨텍스트 키는 true를 반환하여 거부 정책 효과를 간접적으로 호출합니다.

**중요**  
이 정책은 어떤 작업도 허용하지 않습니다. 이 정책을 특정 작업을 허용하는 다른 정책과 함께 사용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2:CreateSnapshot",
        "ec2:CreateSnapshots"
      ],
      "Resource": "arn:aws:ec2:us-west-2::snapshot/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": "webserver"
        }
      }
    }
  ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다. 거부 문의 경우 일치 항목 있음은 거부되고 일치 항목 없음은 거부되지 않으므로 다른 문에서 허용될 수 있습니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – webserver</pre>  | **일치 항목 있음** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – webserver<br />  – test</pre>  |  **일치 항목 있음** | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | <pre>aws:TagKeys:<br />  – environment<br />  – test</pre>  | **일치 항목 없음** 다른 문에서 허용될 수 있습니다. | 
|  <pre>"ForAnyValue:StringEquals": {<br />  "aws:TagKeys": "webserver"<br />}</pre>  | 요청 컨텍스트에 `aws:TagKeys`가 없습니다.  | **일치 항목 없음** 다른 문에서 허용될 수 있습니다.  | 

# 단일 값 컨텍스트 키 정책 예제
<a name="reference_policies_condition_examples-single-valued-context-keys"></a>

다음은 단일 값 컨텍스트 키로 정책 조건을 만드는 방법을 보여주는 일련의 정책 예제입니다.

## 예: 단일 값 컨텍스트 키가 있는 다수의 조건 블록
<a name="reference_policies_condition_examples-single-valued-context-keys-1"></a>

조건 블록에 각각 단일 컨텍스트 키가 있는 다수의 조건이 있는 경우 모든 컨텍스트 키가 true로 확인되어야 원하는 `Allow` 또는 `Deny` 효과가 간접적으로 호출됩니다. 부정 일치 조건 연산자를 사용하면 조건 값의 평가 로직이 반전됩니다.

다음 예제에서는 사용자가 EC2 볼륨을 생성하고 볼륨 생성 도중 볼륨에 태그를 적용합니다. 요청 컨텍스트에는 컨텍스트 키 `aws:RequestTag/project`의 값이 포함되어야 하고, 컨텍스트 키 `aws:ResourceTag/environment`의 값은 프로덕션 이외의 모두 가능합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CreateVolume",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ec2:CreateTags",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*",
      "Condition": {
        "StringLike": {
          "aws:RequestTag/project": "*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:CreateTags",
      "Resource": "arn:aws:ec2:us-east-1:123456789012:*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceTag/environment": "production"
        }
      }
    }
  ]
}
```

------

요청 컨텍스트에는 프로젝트 태그-값이 포함되어야 하고 프로덕션 리소스가 `Allow` 효과를 간접적으로 호출하도록 생성할 수 없습니다. 프로젝트 이름이 `Feature3`이고 `QA` 리소스 태그가 있으므로 다음 EC2 볼륨이 생성됩니다.

```
aws ec2 create-volume \
    --availability-zone us-east-1a \
    --volume-type gp2 \
    --size 80 \
    --tag-specifications 'ResourceType=volume,Tags=[{Key=project,Value=Feature3},{Key=environment,Value=QA}]'
```

## 예: 다수의 단일 값 컨텍스트 키와 값이 있는 하나의 조건 블록
<a name="reference_policies_condition_examples-single-valued-context-keys-2"></a>

조건 블록에 다수의 컨텍스트 키가 있고 각 컨텍스트 키에 다수의 값이 있는 경우 각 컨텍스트 키가 true로 확인되어야 원하는 `Allow` 또는 `Deny` 효과에서 하나 이상의 키 값이 간접적으로 호출됩니다. 부정 일치 조건 연산자를 사용하면 컨텍스트 키 값의 평가 로직이 반전됩니다.

다음 예제를 통해 사용자는 Amazon Elastic Container Service 클러스터에서 작업을 시작하고 실행할 수 있습니다.
+ 요청 컨텍스트에는 `aws:RequestTag/environment` 컨텍스트 키 **AND**에 대해 `production` **또는** `prod-backup`가 포함되어야 합니다.
+ `ecs:cluster` 컨텍스트 키를 통해 작업이 `default1` **또는** `default2` ARN ECS 클러스터터에서 실행됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:RunTask",
        "ecs:StartTask"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/environment": [
            "production",
            "prod-backup"
          ]
        },
        "ArnEquals": {
          "ecs:cluster": [
            "arn:aws:ecs:us-east-1:111122223333:cluster/default1",
            "arn:aws:ecs:us-east-1:111122223333:cluster/default2"
          ]
        }
      }
    }
  ]
}
```

------

다음 표에서는 AWS가 요청에 있는 조건 키 값을 기반으로 이 정책을 평가하는 방법을 보여줍니다.


| 정책 조건 | 요청 컨텍스트 | 결과 | 
| --- | --- | --- | 
|  <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default1</pre>  | 일치 항목 있음 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: environment:prod-backup<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 일치 항목 있음 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  | <pre>aws:RequestTag: webserver:production<br />ecs:cluster:<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 일치 항목 없음 | 
| <pre>"StringEquals": {<br />  "aws:RequestTag/environment": [<br />    "production",<br />    "prod-backup"<br />  ]<br />},<br />"ArnEquals": {<br />  "ecs:cluster": [<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default1",<br />    "arn:aws:ecs:us-east-1:111122223333:cluster/default2"<br />  ]<br />}</pre>  |  요청 컨텍스트에 `aws:RequestTag`가 없습니다. <pre>ecs:cluster<br />  arn:aws:ecs:us-east-1:111122223333:cluster/default2</pre>  | 일치 항목 없음 | 

# IAM 정책 요소: 변수 및 태그
<a name="reference_policies_variables"></a>

정책 작성 시 리소스나 조건 키의 정확한 값을 모를 경우 AWS Identity and Access Management(IAM) 정책 변수를 자리 표시자로 사용하세요.

**참고**  
AWS에서 변수를 확인할 수 없는 경우 전체 문이 잘못되는 문제가 발생할 수 있습니다. 예를 들어 `aws:TokenIssueTime` 번수를 사용하는 경우 변수는 요청자가 임시 자격 증명을 사용하여 인증된 경우(IAM 역할)에만 값을 확인합니다. 잘못된 문을 유발하는 변수를 방지하려면 [...IfExists 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_IfExists)를 사용하세요.

**Topics**
+ [소개](#policy-vars-intro)
+ [정책에 변수 사용](#policy-vars-using-variables)
+ [정책 변수로서의 태그](#policy-vars-tags)
+ [정책 변수를 사용할 수 있는 경우](#policy-vars-wheretouse)
+ [값이 없는 정책 변수](#policy-vars-no-value)
+ [정책 변수로 사용할 수 있는 요청 정보](#policy-vars-infotouse)
+ [기본값 지정하기](#policy-vars-default-values)
+ [자세한 정보](#policy-vars-formoreinfo)

## 소개
<a name="policy-vars-intro"></a>

IAM 정책에서는 다양한 작업을 통해 액세스를 제어하려는 특정 리소스에 이름을 지정할 수 있습니다. 예를 들어, 다음 정책은 사용자가 `marketing` 프로젝트를 위해 S3 버킷 `amzn-s3-demo-bucket`의 객체를 나열하고, 읽고, 쓸 수 있도록 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
      "Condition": {"StringLike": {"s3:prefix": ["marketing/*"]}}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/marketing/*"]
    }
  ]
}
```

------

정책을 작성하다 보면 정확한 리소스 이름을 모를 때도 있습니다. 사용자마다 고유한 정책 사본을 만들 필요 없이 여러 사용자에게 작용하도록 정책을 일반화해야 할 수 있습니다. 각 사용자별로 별도의 정책을 생성하는 대신, 해당 그룹의 모든 사용자에게 적용되는 단일 그룹 정책을 생성하는 것이 좋습니다.

## 정책에 변수 사용
<a name="policy-vars-using-variables"></a>

정책에서 자리 표시자를 설정하는 *정책 변수*를 사용하여 정책 내에서 동적 값을 정의할 수 있습니다.

변수는 요청에 있는 값의 변수 이름을 감싸는 중괄호 한 쌍(**`{ }`**)을 사용하여 **`$`** 접두사 뒤에 표시됩니다.

정책을 평가할 때는 이 정책 변수가 요청에서 전달되는 조건 컨텍스트 키에서 온 값으로 바뀝니다. 변수는 [아이덴티티 기반 정책, 리소스 정책, 서비스 제어 정책, 세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) 및 [VPC 엔드포인트 정책](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)에 사용할 수 있습니다. 권한 경계로 사용되는 아이덴티티 기반 정책은 정책 변수도 지원합니다.

글로벌 조건 컨텍스트 키는 AWS 서비스 전반의 요청에서 변수로 사용할 수 있습니다. 서비스별 조건 키는 AWS 리소스와 상호 작용할 때 변수로도 사용할 수 있지만, 이러한 조건 키를 지원하는 리소스에 대한 요청을 할 때만 사용할 수 있습니다. 각 AWS 서비스 및 리소스에 사용할 수 있는 컨텍스트 키 목록은 [https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html](https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html)를 참조하세요. 특정 상황에서는 글로벌 조건 컨텍스트 키에 값을 채울 수 없습니다. 각 키에 대한 자세한 내용은 [AWS 글로벌 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.

**중요**  
키 이름은 대/소문자를 구분하지 않습니다. 예를 들어, `aws:CurrentTime`은 `AWS:currenttime`과 같습니다.
단일 값 조건 키를 변수로 사용할 수 있습니다. 다중 값 조건 키는 변수로 사용할 수 없습니다.

다음 예에서는 특정 리소스 이름을 정책 변수로 대체하는 IAM 역할 또는 사용자에 대한 정책을 보여줍니다. `aws:PrincipalTag` 조건 키를 활용하여 이 정책을 재사용할 수 있습니다. 이 정책을 평가할 때 `${aws:PrincipalTag/team}`은 버킷 이름이 `team` 보안 주체 태그의 팀 이름으로 끝나는 경우에만 작업을 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:PrincipalTag/team}/*"]}}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],      
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/team}/*"]
    }
  ]
}
```

------

변수는 `$` 접두사 뒤에 중괄호(`{ }`)를 사용하여 표시합니다. `${ }` 문자 안에는 정책에서 사용할 요청 값의 이름을 추가할 수 있습니다. 사용할 수 있는 값은 이 페이지 후반에서 다루겠습니다.

이 글로벌 조건 키에 대한 자세한 내용은 글로벌 조건 키 목록의 [aws:PrincipalTag/*tag-key*](reference_policies_condition-keys.md#condition-keys-principaltag) 섹션을 참조하세요.

**참고**  
정책 변수를 사용하려면 `Version` 요소를 문에 추가해야 하며, 이때 버전은 정책 변수를 지원하는 버전으로 설정해야 합니다. 변수는 버전 `2012-10-17`에서 도입되었습니다. 정책 언어의 조기 버전은 정책 변수를 지원하지 않기 때문입니다. `Version` 요소를 추가하지 않고 해당 버전 날짜로 설정하면 `${aws:username}` 같은 변수가 정책에서 리터럴 문자열로 처리됩니다.  
`Version` 정책 요소는 정책 버전과 다릅니다. `Version` 정책 요소는 정책 내에서 사용되며 정책 언어의 버전을 정의합니다. 반면에 정책 버전은 IAM에서 고객 관리형 정책을 변경할 때 생성됩니다. 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 생성합니다. `Version` 정책 요소에 대한 자세한 정보는 [IAM JSON 정책 요소: Version](reference_policies_elements_version.md)을 참조하세요. 정책 버전에 대한 자세한 정보는 [IAM 정책 버전 관리](access_policies_managed-versioning.md) 섹션을 참조하세요.

보안 주체가 S3 버킷의 /David 경로에서 객체를 가져오도록 허용하는 정책은 다음과 같습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/David/*"
      ]
    }
  ]
}
```

------

이 정책이 사용자 `David`에게 연결된 경우 해당 사용자는 자신의 S3 버킷에서 객체를 가져오지만 각 사용자에 대해 사용자 이름을 포함하는 별도의 정책을 생성해야 합니다. 그런 다음 각 정책을 개별 사용자에 연결합니다.

정책 변수를 사용하여 재사용할 수 있는 정책을 생성할 수 있습니다. 다음 정책은 `aws:PrincipalTag`의 tag-key 값이 요청에서 전달된 tag-key `owner` 값과 일치하는 경우 사용자가 Amazon S3 버킷에서 객체를 가져올 수 있도록 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowUnlessOwnedBySomeoneElse",
    "Effect": "Allow",
    "Action": ["s3:GetObject"],    
    "Resource": ["*"],
    "Condition": {
        "StringEquals": {
          "s3:ExistingObjectTag/owner": "${aws:PrincipalTag/owner}"
        }
      }
    }
  ]
}
```

------

이와 같이 사용자 대신 정책 변수를 사용하는 경우 개별 사용자마다 별도의 정책이 있을 필요가 없습니다. 다음 예시에서는 임시 보안 자격 증명을 사용하여 제품 관리자가 수임하는 IAM 역할에 정책이 연결됩니다. 사용자가 Amazon S3 객체 추가를 요청하면 IAM은 현재 요청의 `dept` 태그 값을 `${aws:PrincipalTag}` 변수로 대체하고 정책을 평가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowOnlyDeptS3Prefix",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/dept}/*"
            ]
        }
    ]
}
```

------

## 정책 변수로서의 태그
<a name="policy-vars-tags"></a>

일부 AWS 서비스에서는 사용자 지정 속성을 해당 서비스가 생성한 리소스에 연결할 수 있습니다. 예를 들어 Amazon S3 버킷 또는 IAM 사용자에 태그를 적용할 수 있습니다. 태그는 키 값 페어입니다. 태그 키 이름을 정의하고, 해당 키 이름에 연결된 값을 정의합니다. 예를 들어 **department** 키와 **Human Resources** 값으로 태그를 만들 수 있습니다. IAM 엔터티 태그 지정에 대한 자세한 내용은 [AWS Identity and Access Management 리소스용 태그](id_tags.md) 섹션을 참조하세요. 다른 AWS 서비스에서 생성한 리소스에 대한 태그 지정 정보는 해당 서비스의 문서 섹션을 참조하세요. Tag Editor에 대한 자세한 내용은 *AWS Management Console 사용 설명서*의 [Tag Editor 작업](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html) 섹션을 참조하세요.

IAM 리소스에 태그를 추가하면 IAM 리소스를 쉽게 찾고, 구성하고, 추적할 수 있습니다. 또한 IAM 자격 증명에 태그를 지정하여 리소스에 대한 액세스를 제어하거나 자체 태그를 지정할 수 있습니다. 태그를 사용하여 액세스를 제어하는 방법에 대한 자세한 내용은 [태그를 사용하여 IAM 사용자 및 역할에 대한 액세스 제어](access_iam-tags.md) 섹션을 참조하세요.

## 정책 변수를 사용할 수 있는 경우
<a name="policy-vars-wheretouse"></a>

 정책 변수는 `Resource` 요소를 비롯해 `Condition` 요소의 문자열 비교에 사용할 수 있습니다.

### 리소스 요소
<a name="policy-vars-resourceelement"></a>

`Resource` 요소에서 정책 변수를 사용할 수 있지만, ARN의 리소스 부분에서만 사용할 수 있습니다. ARN의 이 부분은 5번째 콜론(:) 뒤에 나타납니다. 변수를 사용하여 서비스나 계정과 같이 5번째 콜론 앞의 ARN 부분을 바꿀 수 없습니다. ARN 형식에 대한 자세한 내용은 [IAM ARN](reference_identifiers.md#identifiers-arns) 섹션을 참조하세요.

ARN의 일부를 태그 값으로 바꾸려면 접두사와 키 이름을 `${ }`로 묶습니다. 예를 들어 다음 Resource 요소는 요청한 사용자의 department 태그 값과 동일한 이름의 버킷만 참조합니다.

`"Resource": ["arn:aws::s3:::amzn-s3-demo-bucket/${aws:PrincipalTag/department}"]`

많은 AWS 리소스에서 사용자가 생성한 이름이 포함된 ARN을 사용합니다. 다음 IAM 정책은 access-project, access-application 및 access-environment 태그 값이 일치하는 의도된 사용자만 리소스를 수정할 수 있도록 합니다. 또한 [\$1 와일드카드 일치](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)로 사용자 지정 리소스 이름 접미사를 허용할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessBasedOnArnMatching",
      "Effect": "Allow",
      "Action": [
        "sns:CreateTopic",
        "sns:DeleteTopic"],      
      "Resource": ["arn:aws:sns:*:*:${aws:PrincipalTag/access-project}-${aws:PrincipalTag/access-application}-${aws:PrincipalTag/access-environment}-*"
      ]
    }
  ]
}
```

------

### 조건 요소
<a name="policy-vars-conditionelement"></a>

문자열 연산자 또는 ARN 연산자와 관련된 모든 조건의 `Condition` 값에 정책 변수를 사용할 수 있습니다. 문자열 연산자는 `StringEquals`, `StringLike` 및 `StringNotLike`를 포함합니다. ARN 연산자에는 `ArnEquals` 및 `ArnLike`가 포함됩니다. `Numeric`, `Date`, `Boolean`, `Binary`, `IP Address` 또는 `Null` 연산자와 같은 다른 연산자와 함께 정책 변수를 사용할 수 없습니다. 조건 연산자에 대한 자세한 내용은 [IAM JSON 정책 요소: 조건 연산자](reference_policies_elements_condition_operators.md) 섹션을 참조하세요.

`Condition` 요소 표현식에서 태그를 참조할 때는 관련 접두사와 키 이름을 조건 키로 사용하세요. 그런 다음 조건 값에서 테스트할 값을 사용합니다.

예를 들어, 다음 정책 예에서는 `costCenter` 태그가 리소스에 연결된 경우에만 사용자에 대한 모든 액세스를 허용합니다. 태그의 값은 `12345` 또는 `67890`이어야 합니다. 태그에 값이 없거나 다른 값이 있으면 요청이 실패합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
          "iam:*user*"
       ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "iam:ResourceTag/costCenter": [ "12345", "67890" ]
        }
      }
    }
  ]
}
```

------

## 값이 없는 정책 변수
<a name="policy-vars-no-value"></a>

값이 없거나 요청의 승인 컨텍스트에 없는 조건 컨텍스트 키를 정책 변수에서 참조하는 경우, 해당 값은 사실상 null입니다. 같거나 비슷한 값이 없습니다. 다음과 같은 경우 승인 컨텍스트에 조건 컨텍스트 키가 없을 수 있습니다.
+ 해당 조건 키를 지원하지 않는 리소스에 대한 요청에서 서비스별 조건 컨텍스트 키를 사용하는 경우
+ IAM 보안 주체, 세션, 리소스 또는 요청의 태그가 없는 경우
+ [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md)에 각 글로벌 조건 컨텍스트 키별로 나열된 기타 상황

IAM 정책의 조건 요소에 값이 없는 변수를 사용하는 경우, `StringEquals` 또는 `StringLike`와 같은 [IAM JSON 정책 요소: 조건 연산자](reference_policies_elements_condition_operators.md)이(가) 일치하지 않고 정책 문이 적용되지 않습니다.

`StringNotEquals` 또는 `StringNotLike`와 같은 역 조건 연산자는 테스트 대상 조건 키의 값이 사실상 null 값과 같거나 비슷하지 않기 때문에 null 값에 대해 일치하지 않습니다.

다음 예에서는 액세스를 허용하려면 `aws:principaltag/Team`이 `s3:ExistingObjectTag/Team`과 같아야 합니다. `aws:principaltag/Team`이 설정되지 않은 경우 액세스가 명시적으로 거부됩니다. 승인 컨텍스트에 값이 없는 변수를 정책의 `Resource` 또는 `NotResource` 요소의 일부로 사용하는 경우, 값이 없는 정책 변수를 포함하는 리소스는 어떤 리소스와도 일치하지 않습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
   {
    "Effect": "Deny", 
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
      "StringNotEquals": {
        "s3:ExistingObjectTag/Team": "${aws:PrincipalTag/Team}"
       }
      }
    }
  ]
}
```

------

## 정책 변수로 사용할 수 있는 요청 정보
<a name="policy-vars-infotouse"></a>

 JSON 정책의 `Condition` 요소를 사용하여 [요청 컨텍스트](reference_policies_evaluation-logic_policy-eval-reqcontext.md)의 키를 정책에서 지정한 키 값과 비교할 수 있습니다. 정책 변수를 사용하는 경우 AWS은 정책의 변수 대신 요청 컨텍스트 키의 값을 대체합니다.

### 보안 주체 키 값
<a name="principaltable"></a>

`aws:username`, `aws:userid` 및 `aws:PrincipalType` 값은 요청을 시작한 보안 주체 유형에 따라 다릅니다. 예를 들어 요청은 IAM 사용자, IAM 역할 또는 AWS 계정 루트 사용자의 자격 증명을 사용하여 가능합니다. 다음은 다른 유형의 보안 주체에 사용되는 키 값을 나타낸 표 입니다.


****  

| 위탁자 | `aws:username` | `aws:userid` | `aws:PrincipalType` | 
| --- | --- | --- | --- | 
| AWS 계정 루트 사용자 | (없음) | AWS 계정 ID | Account | 
| IAM 사용자 | IAM-user-name | [고유 ID](reference_identifiers.md#identifiers-unique-ids) | User | 
| AWS STS 페더레이션 사용자 보안 주체 | (없음) | account:caller-specified-name | FederatedUser | 
| OIDC 페더레이션 보안 주체 웹 아이덴티티 페더레이션을 사용할 때 사용 가능한 정책 키에 대한 자세한 내용은 [AWS OIDC 페더레이션에서 사용 가능한 키](reference_policies_iam-condition-keys.md#condition-keys-wif) 단원을 참조하십시오. | (없음) |   *role-id*:*caller-specified-role-name*  여기서 `role-id`는 [역할의 고유 id](reference_identifiers.md#identifiers-unique-ids)이고 caller-specified-role-name은 AssumeRoleWithWebIdentity 요청에 전달된 [RoleSessionName 파라미터](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AssumeRole.html#API_AssumeRoleWithWebIdentity_RequestParameters)에 의해 지정됩니다.  | AssumedRole | 
| SAML 페더레이션 보안 주체 SAML 연동을 사용할 때 사용 가능한 정책 키에 대한 자세한 내용은 [SAML 기반 페더레이션에서 사용자를 고유하게 식별](id_roles_providers_saml.md#CreatingSAML-userid) 섹션을 참조하세요. | (없음) |  *role-id*:*caller-specified-role-name* 여기서 `role-id`는 [역할의 고유 ID](reference_identifiers.md#identifiers-unique-ids)이고 caller-specified-role-name은 [이름 속성](id_roles_providers_create_saml_assertions.md)이 https://aws.amazon.com/SAML/attributes/RoleSessionName으로 설정된 속성 요소에 의해 지정됩니다.  | AssumedRole | 
| 위임된 역할 | (없음) |  *role-id*:*caller-specified-role-name* 여기서 `role-id`는 [역할의 고유 id](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)이고 caller-specified-role-name은 AssumeRole 요청에 전달된 [RoleSessionName 파라미터](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html#API_AssumeRole_RequestParameters)에 의해 지정됩니다.  | AssumedRole | 
| Amazon EC2 인스턴스에 할당된 역할 | (없음) |  *role-id*:*ec2-instance-id* 여기서 `role-id`는 [역할의 고유 id](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)이고 ec2-instance-id는 [EC2 인스턴스의 고유 식별자](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)입니다.  | AssumedRole | 
| 익명 호출자(Amazon SQS, Amazon SNS 및 Amazon S3만 해당) | (없음) | anonymous | Anonymous | 

이 테이블, 에 있는 항목의 경우 다음을 참고하세요.
+ *없음*이란 현재 요청 정보에 값이 없다는 의미이며, 이때 일치시키려고 하면 실패하고 문이 잘못됩니다.
+ *role-id*는 각 역할 생성 시 할당되는 고유 식별자입니다. AWS CLI 명령 `aws iam get-role --role-name rolename`으로 역할 ID를 표시할 수 있습니다.
+ *caller-specified-name* 및 *caller-specified-role-name*은 임시 자격 증명을 가져오기 위해 호출할 때 호출 프로세스(예: 애플리케이션 또는 서비스 등)에서 전달되는 이름입니다.
+ *ec2-instance-id*는 실행 시 인스턴스에 할당되는 값으로서 Amazon EC2 콘솔의 **인스턴스** 페이지에 표시됩니다. 또한 AWS CLI 명령 `aws ec2 describe-instances`를 실행하여 인스턴스 ID를 표시할 수도 있습니다.

### 페더레이션 보안 주체 요청에 사용할 수 있는 정보
<a name="policy-vars-infoWIF"></a>

페더레이션 보안 주체란 IAM 외에 다른 시스템을 사용하여 인증된 사용자를 말합니다. 예를 들어 AWS 호출 시 자체적으로 애플리케이션을 사용하는 회사가 있다고 가정하겠습니다. 이때는 회사의 애플리케이션 사용자 모두에게 IAM 자격 증명을 제공하는 것이 현실적으로 어렵습니다. 대신에 단일 IAM 자격 증명을 갖춘 프록시(미들 티어) 애플리케이션을 사용하거나, SAML 자격 증명 공급자(IdP)를 사용할 수 있습니다. 프록시 애플리케이션이나 SAML IdP는 회사 네트워크를 사용해 각 사용자를 인증합니다. 그런 다음 프록시 애플리케이션이 IAM 자격 증명을 사용하여 개별 사용자에 대한 임시 보안 자격 증명을 얻을 수 있습니다. SAML IdP는 AWS 임시 보안 자격 증명에 대한 ID 정보를 사실상 교환할 수 있습니다. 이후 임시 자격 증명을 사용하면 AWS 리소스에 액세스할 수 있습니다.

이와 유사한 방식으로 앱을 통해 AWS 리소스에 액세스해야 하는 모바일 디바이스용 앱을 개발하는 것도 가능합니다. 이 경우 앱이 Login with Amazon, Amazon Cognito, Facebook 또는 Google과 같은 잘 알려진 ID 공급자를 사용하여 사용자를 인증하는 *OIDC 페더레이션*을 사용할 수 있습니다. 인증이 완료되면 앱이 공급자의 사용자 인증 정보를 사용하여 임시 보안 자격 증명을 가져온 후 AWS 리소스에 액세스합니다.

OIDC 페더레이션을 위해 가장 바람직한 방법은 Amazon Cognito와 AWS 모바일 SDK를 이용하는 것입니다. 자세한 내용은 다음을 참조하세요.
+ [Amazon Cognito 사용 설명서](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html) 
+ [임시 자격 증명과 관련된 일반적인 시나리오](id_credentials_temp.md#sts-introduction)

### 특수 문자
<a name="policy-vars-specialchars"></a>

정책 변수 중에는 다른 특별한 의미를 갖는 문자를 나타낼 수 있도록 사전에 정의되어 있는 고정 값의 변수들도 몇 가지 있습니다. 이 특수 문자들은 일치시키려는 문자열의 일부이지만 리터럴로 삽입하였다면 오해할 가능성이 있습니다. 예를 들어 문자열에 별표(\$1)를 삽입하면 리터럴(\$1)이 아닌 모든 문자와 일치하는 와일드카드로 해석될 수 있습니다. 이 경우에는 다음과 같이 사전에 정의된 정책 변수를 사용할 수 있습니다.
+ **\$1\$1\$1\$1** - \$1(별표)가 필요한 경우에 사용합니다.
+ **\$1\$1?\$1** - ?(물음표)가 필요한 경우에 사용합니다.
+ **\$1\$1\$1\$1** - \$1(달러 기호)가 필요한 경우에 사용합니다.

위처럼 사전 정의된 정책 변수들은 정규 정책 변수를 사용할 수 있는 문자열이라면 어디든지 사용 가능합니다.

## 기본값 지정하기
<a name="policy-vars-default-values"></a>

변수에 기본값을 추가하려면 기본값을 작은따옴표(`' '`)를 사용하고 변수 텍스트와 기본값을 쉼표와 공백(`, `)으로 묶습니다.

예를 들어, 보안 주체가 `team=yellow`(으)로 태그가 지정된 경우, `ExampleCorp's`(이)라는 이름의 `amzn-s3-demo-bucket-yellow` Amazon S3 버킷에 액세스할 수 있습니다. 이 리소스를 사용하는 정책을 사용하면 팀 구성원이 팀 버킷에 액세스할 수 있지만 다른 팀의 버킷에는 액세스할 수 없습니다. 팀 태그가 없는 사용자의 경우 버킷 이름의 기본값은 `company-wide`입니다. 이러한 사용자는 팀 참여에 대한 지침과 같은 광범위한 정보를 볼 수 있는 `amzn-s3-demo-bucket-company-wide` 버킷에만 액세스할 수 있습니다.

```
"Resource":"arn:aws:s3:::amzn-s3-demo-bucket-${aws:PrincipalTag/team, 'company-wide'}"
```

## 자세한 정보
<a name="policy-vars-formoreinfo"></a>

정책에 대한 자세한 정보는 다음 섹션을 참조하세요.
+  [AWS Identity and Access Management의 정책 및 권한](access_policies.md) 
+  [IAM 자격 증명 기반 정책의 예](access_policies_examples.md) 
+  [IAM JSON 정책 요소 참조](reference_policies_elements.md) 
+  [정책 평가 로직](reference_policies_evaluation-logic.md) 
+  [OIDC 페더레이션](id_roles_providers_oidc.md)

# IAM JSON 정책 요소: 지원되는 데이터 형식
<a name="reference_policies_elements_datatypes"></a>

이 단원에서는 JSON 정책에서 값을 지정할 때 지원되는 데이터 형식을 설명합니다. 정책 언어는 각 정책 요소마다 모든 형식을 지원하지 않기 때문에 각 요소에 대한 자세한 내용은 이전 섹션을 참조하세요.
+ 문자열
+ 숫자(정수 및 부동 소수점)
+ 부울
+ Null
+ Lists
+ Maps
+ 구조(중첩 맵)

다음은 각 데이터 형식을 직렬화로 매핑한 표입니다. 모든 정책은 UTF-8 형식을 따라야 합니다. JSON 데이터 형식에 대한 자세한 내용은 [RFC 4627](https://datatracker.ietf.org/doc/html/rfc4627)에서 확인할 수 있습니다.


****  

| Type | JSON | 
| --- | --- | 
|  문자열  |  문자열  | 
|  Integer  |  숫자  | 
|  Float  |  숫자  | 
|  부울  |  true false  | 
|  Null  |  null  | 
|  날짜  |  [ISO 8601의 W3C 프로파일](http://www.w3.org/TR/NOTE-datetime)을 준수하는 문자열  | 
|  IpAddress  |  [RFC 4632](https://datatracker.ietf.org/doc/html/rfc4632)를 준수하는 문자열  | 
|  List  |  배열  | 
|  객체  |  객체  | 

# 정책 평가 로직
<a name="reference_policies_evaluation-logic"></a>

보안 주체가 AWS Management Console, AWS API 또는 AWS CLI를 사용하려고 시도하면 해당 보안 주체가 *요청*을 AWS에 전송합니다. AWS 서비스가 요청을 받으면 AWS는 여러 단계를 완료하여 요청을 허용할지 거부할지 여부를 결정합니다.

1. **인증** - AWS는 먼저 필요하다면 요청을 생성하는 보안 주체를 인증합니다. 이 단계는 익명 사용자의 요청을 허용하는 Amazon S3와 같은 일부 서비스에서는 필요하지 않습니다.

1. **[요청 컨텍스트 처리](reference_policies_evaluation-logic_policy-eval-reqcontext.md)** – AWS는 요청에 담긴 내용을 처리하여 어떤 정책을 요청에 적용할지 결정합니다.

1. **[AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법](reference_policies_evaluation-logic_policy-eval-denyallow.md)** - AWS는 모든 정책 유형을 평가하며 정책의 순서는 정책 평가 방식에 영향을 미칩니다. 그런 다음 AWS는 요청 컨텍스트에 따라 정책을 처리하여 요청이 허용되는지 아니면 거부되는지 확인합니다.

## 리소스 기반 정책과 함께 자격 증명 기반 정책 평가
<a name="policy-eval-basics-id-rdp"></a>

자격 증명 기반 정책 및 리소스 기반 정책은 연결된 자격 증명이나 리소스에 권한을 부여합니다. IAM 엔터티(사용자 또는 역할)가 동일 계정 내에서 리소스에 대한 액세스를 요청할 경우 AWS는 자격 증명 기반 및 리소스 기반 정책을 통해 부여된 모든 권한을 평가합니다. 결과적으로 생성되는 권한은 두 유형의 권한을 합친 것입니다. 자격 증명 기반 정책, 리소스 기반 정책 또는 두 정책 모두에 의해 작업이 허용되는 경우 AWS에서는 해당 작업을 허용합니다. 이들 정책 중 하나에 포함된 명시적 거부는 허용을 재정의합니다.

![\[자격 증명 기반 정책 및 리소스 기반 정책 평가\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/permissions_policies_effective.png)


## 권한 경계와 함께 자격 증명 기반 정책 평가
<a name="policy-eval-basics-id-bound"></a>

AWS에서 사용자의 자격 증명 기반 정책 및 권한 경계를 평가하는 경우 결과적으로 두 범주의 공통된 권한만 권한으로 부여됩니다. 기존 자격 증명 기반 정책으로 사용자에 권한 경계를 추가하면 사용자가 수행할 수 있는 작업을 축소할 수 있습니다. 또는 사용자에게서 권한 경계를 제거하면 사용자가 수행할 수 있는 작업이 늘어날 수 있습니다. 이들 정책 중 하나에 포함된 명시적 거부는 허용을 재정의합니다. 다른 정책 유형을 권한 경계와 함께 평가하는 방식에 대해 자세히 알아보려면 [경계가 있는 효과적인 권한 평가](access_policies_boundaries.md#access_policies_boundaries-eval-logic) 섹션을 참조하세요.

![\[자격 증명 기반 정책 및 권한 경계 평가\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/permissions_boundary.png)


## AWS Organizations SCP 또는 RCP와 함께 자격 증명 기반 정책 평가
<a name="policy-eval-basics-id-scp"></a>

사용자가 조직의 멤버인 계정에 속하고 리소스 기반 정책이 구성되지 않은 리소스에 액세스하는 경우 결과 권한은 사용자 정책, 서비스 제어 정책(SCP) 및 리소스 제어 정책(RCP)의 교집합입니다. 즉, 세 가지 정책 유형 모두에서 작업을 허용해야 합니다. ID 기반 정책, SCP 또는 RCP의 명시적 거부는 허용을 재정의합니다.

![\[ID 기반 정책 및 SCP 또는 RCP 평가\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/permissions_scp-idp.png)


AWS Organizations에서 [계정이 조직의 멤버인지 여부](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_account)를 알아볼 수 있습니다. 조직 멤버가 SCP 또는 RCP의 영향을 받을 수 있습니다. AWS CLI 명령 또는 AWS API 작업을 사용하여 이 데이터를 보려면 AWS Organizations 엔터티에 대해 `organizations:DescribeOrganization` 작업 권한이 있어야 합니다. AWS Organizations 콘솔에서 작업을 수행할 추가 권한이 있어야 합니다. SCP 또는 RCP가 특정 요청에 대한 액세스를 거부하는지 여부를 확인하거나 유효 권한을 변경하려면 AWS Organizations 관리자에게 문의하세요.

# 요청 컨텍스트 처리
<a name="reference_policies_evaluation-logic_policy-eval-reqcontext"></a>

AWS가 요청을 평가하고 승인하면 요청 정보를 *요청 컨텍스트*로 어셈블합니다. 요청 컨텍스트에는 정책 평가에 사용할 수 있는 모든 정보가 포함됩니다.
+ ****보안 주체 - 요청을 보내는 사용자, 역할 또는 페더레이션 사용자 보안 주체입니다. 보안 주체에 대한 정보는 보안 주체와 관련된 정책을 포함합니다.
+ **작업** – 위탁자가 수행하고자 하는 1개 이상의 작업입니다.
+ **리소스** - 수행된 작업 또는 작동에 따른 1개 이상의 AWS 리소스 객체입니다.
+ **리소스 데이터** – 요청되는 리소스와 관련된 데이터. 여기에는 DynamoDB 테이블 이름 또는 Amazon EC2 인스턴스 태그와 같은 정보가 포함될 수 있습니다.
+ **환경 데이터** – IP 주소, 사용자 에이전트, SSL 사용 상태 또는 시간대와 같은 정보입니다.

이 정보를 해당 정책과 비교하여 요청을 허용할지 거부할지 여부를 결정합니다. AWS의 정책 평가 방법을 더 잘 이해하기 위해 보안 **위탁자**, **작업**, **리소스**, **조건**(PARC) 모델을 사용하여 이 속성 정보를 구성할 수 있습니다.

## PARC 모델 이해
<a name="reqcontext_parc-model"></a>

PARC 모델은 정책 언어의 네 가지 JSON 요소를 기반으로 요청 컨텍스트를 나타냅니다.
+ [Principal](reference_policies_elements_principal.md) - 요청하는 엔터티입니다. 위탁자는 사용자(사람) 또는 프로그래밍 워크로드를 대표하며, 이를 통해 인증 후 AWS 계정에서 작업을 수행할 수 있는 권한을 받습니다.
+ [Action](reference_policies_elements_action.md) - 수행 중인 작업입니다. 작업이 API 작업에 매핑되는 경우가 많습니다.
+ [Resource](reference_policies_elements_resource.md) - 작업이 수행되는 AWS 리소스입니다.
+ [Condition](reference_policies_elements_condition.md) - 요청을 허용하기 위해 충족해야 하는 추가 제약 조건입니다.

다음은 PARC 모델이 요청 컨텍스트를 나타내는 방법의 예를 보여줍니다.

```
Principal: AIDA123456789EXAMPLE
Action: s3:CreateBucket
Resource: arn:aws:s3:::amzn-s3-demo-bucket1
Context:
- aws:UserId=AIDA123456789EXAMPLE:BobsSession
- aws:PrincipalAccount=123456789012
- aws:PrincipalOrgId=o-example
- aws:PrincipalARN=arn:aws:iam::AIDA123456789EXAMPLE:role/HR
- aws:MultiFactorAuthPresent=true
- aws:CurrentTime=...
- aws:EpochTime=...
- aws:SourceIp=...
- aws:PrincipalTag/dept=123
- aws:PrincipalTag/project=blue
- aws:RequestTag/dept=123
```

## 요청 컨텍스트의 중요성
<a name="reqcontext_importance"></a>

요청 컨텍스트와 요청 컨텍스트가 정책 평가와 상호 작용하는 방식을 이해하는 것은 다음에 매우 중요합니다.
+ 액세스 문제 해결 
+ 효과적이고 안전한 정책 설계
+ 정책에서 부여한 권한의 전체 범위 이해
+ 다양한 시나리오에서 정책 평가 결과 예측

PARC 모델을 사용하여 요청 컨텍스트를 시각화하면 AWS가 권한 부여 결정을 내리고 정책을 더 효과적으로 설계하는 방법을 쉽게 이해할 수 있습니다.

## AWS가 요청 컨텍스트를 사용하는 방법
<a name="reqcontext_usage"></a>

AWS는 정책을 평가할 때 요청 컨텍스트의 정보를 해당하는 모든 정책에 지정된 정보와 비교합니다. 여기에는 ID 기반 정책, 리소스 기반 정책, IAM 권한 경계, 조직 SCP, 조직 RCP, 세션 정책이 포함됩니다.

각 정책 유형에 대해 AWS는 요청 컨텍스트를 사용하여 다음을 확인합니다.
+ 정책이 위탁자를 기반으로 요청에 적용되는지 여부
+ 요청된 작업이 지정된 리소스에서 허용되는지 여부
+ 정책에 지정된 조건이 요청 컨텍스트에 의해 충족되는지 여부

AWS는 요청 콘텍스트에 적용되는 정책 유형에 따라 정책을 평가합니다. 이러한 정책 유형은 단일 AWS 계정에서 사용할 수 있습니다. 이러한 정책 유형에 대한 자세한 정보는 [AWS Identity and Access Management의 정책 및 권한](access_policies.md) 섹션을 참조하세요. AWS에서 크로스 계정 액세스에 대한 정책을 평가하는 방법에 대한 자세한 내용은 [Cross-account policy evaluation logic](reference_policies_evaluation-logic-cross-account.md) 섹션을 참조하세요.
+ **AWS Organizations 리소스 제어 정책(RCP)** - AWS Organizations RCP는 조직 또는 조직 단위(OU)의 계정 내에서 리소스에 대해 사용 가능한 최대 권한을 지정합니다. RCP는 멤버 계정의 리소스에 적용되며, 위탁자가 조직에 속해 있는지 여부와 관계없이 AWS 계정 루트 사용자를 포함한 위탁자의 유효 권한에 영향을 줍니다. RCP는 조직 관리 계정의 리소스와 서비스 연결 역할에서 수행된 직접 호출에는 적용되지 않습니다. RCP가 있는 경우 ID 기반 및 리소스 기반 정책에 의해 멤버 계정의 리소스에 부여된 권한은 RCP가 해당 작업을 허용하는 경우에만 유효합니다.
+ **AWS Organizations 서비스 제어 정책(SCP)** - AWS Organizations SCP는 조직 또는 조직 단위(OU)의 계정 내에서 위탁자가 사용할 수 있는 최대 권한을 지정합니다. SCP는 각 AWS 계정 루트 사용자을 포함하여 멤버 계정의 위탁자에게 적용됩니다. SCP가 있는 경우 ID 기반 및 리소스 기반 정책에 의해 멤버 계정의 위탁자에게 부여된 권한은 SCP가 해당 작업을 허용하는 경우에만 유효합니다. 유일한 예외는 조직 관리 계정과 서비스 연결 역할의 위탁자입니다.
+ **리소스 기반 정책** - 리소스 기반 정책은 정책에 지정된 위탁자에게 권한을 부여합니다. 권한은 보안 주체가 정책이 연결된 리소스를 사용하여 수행할 수 있는 작업을 정의합니다.
+ **권한 경계** - 권한 경계는 ID 기반 정책을 통해 IAM 엔터티(사용자 또는 역할)에 부여할 수 있는 최대 권한을 설정하는 기능입니다. 엔터티에 대한 권한 경계를 설정할 경우 해당 엔터티는 ID 기반 정책 및 관련 권한 경계 모두에서 허용되는 작업만 수행할 수 있습니다. 경우에 따라, 권한 경계의 암시적 거부는 리소스 기반 정책에서 부여한 권한을 제한할 수 있습니다. 자세한 내용은 [AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법](reference_policies_evaluation-logic_policy-eval-denyallow.md) 섹션을 참조하세요.
+ **자격 증명 기반 정책** - 자격 증명 기반 정책은 IAM 자격 증명(사용자, 사용자 그룹 또는 역할)에 연결되어 IAM 엔터티(사용자 및 역할)에 권한을 부여합니다. 자격 증명 기반 정책만 요청에 적용되는 경우 AWS에서는 하나 이상의 `Allow`에 대해 이러한 정책을 모두 확인합니다.
+ ****세션 정책 - 세션 정책은 역할 또는 페더레이션 사용자 세션에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 정책입니다. 역할 세션을 프로그래밍 방식으로 생성하려면 `AssumeRole*` API 작업 중 하나를 사용합니다. 이를 수행하고 세션 정책을 전달할 때 결과적으로 얻는 세션의 권한은 IAM 엔터티의 자격 증명 기반 정책의 교차와 세션 정책입니다. 페더레이션 사용자 세션을 생성하려면 IAM 사용자 액세스 키를 사용하여 `GetFederationToken` API 작업을 프로그래밍 방식으로 호출합니다. 자세한 내용은 [세션 정책](access_policies.md#policies_session) 섹션을 참조하세요.

이러한 정책 중 하나에 포함된 명시적 거부는 허용을 재정의함을 명심하세요.

**참고**  
**AWS Organizations 선언적 정책**을 사용하면 조직 전체에 걸쳐 대규모로 지정된 AWS 서비스에 대해 원하는 구성을 중앙에서 선언하고 시행할 수 있습니다. 선언적 정책은 서비스 수준에서 직접 적용되므로 정책 평가 요청에 직접적인 영향을 미치지 않으며 요청 컨텍스트에 포함되지 않습니다. 자세한 내용은 AWS Organizations 사용 설명서의 [선언적 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)을 참조하세요.

## PARC 모델을 사용한 정책 평가 예제
<a name="reqcontext_example"></a>

요청 컨텍스트가 정책 평가와 상호 작용하는 방법을 설명하기 위해 예제 정책을 살펴보겠습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:CreateBucket",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/dept": "123"
        }
      }
    }
  ]
}
```

------

이 예제에서 정책은 요청 컨텍스트에 '123'의 `aws:PrincipalTag/dept` 값이 포함되고 리소스가 `amzn-s3-demo-bucket1` 버킷 이름과 일치하는 경우에만 `CreateBucket` 작업을 허용합니다. 다음 표는 AWS가 요청 컨텍스트를 사용하여 이 정책을 평가하고 권한 부여 결정을 내리는 방법을 보여줍니다.


| 정책 | 요청 컨텍스트 | 평가 결과 | 
| --- | --- | --- | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=123</pre>  | **일치 항목 있음** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:DeleteBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=123</pre>  | **일치 항목 없음** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:  <br />    - aws:PrincipalTag/dept=321</pre>  | **일치 항목 없음** | 
| <pre>"StringEquals": {<br />    "aws:PrincipalTag/dept": "123"<br />}</pre>  |  <pre>Principal: AIDA123456789EXAMPLE<br />Action: s3:CreateBucket<br />Resource: arn:aws:s3:::amzn-s3-demo-bucket1<br />Context:</pre> 요청에 `aws:PrincipalTag`가 없습니다.  | **일치 항목 없음** | 

# AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법
<a name="reference_policies_evaluation-logic_policy-eval-denyallow"></a>

AWS 적용 코드는 AWS로 전송된 요청을 허용할지 거부할지 결정합니다. AWS에서는 요청 컨텍스트에 적용될 수 있는 모든 정책을 평가합니다. 다음은 AWS 정책 평가 논리의 요약입니다.
+ 기본적으로 모든 요청이 암시적으로 거부됩니다. 단, 전체 액세스 권한이 있는 AWS 계정 루트 사용자는 예외입니다.
+ 요청이 허용되려면 아래 평가 로직에 따라 정책 또는 정책 세트에서 명시적으로 허용해야 합니다.
+ 명시적 거부는 명시적 허용을 재정의합니다.

정책 평가는 요청이 단일 계정 내에 있는지 아니면 교차 계정 요청 내에 있는지에 따라 달라질 수 있습니다. 단일 계정 내의 IAM 역할 또는 사용자에 대한 정책 평가 결정 방법에 대한 자세한 내용은 [단일 계정 내 요청에 대한 정책 평가](reference_policies_evaluation-logic_policy-eval-basics.md) 섹션을 참조하세요. 교차 계정 요청에 대한 정책 평가 결정 방법에 대한 자세한 내용은 [Cross-account policy evaluation logic](reference_policies_evaluation-logic-cross-account.md) 섹션을 참조하세요.
+ **거부 평가** - 기본적으로 모든 요청이 거부됩니다. 이를 [묵시적 거부](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)라고 합니다. AWS 적용 코드는 해당 요청에 적용될 수 있는 계정 내의 모든 정책을 평가합니다. 여기에는 AWS Organizations SCP 및 RCP, 리소스 기반 정책, ID 기반 정책, IAM 권한 경계 및 세션 정책이 포함됩니다. 이런 모든 정책에서 적용 코드는 해당 요청에 적용되는 `Deny` 설명문을 찾습니다. 이를 [명시적 거부](reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay.md)라고 합니다. 적용되는 명시적 거부가 하나라도 발견되면 적용 코드는 최종 **거부** 결정을 반환합니다. 명시적 거부가 없으면 적용 코드 평가가 계속됩니다.
+ **AWS Organizations SCP** - 적용 코드가 요청에 적용되는 AWS Organizations 리소스 제어 정책(RCP)을 평가합니다. RCP는 RCP가 연결된 계정의 리소스에 적용됩니다. 적용 코드가 RCP에서 적용 가능한 `Allow` 문을 찾지 못하면 적용 코드는 **거부**라는 최종 결정을 반환합니다. `RCPFullAWSAccess`라는 AWS 관리형 정책은 루트, 각 OU, RCPs가 활성화된 AWS 계정 경우를 포함하여 조직의 모든 엔터티에 자동으로 생성되고 연결됩니다. `RCPFullAWSAccess`는 분리할 수 없으므로 항상 `Allow` 문이 있습니다. RCP가 없거나 요청한 작업이 RCP에서 허용된 경우 적용 코드 평가가 계속됩니다.
+ **AWS Organizations SCP** - 적용 코드가 요청에 적용되는 AWS Organizations 서비스 제어 정책(SCP)을 평가합니다. SCP는 SCP가 연결된 계정의 보안 주체에 적용됩니다. 적용 코드가 SCP에서 적용 가능한 `Allow` 문을 찾지 못하면 적용 코드는 **거부**라는 최종 결정을 반환합니다. SCP가 없거나 요청한 작업이 SCP에서 허용된 경우 적용 코드 평가가 계속됩니다.
+ **리소스 기반 정책** - 동일한 계정 내에서 리소스 기반 정책은 리소스에 액세스하는 보안 주체의 유형과 리소스 기반 정책에서 허용되는 보안 주체에 따라 정책 평가에 다르게 영향을 줍니다. 보안 주체 유형에 따라 자격 증명 기반 정책, 권한 경계 또는 세션 정책에 암시적 거부가 있는 경우에도 리소스 기반 정책의 `Allow`은(는) `Allow`의 최종 결정을 내릴 수 있습니다.

  대부분 리소스의 경우, 액세스 권한을 부여하는 ID 기반 정책 또는 리소스 기반 정책의 위탁자에 대한 명시적 `Allow`만 필요합니다. [IAM 역할 신뢰 정책](access_policies-cross-account-resource-access.md#access_policies-cross-account-delegating-resource-based-policies)과 [KMS 키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)은 [보안 주체](reference_policies_elements_principal.md)에 대한 액세스 권한을 명시적으로 허용해야 하므로 이 로직의 예외입니다. IAM 및 AWS KMS 이외의 서비스에 대한 리소스 기반 정책도 동일한 계정 내에서 명시적 `Allow` 문을 사용하여 액세스 권한을 부여해야 할 수 있습니다. 자세한 내용은 사용 중인 특정 서비스의 설명서를 참조하세요.

  단일 계정 정책 평가 요청의 경우 지정한 위탁자가 IAM 사용자, IAM 역할 또는 세션 위탁자인 경우 리소스 기반 정책 로직이 기타 정책 유형과 다릅니다. 세션 보안 주체에는 [IAM 역할 세션](reference_policies_elements_principal.md#principal-role-session) 또는 [AWS STS 페더레이션 사용자 보안 주체](reference_policies_elements_principal.md#sts-session-principals)가 포함됩니다. 리소스 기반 정책이 요청을 수행하는 IAM 사용자 또는 세션 보안 주체에 직접 권한을 부여하는 경우, 자격 증명 기반 정책, 권한 경계 또는 세션 정책에서 암시적 거부가 최종 결정에 영향을 주지 않습니다.
  + **IAM 역할** - IAM 역할 ARN에 권한을 부여하는 리소스 기반 정책은 권한 경계 또는 세션 정책의 암시적 거부에 의해 제한됩니다. Principal 요소나 `aws:PrincipalArn` 조건 키에 역할 ARN을 지정할 수 있습니다. 두 경우 모두 요청을 하는 보안 주체는 **IAM 역할 세션**입니다.

    자격 증명 기반 정책에 명시적 거부가 포함되지 않는 한, 권한 경계와 세션 정책은 Principal 요소에서 와일드카드(\$1)와 함께 `aws:PrincipalArn` 조건 키를 사용하여 부여한 권한을 제한하지 않습니다. 자세한 내용은 [IAM 역할 보안 주체](reference_policies_elements_principal.md#principal-roles) 섹션을 참조하세요.

    **역할 ARN 예**

    ```
    arn:aws:iam::111122223333:role/examplerole
    ```
  + **IAM 역할 세션** - 동일한 계정 내에서 IAM 역할 세션 ARN에 권한을 부여하는 리소스 기반 정책은 수임된 역할 세션에 직접 권한을 부여합니다. 세션에 직접 부여된 사용 권한은 자격 증명 기반 정책, 권한 경계 또는 세션 정책의 암시적 거부에 의해 제한되지 않습니다. 역할을 맡고 요청을 할 때 요청을 수행하는 보안 주체는 역할 자체의 ARN이 아니라 IAM 역할 세션 ARN입니다. 자세한 내용은 [역할 세션 보안 주체](reference_policies_elements_principal.md#principal-role-session) 섹션을 참조하세요.

    **역할 세션 ARN 예**

    ```
    arn:aws:sts::111122223333:assumed-role/examplerole/examplerolesessionname
    ```
  + **IAM 사용자** - 동일한 계정 내에서 IAM 사용자 ARN(페더레이션 사용자 세션이 아님)에게 권한을 부여하는 리소스 기반 정책은 자격 증명 기반 정책 또는 권한 경계에서 암시적 거부에 의해 제한되지 않습니다.

    **IAM 사용자 ARN 예**

    ```
    arn:aws:iam::111122223333:user/exampleuser
    ```
  + ****AWS STS 페더레이션 사용자 보안 주체 - 페더레이션 사용자 세션은 [`GetFederationToken`](id_credentials_temp_request.md#api_getfederationtoken) 호출을 통해 생성된 세션입니다. 페더레이션 사용자가 요청을 할 때 요청을 수행하는 보안 주체는 페더레이션된 IAM 사용자의 ARN이 아니라 페더레이션 사용자 ARN입니다. 동일한 계정 내에서 페더레이션 사용자 ARN에게 권한을 부여하는 리소스 기반 정책은 세션에 직접 권한을 부여합니다. 세션에 직접 부여된 사용 권한은 자격 증명 기반 정책, 권한 경계 또는 세션 정책의 암시적 거부에 의해 제한되지 않습니다.

    그러나 리소스 기반 정책이 페더레이션한 IAM 사용자의 ARN에 권한을 부여하는 경우, 세션 중에 페더레이션 사용자가 요청한 요청은 권한 경계 또는 세션 정책의 암시적 거부에 의해 제한됩니다.

    ****페더레이션 사용자 세션 ARN 예제

    ```
    arn:aws:sts::111122223333:federated-user/exampleuser
    ```
+ **ID 기반 정책** - 적용 코드는 위탁자에 대한 ID 기반 정책을 확인합니다. IAM 사용자의 경우 이러한 정책에는 사용자 정책과 사용자가 속한 그룹의 정책이 포함됩니다. ID 기반 정책이 없거나 ID 기반 정책에 요청된 작업을 허용하는 문이 없으면 요청은 암시적으로 거부되고 적용 코드는 최종 결정으로 **거부**를 반환합니다. 적용 가능한 ID 기반 정책에서 요청한 작업을 허용하는 설명문이 있는 경우 코드 평가가 계속됩니다.
+ **IAM 권한 경계** - 적용 코드가 위탁자에 사용되는 IAM 엔터티에 권한 경계가 있는지 여부를 확인합니다. 권한 경계를 설정하는 데 사용되는 정책에서 요청한 작업을 허용하지 않는 경우 요청이 묵시적으로 거부됩니다. 적용 코드가 최종 **거부** 결정을 반환합니다. 권한 경계가 없거나 요청한 작업이 권한 경계에서 허용된 경우 코드 평가가 계속됩니다.
+ **세션 정책** - 적용 코드에서는 그런 다음에 위탁자가 세션 위탁자인지 확인합니다. 세션 보안 주체에는 IAM 역할 세션 또는 AWS STS 페더레이션 사용자 세션이 포함됩니다. 보안 주체가 세션 보안 주체가 아닌 경우 적용 코드는 **허용** 최종 결정을 반환합니다.

  세션 위탁자의 경우 적용 코드는 요청에 세션 정책이 전달되었는지 여부를 확인합니다. AWS CLI 또는 AWS API를 사용하는 동안 세션 정책을 전달하여 역할이나 AWS STS 페더레이션 사용자 보안 주체에 대한 임시 자격 증명을 가져올 수 있습니다. 세션 정책을 통과하지 못한 경우 기본 세션 정책이 생성되고 적용 코드가 최종 결정으로 **허용**을 반환합니다.
  + 세션 정책이 있지만 요청한 작업이 세션 정책에서 허용되지 않는 경우 해당 요청이 암시적으로 거부됩니다. 적용 코드가 최종 **거부** 결정을 반환합니다.
  + 적용 코드가 위탁자가 역할 세션인지 확인합니다. 보안 주체가 역할 세션인 경우 요청은 **Allow(허용됨)**입니다. 그렇지 않으면, 요청은 암시적으로 거부되며 적용 코드에서는 **거부**의 최종 결정을 반환합니다.
  + 세션 정책이 있고 요청한 작업을 허용한 경우, 적용 코드에서는 **Allow**(허용)의 최종 결정을 반환합니다.

# 단일 계정 내 요청에 대한 정책 평가
<a name="reference_policies_evaluation-logic_policy-eval-basics"></a>

## IAM 역할에 대한 정책 평가
<a name="policy-eval-basics-single-account-role"></a>

다음 흐름도는 단일 계정 내의 IAM 역할에 대한 정책 평가 결정 방법에 대한 세부 정보를 제공합니다.

![\[단일 계정 내 IAM 역할에 대한 평가 흐름도\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/PolicyEvaluationSingleAccountRole.png)


## IAM 사용자에 대한 정책 평가
<a name="policy-eval-basics-single-account-user"></a>

다음 흐름도는 단일 계정 내의 IAM 사용자에 대한 정책 평가 결정 방법에 대한 세부 정보를 제공합니다.

![\[단일 계정 내 IAM 사용자에 대한 평가 흐름도\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/PolicyevaluationSingleAccountUser.png)


## 자격 증명 기반 정책 및 리소스 기반 정책 평가 예제
<a name="reference_policies_evaluation-logic_policies_evaluation_example"></a>

가장 일반적인 정책 유형은 자격 증명 정책 및 리소스 기반 정책입니다. 리소스에 대한 액세스가 요청되면 AWS는 동일한 계정 내에서 **하나 이상의 Allow**에 대해 정책에서 부여한 모든 권한을 평가합니다. 정책 중 하나에 포함된 명시적 거부는 허용을 재정의합니다.

**중요**  
동일한 계정 내의 ID 기반 정책이나 리소스 기반 정책 중 하나는 요청을 허용하고 다른 하나는 허용하지 않는 경우에도 요청은 계속 허용됩니다.

Carlos가 `carlossalazar`라는 사용자 이름을 쓰고 있고 `amzn-s3-demo-bucket-carlossalazar-logs` Amazon S3 버킷에 파일을 저장하고자 한다고 가정합니다.

또한 다음 정책이 `carlossalazar` IAM 사용자와 연결되었다고 가정합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "AllowS3Self",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::*log*"
        }
    ]
}
```

------

이 정책의 `AllowS3ListRead` 설명문은 카를로스가 계정에 있는 모든 버킷 목록을 보도록 허용합니다. `AllowS3Self` 설명문은 카를로스가 그의 사용자 이름과 동일한 버킷에 모두 액세스할 수 있도록 허용합니다. `DenyS3Logs` 설명문은 카를로스가 그의 이름 아래에 있는 `log`를 통해 모든 S3 버킷의 액세스를 거부합니다.

또한, 다음 리소스 기반 정책(버킷 정책이라고 함)은 `amzn-s3-demo-bucket-carlossalazar` 버킷에 연결됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/carlossalazar"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar/*",
                "arn:aws:s3:::amzn-s3-demo-bucket-carlossalazar"
            ]
        }
    ]
}
```

------

이 정책은 `carlossalazar` 사용자만 `amzn-s3-demo-bucket-carlossalazar` 버킷에 액세스할 수 있도록 지정합니다.

카를로스가 `amzn-s3-demo-bucket-carlossalazar-logs` 버킷에 파일을 저장하도록 요청하면 AWS는 해당 요청에 어떤 정책을 적용할지 결정합니다. 이 경우, 자격 증명 기반 정책과 리소스 기반 정책만 적용합니다. 이들은 모두 권한 정책입니다. 어떠한 권한 경계도 적용되지 않기 때문에 평가 로직은 다음 로직으로 줄어듭니다.

![\[평가 순서도\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/EffectivePermissionsShort.png)


AWS는 먼저 요청 콘텍스트에 적용되는 `Deny` 설명문을 확인합니다. 자격 증명 기반 정책은 카를로스의 로깅을 통한 모든 S3 버킷의 액세스를 명시적으로 거부하기 때문에 이를 찾습니다. 카를로스의 액세스가 거부됩니다.

Carlos가 실수를 알아차리고 `amzn-s3-demo-bucket-carlossalazar` 버킷에 파일을 저장하고자 한다고 가정하세요. AWS는 `Deny` 설명문을 확인하지만 찾지 못합니다. 그러면 권한 정책을 확인합니다. 자격 증명 기반 정책과 리소스 기반 정책 모두 요청을 허용합니다. 따라서 AWS는 요청을 허용합니다. 이들 중 하나라도 설명문을 명시적으로 거부한다면 요청은 거부됩니다. 정책 유형 중 하나는 요청을 허용하고 다른 하나는 요청을 허용하지 않는 경우에도 요청은 허용됩니다.

# Cross-account policy evaluation logic
<a name="reference_policies_evaluation-logic-cross-account"></a>

한 계정의 보안 주체가 두 번째 계정의 리소스에 액세스하도록 허용할 수 있습니다. 이를 크로스 계정 액세스라고 합니다. 교차 계정 액세스를 허용할 때 보안 주체가 존재하는 계정을 *신뢰할 수 있는* 계정이라고 합니다. 리소스가 존재하는 계정을 *신뢰하는* 계정이라고 합니다.

교차 계정 액세스를 허용하려면 공유하려는 리소스에 리소스 기반 정책을 연결해야 합니다. 또한 요청에서 보안 주체 역할을 하는 아이덴티티에 아이덴티티 기반 정책을 연결해야 합니다. 신뢰하는 계정의 리소스 기반 정책은 리소스에 액세스할 수 있는 신뢰할 수 있는 계정의 보안 주체를 지정해야 합니다. 전체 계정이나 해당 IAM 사용자, AWS STS 페더레이션 사용자 보안 주체, IAM 역할 또는 위임된 역할 세션을 지정할 수 있습니다. AWS 서비스를 보안 주체로 지정할 수도 있습니다. 자세한 내용은 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요.

보안 주체의 자격 증명 기반 정책은 신뢰 서비스의 리소스에 대한 요청된 액세스를 허용해야 합니다. 리소스의 ARN을 지정하여 이를 수행할 수 있습니다.

IAM에서는 리소스 기반 정책을 IAM 역할에 연결하여 다른 계정의 보안 주체가 해당 역할을 수임하도록 허용할 수 있습니다. 역할의 리소스 기반 정책을 역할 신뢰 정책이라고 합니다. 이 역할을 가정하면 허용된 보안 주체는 결과로 생성되는 임시 자격 증명을 사용하여 계정의 여러 리소스에 액세스할 수 있습니다. 이러한 액세스 권한은 역할의 자격 증명 기반 권한 정책에 정의되어 있습니다. 역할을 사용하여 교차 계정 액세스를 허용하는 것과 다른 리소스 기반 정책을 사용하여 교차 계정 액세스를 허용하는 것이 어떻게 다른지 알아보려면 [IAM의 크로스 계정 리소스 액세스](access_policies-cross-account-resource-access.md) 섹션을 참조하세요.

**중요**  
다른 서비스는 정책 평가 로직에 영향을 줄 수 있습니다. 예를 들어, AWS Organizations는 하나 이상의 계정에서 위탁자와 리소스에 적용할 수 있는 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)과 [리소스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 지원합니다. AWS Resource Access Manager는 위탁자가 공유되는 리소스에 대해 수행할 수 있는 작업을 제어하는 ​​[정책 조각](https://docs.aws.amazon.com/ram/latest/userguide/permissions.html)을 지원합니다.

## 교차 계정 요청의 허용 여부 결정
<a name="policy-eval-cross-account"></a>

교차 계정 요청의 경우 신뢰할 수 있는 `AccountA`의 요청자가 자격 증명 기반 정책을 가지고 있어야 합니다. 이 정책은 신뢰하는 `AccountB`에서 리소스에 대한 요청을 생성할 수 있도록 허용해야 합니다. 또한 `AccountB`의 리소스 기반 정책은 `AccountA`의 요청자가 리소스에 액세스할 수 있도록 허용해야 합니다.

사용자가 교차 계정 요청을 하면 AWS에서는 두 가지 평가를 수행합니다. AWS는 신뢰하는 계정 및 신뢰할 수 있는 계정에서 요청을 평가합니다. 단일 계정 내에서 요청을 평가하는 방법에 대한 자세한 내용은 [AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법](reference_policies_evaluation-logic_policy-eval-denyallow.md) 섹션을 참조하세요. 두 평가에서 모두 `Allow`라는 결정을 반환하는 경우에만 요청이 허용됩니다.

![\[교차 계정 평가\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/policy_cross-account-eval-simple.png)


1. 한 계정의 보안 주체가 다른 계정의 리소스에 액세스하도록 요청하는 경우 이는 교차 계정 요청입니다.

1. 요청한 보안 주체는 신뢰할 수 있는 계정(`AccountA`)에 존재합니다. AWS는 이 계정을 평가할 때 자격 증명 기반 정책 및 자격 증명 기반 정책을 제한할 수 있는 정책을 확인합니다. 자세한 내용은 [권한 경계와 함께 자격 증명 기반 정책 평가](reference_policies_evaluation-logic.md#policy-eval-basics-id-bound) 섹션을 참조하세요.

1. 요청된 리소스가 신뢰하는 계정(`AccountB`)에 존재합니다. AWS는 이 계정을 평가할 때 요청된 리소스에 연결된 리소스 기반 정책과 리소스 기반 정책을 제한할 수 있는 정책을 확인합니다. 자세한 내용은 [리소스 기반 정책과 함께 자격 증명 기반 정책 평가](reference_policies_evaluation-logic.md#policy-eval-basics-id-rdp) 섹션을 참조하세요.

1. AWS에서는 두 계정 정책 평가에서 모두 요청을 허용하는 경우에만 요청을 허용합니다.

다음 흐름도는 교차 계정 요청에 대한 정책 평가 결정이 이루어지는 방법을 보다 자세히 보여줍니다. 다시, AWS에서는 두 계정 정책 평가에서 모두 요청을 허용하는 경우에만 요청을 허용합니다.

![\[자세한 교차 계정 정책 평가\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/PolicyEvaluationCrossAccount.png)


## 교차 계정 정책 평가의 예
<a name="policies_evaluation_example-cross-account"></a>

다음 예에서는 한 계정의 역할에 두 번째 계정의 리소스 기반 정책에 의해 권한이 부여되는 시나리오를 보여줍니다.

Carlos가 계정 111111111111에 `Demo`라는 IAM 역할이 있는 개발자라고 가정합니다. 그는 계정 222222222222에 있는 `amzn-s3-demo-bucket-production-logs` Amazon S3 버킷에 파일을 저장하려고 합니다.

또한 다음 정책이 `Demo` IAM 역할과 연결되었다고 가정합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Sid": "AllowS3ProductionObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object*",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-production/*"
        },
        {
            "Sid": "DenyS3Logs",
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::*log*",
                "arn:aws:s3:::*log*/*"
            ]
        }
    ]
}
```

------

이 정책의 `AllowS3ListRead` 문은 Carlos가 Amazon S3에 있는 모든 버킷의 목록을 보도록 허용합니다. `AllowS3ProductionObjectActions` 문은 Carlos에게 `amzn-s3-demo-bucket-production` 버킷의 객체에 대한 전체 액세스를 허용합니다.

또한, 다음 리소스 기반 정책(버킷 정책이라고 함)은 계정 222222222222의 `amzn-s3-demo-bucket-production` 버킷에 연결됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:PutObject*",
                "s3:ReplicateObject",
                "s3:RestoreObject"
            ],
            "Principal": { "AWS": "arn:aws:iam::111111111111:role/Demo" },
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-production/*"
        }
    ]
}
```

------

이 정책은 `Demo` 역할에 `amzn-s3-demo-bucket-production` 버킷의 객체에 대한 액세스를 허용합니다. 역할은 버킷의 객체를 생성하고 편집할 수는 있지만 삭제할 수는 없습니다. 역할은 버킷 자체를 관리할 수 없습니다.

카를로스가 `amzn-s3-demo-bucket-production-logs` 버킷에 파일을 저장하도록 요청하면 AWS는 해당 요청에 어떤 정책을 적용할지 결정합니다. 이 경우 `Demo` 역할에 연결된 ID 기반 정책이 계정 `111111111111`에 적용되는 유일한 정책입니다. 계정 `222222222222`에서는 `amzn-s3-demo-bucket-production-logs` 버킷에 연결된 리소스 기반 정책이 없습니다. AWS은 계정 `111111111111`을 평가할 때 `Deny`의 결정을 반환합니다. 이는 자격 증명 기반 정책의 `DenyS3Logs` 문이 모든 로그 버킷에 대한 액세스를 명시적으로 거부하기 때문입니다. 단일 계정 내에서 요청을 평가하는 방법에 대한 자세한 내용은 [AWS 적용 코드 로직이 액세스 허용 또는 거부 요청을 평가하는 방법](reference_policies_evaluation-logic_policy-eval-denyallow.md) 섹션을 참조하세요.

요청이 계정 중 하나에서 명시적으로 거부되기 때문에 최종 결정은 요청을 거부하는 것입니다.

![\[amzn-s3-demo-bucket-production-logs 버킷에 요청\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/policy_cross-account-eval-example.png)


카를로스가 자신의 실수를 깨닫고 `Production` 버킷에 파일을 저장하려고 시도한다고 가정합니다. AWS는 먼저 계정 `111111111111`을 확인하여 요청이 허용되는지 여부를 확인합니다. 자격 증명 기반 정책만 적용되며 요청을 허용합니다. 그리고 AWS는 계정 `222222222222`를 확인합니다. `Production` 버킷에 연결된 리소스 기반 정책만 적용되며 요청을 허용합니다. 두 계정 모두 요청을 허용하므로 최종 결정은 요청을 허용하는 것입니다.

![\[프로덕션 버킷에 요청\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/policy_cross-account-eval-example-correct.png)


# 명시적 거부와 묵시적 거부 차이
<a name="reference_policies_evaluation-logic_AccessPolicyLanguage_Interplay"></a>

적용 가능한 정책이 `Deny` 설명문을 포함한다면 요청은 명시적으로 거부됩니다. 정책이 `Allow` 설명문과 `Deny` 설명문을 포함한 요청에 적용된다면 `Deny` 설명문은 `Allow` 설명문에 우선합니다. 이 요청은 명시적으로 거부됩니다.

적용 가능한 `Deny` 설명문이 없고 적용 가능한 `Allow` 설명문도 없다면 묵시적 거부가 발생합니다. IAM 보안 주체가 기본적으로 액세스를 거부하기 때문에 명시적으로 작업을 허용해야 합니다. 그렇지 않으면 액세스는 묵시적으로 거부됩니다.

권한 부여 전략을 설계한다면 `Allow` 설명문으로 정책을 생성하여 보안 주체가 성공적으로 요청하도록 허용합니다. 그러나 명시적 또는 묵시적 거부 조합을 선택할 수 있습니다.

예를 들어, 허용되는 작업, 암시적으로 거부된 작업 및 명시적으로 거부된 작업을 포함하는 다음 정책을 생성할 수 있습니다. `AllowGetList` 설명문은 접두사 `Get` 및 `List`(으)로 시작하는 IAM 작업에 대한 읽기 전용 액세스를 **허용**합니다. `iam:CreatePolicy`와(과) 같은 IAM의 다른 모든 작업은 **암시적으로 거부**됩니다. `DenyReports` 설명문은 `iam:GetOrganizationsAccessReport`와 같이 `Report` 접미사가 포함된 작업에 대한 액세스를 거부하여 IAM 보고서에 대한 액세스를 **명시적으로 거부**합니다. 누군가가 이 보안 주체에 다른 정책을 추가하여 `iam:GenerateCredentialReport`와 같은 IAM 보고서에 대한 액세스 권한을 부여하는 경우, 보고서 관련 요청은 이 명시적 거부로 인해 계속 거부됩니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGetList",
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyReports",
            "Effect": "Deny",
            "Action": "iam:*Report",
            "Resource": "*"
        }
    ]
}
```

------

# IAM JSON 정책 언어의 문법
<a name="reference_policies_grammar"></a>

이 페이지에서는 IAM에서 JSON 정책 생성 시 사용되는 언어의 정규 문법에 대해 살펴보겠습니다. 이 문법에 대해 살펴본 후 정책의 체계적 작성 및 검증 방법에 대해 이해할 수 있게 될 것입니다.

정책 예는 다음 주제를 참조하세요.
+ [AWS Identity and Access Management의 정책 및 권한](access_policies.md)
+ [IAM 자격 증명 기반 정책의 예](access_policies_examples.md)
+ *Amazon EC2 사용 설명서*의 [Amazon EC2 콘솔 작업을 위한 예제 정책](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-ec2-console.html) 및 [AWS CLI, Amazon EC2 CLI 또는 AWS SDK 작업을 위한 예제 정책](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html) 
+  *Amazon Simple Storage Service 사용 설명서*의 [버킷 정책의 예제](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html) 및 [사용자 정책 예](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html) 

다른 AWS 서비스의 정책 예는 해당 서비스 설명서를 참조하세요.

**Topics**
+ [정책 언어 및 JSON](#policies-grammar-json)
+ [JSON 문법에 사용되는 규칙](#policies-grammar-conventions)
+ [문법](#policies-grammar-bnf)
+ [정책 문법 참고 사항](#policies-grammar-notes)

## 정책 언어 및 JSON
<a name="policies-grammar-json"></a>

정책은 JSON으로 작성됩니다. JSON 정책을 생성하거나 편집할 때 IAM은 효과적인 정책을 생성하는 데 도움이 되는 정책 검증을 수행할 수 있습니다. IAM은 JSON 구문 오류를 식별하는 반면, IAM Access Analyzer는 정책을 더욱 구체화하는 데 도움이 되는 권장 사항과 함께 추가 정책 검사를 제공합니다. 정책 검증에 대한 자세한 내용은 [IAM 정책 검증](access_policies_policy-validator.md) 섹션을 참조하세요. IAM Access Analyzer 정책 확인 및 실행 가능한 권장 사항에 대한 자세한 내용은 [IAM Access Analyzer 정책 검증](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)을 참조하세요.

여기에서는 유효한 JSON 구성에 대해 자세히 설명하지는 않지만 다음과 같이 몇 가지 기본 JSON 규칙을 소개합니다.
+ 각 개체 간에 공백을 넣을 수 있습니다.
+ 값은 인용 부호로 묶입니다. 숫자나 부울(Boolean) 값에서 인용 부호는 옵션입니다.
+ 대부분 요소(예: `action_string_list`, `resource_string_list`)는 JSON 배열을 값으로 사용할 수 있습니다. 배열은 하나 이상의 값을 갖습니다. 값이 2개 이상 추가되면 배열은 다음 예제와 같이 대괄호(`[` 및 `]`)로 묶여 쉼표로 구분됩니다.

  `"Action" : ["ec2:Describe*","ec2:List*"]`
+ 기본 JSON 데이터 형식(부울, 숫자, 문자열)은 [RFC 7159](https://datatracker.ietf.org/doc/html/rfc7159)에 정의되어 있습니다.

## JSON 문법에 사용되는 규칙
<a name="policies-grammar-conventions"></a>

JSON 문법에는 다음과 같은 규칙이 사용됩니다.
+ 다음 문자는 JSON 토큰으로서 정책에 *추가됩니다*.

  `{ } [ ] " , :`
+ 다음은 문법에 사용되는 특수 문자로서 정책에는 *추가되지 않습니다*.

  `= < > ( ) |`
+ 한 요소에 여러 값을 추가할 수 있는 경우에는 반복되는 값, 쉼표 구분자, 그리고 줄임표(`...`)를 사용하여 나타냅니다. 예시:

  `[<action_string>, <action_string>, ...]`

  `<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }`

  여러 값이 허용되면 단일 값을 추가하는 것도 유효합니다. 값이 단 하나인 경우에는 마지막 쉼표를 반드시 생략해야 합니다. 요소가 배열([ ]로 표시)로 이루어지더라도 추가된 값이 단 하나일 때는 괄호가 선택 사항입니다. 예시:

  `"Action": [<action_string>]`

  `"Action": <action_string>`
+ 요소 뒤에 나오는 물음표(`?`)는 요소가 선택 사항인 것을 나타냅니다. 예제: 

  <`version_block?>`

  하지만 선택 요소에 대한 자세한 내용은 문법 목록 이후에 나오는 참고 사항을 반드시 확인하시기 바랍니다.
+ 요소 사이의 수직선(`|`)은 다자간 택일을 나타냅니다. 이 문법에서는 괄호로 다자간 택일의 범위를 정의합니다. 예제:

  `("Principal" | "NotPrincipal")` 
+ 리터럴 문자열 요소는 큰따옴표(`"`)로 묶습니다. 예제:

  `<version_block> = "Version" : ("2008-10-17" | "2012-10-17" )`

기타 참고 사항은 문법 목록 다음 [정책 문법 참고 사항](#policies-grammar-notes) 섹션을 참조하세요.

## 문법
<a name="policies-grammar-bnf"></a>

다음 목록은 정책 언어 문법에 대한 설명입니다. 문법 목록에 사용된 규칙에 대해서는 앞의 섹션을 참조하세요. 그리고, 추가 정보는 이후 참고 사항을 참조하세요.

**참고**  
이 문법은 버전이 `2008-10-17 ` 및 `2012-10-17 `이라고 표시된 정책에 대한 설명입니다. `Version` 정책 요소는 정책 버전과 다릅니다. `Version` 정책 요소는 정책 내에서 사용되며 정책 언어의 버전을 정의합니다. 반면에 정책 버전은 IAM에서 고객 관리형 정책을 변경할 때 생성됩니다. 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 생성합니다. `Version` 정책 요소에 대한 자세한 정보는 [IAM JSON 정책 요소: Version](reference_policies_elements_version.md)을 참조하세요. 정책 버전에 대한 자세한 정보는 [IAM 정책 버전 관리](access_policies_managed-versioning.md) 섹션을 참조하세요.

```
policy  = {
     <version_block?>,
     <id_block?>,
     <statement_block>
}

<version_block> = "Version" : ("2008-10-17"		 	 	  | "2012-10-17"		 	 	 )

<id_block> = "Id" : <policy_id_string>

<statement_block> = "Statement" : [ <statement>, <statement>, ... ]

<statement> = { 
    <sid_block?>,
    <principal_block?>,
    <effect_block>,
    <action_block>,
    <resource_block>,
    <condition_block?>
}

<sid_block> = "Sid" : <sid_string>

<effect_block> = "Effect" : ("Allow" | "Deny")  

<principal_block> = ("Principal" | "NotPrincipal") : ("*" | <principal_map>)

<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }

<principal_map_entry> = ("AWS" | "Federated" | "Service" | "CanonicalUser") :   
    [<principal_id_string>, <principal_id_string>, ...]

<action_block> = ("Action" | "NotAction") : 
    ("*" | <action_string> | [<action_string>, <action_string>, ...])

<resource_block> = ("Resource" | "NotResource") : 
    : ("*" | <resource_string> | [<resource_string>, <resource_string>, ...])

<condition_block> = "Condition" : { <condition_map> }
<condition_map> = { 
  <condition_type_string> : { <condition_key_string> : <condition_value_list> },
  <condition_type_string> : { <condition_key_string> : <condition_value_list> }, ...
}  
<condition_value_list> = [<condition_value>, <condition_value>, ...]
<condition_value> = (<condition_value_string> | <condition_value_string> | <condition_value_string>)
```

## 정책 문법 참고 사항
<a name="policies-grammar-notes"></a>
+ 단일 정책에는 다수의 문이 배열로 추가될 수 있습니다.
+ 정책은 추가되는 개체에 따라 2,048\$110,240 사이에서 최대 문자 수를 갖습니다. 자세한 내용은 [IAM 및 AWS STS 할당량](reference_iam-quotas.md) 섹션을 참조하세요. 정책 크기 계산에 공백 문자는 포함되지 않습니다.
+ 개별 요소에는 동일한 키 인스턴스를 여러 개 추가할 수 없습니다. 예를 들어 동일한 문에 `Effect` 블록을 2개 추가할 수는 없습니다.
+ 블록은 순서에 상관없이 표시됩니다. 예를 들어 정책에서 `version_block`은 `id_block` 뒤에 올 수 있습니다. 마찬가지로 `effect_block`, `principal_block` 및 `action_block` 역시 동일 문에서 순서에 상관없이 표시됩니다.
+ 리소스 기반 정책에서는 `id_block`이 선택 사항입니다. ID 기반 정책에는 포함시킬 수 *없습니다*.
+ `principal_block` 요소는 리소스 기반 정책(예: Amazon S3 버킷 정책)과 IAM 역할의 신뢰 정책에 필요합니다. ID 기반 정책에는 포함시킬 수 *없습니다*.
+ Amazon S3 버킷 정책의 `principal_map` 요소에는 `CanonicalUser` ID가 포함될 수 있습니다. 대부분 리소스 기반 정책은 이러한 매핑을 지원하지 않습니다. 버킷 정책에서 표준 사용자 ID를 사용하는 방법에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [정책에서 보안 주체 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-bucket-user-policy-specifying-principal-intro.html)을 참조하세요.
+ 각 문자열 값(`policy_id_string`, `sid_string`, `principal_id_string`, `action_string`, `resource_string`, `condition_type_string`, `condition_key_string`, 그리고 `condition_value`의 문자열 버전)은 자체적인 최소/최대 길이 제한, 특정 허용 값 또는 필수 내부 포맷을 가질 수 있습니다.

### 문자열 값에 대한 참고 사항
<a name="policies-grammar-notes-strings"></a>

이 섹션에서는 정책에서 각각 다른 요소에 사용되는 문자열 값에 대한 추가 정보에 대해 살펴보겠습니다.

**`action_string`**  
서비스 네임스페이스, 콜론 및 작업 이름으로 구성됩니다. 작업 이름에는 와일드카드를 추가할 수 있습니다. 예시:  

```
"Action":"ec2:StartInstances"

"Action":[
  "ec2:StartInstances",
  "ec2:StopInstances"
]

"Action":"cloudformation:*"

"Action":"*"

"Action":[
  "s3:Get*",
  "s3:List*"
]
```

**`policy_id_string`**  
정책 관련 정보를 전체적으로 추가하는 방법을 제공합니다. Amazon SQS나 Amazon SNS 같은 일부 서비스는 `Id` 요소를 예약 방식으로 사용합니다. 개별 서비스에서 달리 제한하지 않는다면 policy\$1id\$1string에 공백을 추가할 수 있습니다. AWS 계정 내에서 이 값의 고유성을 요구하는 서비스도 있습니다.  
`id_block`은 리소스 기반 정책에서는 허용되지만 ID 기반 정책에서는 사용할 수 없습니다.
이 문자열이 제한된 전체 정책 길이에 영향을 끼치기는 하지만 문자열 길이에 제한은 없습니다.  

```
"Id":"Admin_Policy"

"Id":"cd3ad3d9-2776-4ef1-a904-4c229d1642ee"
```

**`sid_string`**  
개별 문에 대한 정보를 추가하는 방법을 제공합니다. IAM 정책의 경우 기본 영숫자 문자(A-Z,a-z,0-9)만 `Sid` 값의 문자로 허용됩니다. 리소스 정책을 지원하는 다른 AWS 서비스는 `Sid` 값 요구 사항이 다를 수 있습니다. 예를 들어 일부 서비스는 이 값이 특정 AWS 계정에서 고유할 것을 요구하며, 일부 서비스는 `Sid` 값으로 공백과 같은 문자를 추가로 허용합니다.  

```
"Sid":"1" 

"Sid": "ThisStatementProvidesPermissionsForConsoleAccess"
```

**`principal_id_string`**  
보안 주체는 AWS 계정, IAM 사용자, IAM 역할, 페더레이션 사용자, 또는 위임된 역할 사용자의 [*Amazon 리소스 이름*(ARN)](reference_identifiers.md#identifiers-arns)을 사용해 지정합니다. AWS 계정의 경우, 전체 ARN 대신 짧은 형식인 `AWS:accountnumber`를 사용할 수도 있습니다. AWS 서비스, 위임된 역할 등을 포함한 모든 옵션에 대해서는 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요.  
"모든 사용자/익명 사용자"를 지정할 때만 \$1를 사용할 수 있습니다. 이름이나 ARN의 일부를 지정하기 위해 사용할 수는 없습니다.

**`resource_string`**  
대부분의 경우 [Amazon 리소스 이름](reference_identifiers.md#identifiers-arns)(ARN)으로 구성됩니다. ARN의 리소스 부분에서 와일드카드(\$1 및 ?)를 사용할 수 있습니다. 와일드카드 사용에 대한 자세한 내용은 [경로에서 와일드카드 사용](reference-arns.md#arns-paths-wildcards) 섹션을 참조하세요.  
ID 기반 정책에서 불완전한 ARN(표준 필드 6개보다 필드가 적은 ARN)을 지정하면 AWS는 누락된 모든 필드에 와일드카드 문자(\$1)를 추가하여 ARN을 자동으로 완성합니다. 예를 들어 `arn:aws:sqs`를 지정하는 것은 모든 리전 및 계정의 모든 Amazon SQS 리소스에 대한 액세스 권한을 부여하는 `arn:aws:sqs:*:*:*`과 동일합니다.

```
"Resource":"arn:aws:iam::123456789012:user/Bob"

"Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
```

**`condition_type_string`**  
`StringEquals`, `StringLike`, `NumericLessThan`, `DateGreaterThanEquals`, `Bool`, `BinaryEquals`, `IpAddress`, `ArnEquals` 등 테스트할 조건 형식을 식별합니다. 조건 형식에 대한 전체 목록은 [IAM JSON 정책 요소: 조건 연산자](reference_policies_elements_condition_operators.md) 섹션을 참조하세요.  

```
"Condition": {
  "NumericLessThanEquals": {
    "s3:max-keys": "10"
  }
}

"Condition": {
  "Bool": {
    "aws:SecureTransport": "true"
  }
}

"Condition": {
  "StringEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}
```

**`condition_key_string`**  
값을 테스트하여 조건 충족 여부를 판단할 수 있는 조건 키를 식별합니다. AWS은 `aws:PrincipalType`, `aws:SecureTransport` 및 `aws:userid`를 포함해 모든 AWS 서비스에 사용할 수 있는 조건 키 집합을 정의합니다.  
AWS 조건 키 목록에 대한 자세한 내용은 [AWS 글로벌 조건 컨텍스트 키](reference_policies_condition-keys.md) 섹션을 참조하세요. 서비스별 조건 키에 대한 자세한 내용은 다음과 같은 서비스 설명서를 참조하세요.  
+ *Amazon Simple Storage Service 사용 설명서*의 [정책에서 조건 지정](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html)
+ *Amazon EC2 사용 설명서*의 [Amazon EC2의 IAM 정책](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)

```
"Condition":{
  "Bool": {
      "aws:SecureTransport": "true"
   }
}

"Condition": {
  "StringNotEquals": {
      "s3:x-amz-server-side-encryption": "AES256"
   }
}

"Condition": {
  "StringEquals": {
    "aws:ResourceTag/purpose": "test"
  }
}
```

**`condition_value_string`**  
조건이 충족되는지 여부를 결정하는 condition\$1key\$1string 값을 식별합니다. 조건 유형에 대한 유효한 값의 전체 목록은 [IAM JSON 정책 요소: 조건 연산자](reference_policies_elements_condition_operators.md) 섹션을 참조하세요.  

```
"Condition":{
  "ForAnyValue:StringEquals": {
		"dynamodb:Attributes": [
			"ID",
			"PostDateTime"
  	      ]
  }
}
```

# 직무에 관한 AWS 관리형 정책
<a name="access_policies_job-functions"></a>

[최소 권한 부여](best-practices.md#grant-least-privilege) 또는 작업 수행에 요구되는 권한만 부여하는 정책을 사용하는 것이 좋습니다. 최소 권한을 부여하는 가장 안전한 방법은 팀에 필요한 권한만 있는 사용자 지정 정책을 작성하는 것입니다. 필요한 경우 팀에서 추가 권한을 요청할 수 있는 프로세스를 만들어야 합니다. 팀에 필요한 권한만 제공하는 [IAM 고객 관리형 정책을 생성](access_policies_create-console.md)하기 위해서는 시간과 전문 지식이 필요합니다.

IAM 자격 증명(사용자, 사용자 그룹 및 역할)에 대한 권한을 추가하려면 [AWS 관리형 정책](access_policies_managed-vs-inline.md#aws-managed-policies)을 사용할 수 있습니다. AWS 관리형 정책은 일반적인 사용 사례를 다루며 사용자의 AWS 계정에서 사용할 수 있습니다. AWS 관리형 정책은 최소 권한을 부여하지 않습니다. 보안 주체가 작업을 수행하는 데 필요한 것보다 더 많은 권한을 부여할 경우 보안 위험을 고려해야 합니다.

AWS 관리형 정책(작업 기능 포함)을 모든 IAM 자격 증명에 연결할 수 있습니다. 최소 권한으로 전환하려면 AWS Identity and Access Management 및 Access Analyzer를 실행하여 AWS 관리형 정책으로 보안 주체를 모니터링합니다. 사용 권한을 학습한 후 사용자 지정 정책을 작성하거나 팀에 필요한 권한만 있는 정책을 생성할 수 있습니다. 이는 덜 안전하지만 팀에서 AWS를 어떻게 사용하는지 학습할 수록 더 많은 유연성을 제공합니다..

직무에 관한 AWS 관리형 정책은 IT 업계의 일반적인 직무 기능과 긴밀하게 연결되도록 구성됩니다. 이 정책을 적용하면 특정 직무 담당자에게 기대되는 작업 수행에 필요한 권한을 부여할 수 있습니다. 이 정책은 여러 서비스에 대한 권한을 정책 하나에 통합하기 때문에, 여러 정책에 권한이 분산되어 있는 경우보다 업무 절차가 간소합니다.

**역할을 이용한 서비스 결합**  
일부 정책은 IAM 서비스 역할을 이용하여 다른 AWS 서비스에 포함된 기능을 활용할 수 있도록 지원합니다. 이 정책은 `iam:passrole`에 대한 액세스를 허용하여, 정책에 정의된 사용자가 역할을 AWS 서비스에 전달할 수 있도록 합니다. 이 역할은 AWS 서비스에서 사용자를 대행할 수 있도록 IAM 권한을 위임합니다.

필요에 따라 역할을 만들어야 합니다. 예를 들어 네트워크 관리자 정책은 정책을 지닌 사용자가 ‘flow-logs-vpc’라는 역할을 Amazon CloudWatch 서비스로 전달하도록 허용합니다. CloudWatch는 이 역할을 사용하여 사용자가 생성한 VPC의 IP 트래픽을 로그하고 캡처합니다.

보안 모범 사례를 따르기 위해 직무 기능에 관한 정책에는 전달할 수 있는 유효한 역할의 이름을 제한하는 필터가 포함되어 있습니다. 따라서 불필요한 권한을 부여할 가능성이 없습니다. 사용자가 선택적 서비스 역할을 필요로 할 경우, 정책에 정의된 명명 규칙에 따라 역할을 만들어야 합니다. 그런 다음 해당 역할에 권한을 부여합니다. 그러면 사용자는 역할이 제공하는 모든 권한을 부여해 서비스에서 이 역할을 사용하도록 구성할 수 있습니다.

다음 섹션에서 각 정책의 이름에는 AWS Management Console의 정책 세부 정보 페이지로 이동하는 링크가 연결되어 있습니다. 해당 페이지에서 정책 문서를 확인하고 부여된 권한을 검토할 수 있습니다.

## 관리자 직무
<a name="jf_administrator"></a>

**AWS 관리형 정책 이름:** [AdministratorAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AdministratorAccess)

**사용 사례:** 이 사용자는 모든 액세스를 가지며 AWS 내 모든 서비스와 리소스에 권한을 위임할 수 있습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 모든 AWS 서비스와 계정 내 모든 리소스에 대한 모든 작업을 허용합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [AdministratorAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AdministratorAccess.html)를 참조하세요.

**참고**  
IAM 사용자 또는 역할이 이 정책의 권한을 통해 AWS 결제 및 비용 관리 콘솔에 액세스할 수 있으려면, 먼저 IAM 사용자 및 역할 액세스를 활성화해야 합니다. 이를 위해 [결제 콘솔에 대한 액세스 권한 부여](getting-started-account-iam.md)의 지침을 따라 결제 콘솔에 액세스를 위임합니다.

## 결제 직무
<a name="jf_accounts-payable"></a>

**AWS 관리형 정책 이름:** [Billing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/Billing)

**사용 사례:** 이 사용자는 결제 정보를 확인하고 지불을 설정 및 승인해야 합니다. 사용자가 전체 AWS 서비스에 누적된 비용을 모니터링할 수 있습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 결제 관리, 비용, 결제 방법, 예산, 보고서 등에 필요한 모든 권한을 부여합니다. 추가적인 비용 관리 정책 예는 *AWS 결제 및 비용 관리 사용 설명서*의 [AWS Billing 정책 예](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-example-policies.html)를 참조하세요. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [Billing](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/Billing.html)를 참조하세요.

**참고**  
IAM 사용자 또는 역할이 이 정책의 권한을 통해 AWS 결제 및 비용 관리 콘솔에 액세스할 수 있으려면, 먼저 IAM 사용자 및 역할 액세스를 활성화해야 합니다. 이를 위해 [결제 콘솔에 대한 액세스 권한 부여](getting-started-account-iam.md)의 지침을 따라 결제 콘솔에 액세스를 위임합니다.

## 데이터베이스 관리자 직무
<a name="jf_database-administrator"></a>

**AWS 관리형 정책 이름:** [DatabaseAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DatabaseAdministrator)

**사용 사례:** 이 사용자는 AWS 클라우드에서 데이터베이스를 설정, 구성, 유지합니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 데이터베이스를 생성, 구성, 유지할 수 있는 권한을 부여합니다. 여기에는 Amazon DynamoDB, Amazon Relational Database Service(RDS) 및 Amazon Redshift와 같은 AWS데이터베이스 서비스에 대한 액세스가 포함됩니다. 이 정책이 지원하는 데이터베이스 서비스의 전체 목록에 대한 정책을 봅니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [DatabaseAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/DatabaseAdministrator.html)를 참조하세요.

이 직무 정책은 AWS 서비스로 역할을 전달할 수 있는 기능을 지원합니다. 이 정책은 다음 표에 명시된 역할에만 `iam:PassRole` 작업을 허용합니다. 자세한 내용은 이 주제의 후반부에서 [역할 생성 및 정책 연결(콘솔)](access_policies_job-functions_create-policies.md) 섹션을 참조하세요.


| 사용 사례: | 역할 이름(\$1는 와일드카드) | 선택할 서비스 역할 유형 | 이 AWS 관리형 정책 선택 | 
| --- | --- | --- | --- | 
| 사용자가 RDS 데이터베이스를 모니터링하도록 허용 | [rds-monitoring-role](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html) | 확장 모니터링에 대한 Amazon RDS 역할 | [AmazonRDSEnhancedMonitoringRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole) | 
| AWS Lambda의 데이터베이스 모니터링과 외부 데이터베이스 액세스를 허용 | [rdbms-lambda-access](https://aws.amazon.com/blogs/big-data/from-sql-to-microservices-integrating-aws-lambda-with-relational-databases) | Amazon EC2 | [AWSLambda\$1FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSLambda_FullAccess) | 
| Lambda가 DynamoDB를 사용하여 Amazon S3 및 Amazon Redshift 클러스터에 파일을 업로드하도록 허용 | [lambda\$1exec\$1role](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader) | AWS Lambda | [AWS 빅 데이터 블로그](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader)에 정의된 대로 새로운 관리형 정책 구성 | 
| Lambda 기능이 DynamoDB 테이블의 트리거 역할을 하도록 허용 | [lambda-dynamodb-\$1](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) | AWS Lambda | [AWSLambdaDynamoDBExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole) | 
| Lambda 기능이 VPC에서 Amazon RDS에 액세스하도록 허용 | [lambda-vpc-execution-role](https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html) | [AWS Lambda개발자 가이드](https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds.html)에 정의된 대로 신뢰 정책으로 역할 생성 | [AWSLambdaVPCAccessExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole) | 
| AWS Data Pipeline가 AWS 리소스에 액세스하도록 허용 | [DataPipelineDefaultRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | [AWS Data Pipeline 개발자 가이드](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)에 정의된 대로 신뢰 정책으로 역할 생성 | AWS Data Pipeline 설명서에는 이 사용 사례에 필요한 사용 권한이 나열됩니다. [AWS Data Pipeline에 대한 IAM 역할](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) 참조 | 
| Amazon EC2 인스턴스에서 실행 중인 애플리케이션이 AWS 리소스에 액세스하도록 허용 | [DataPipelineDefaultResourceRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | [AWS Data Pipeline 개발자 가이드](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)에 정의된 대로 신뢰 정책으로 역할 생성 | [AmazonEC2RoleforDataPipelineRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole) | 

## 데이터 사이언티스트 직무
<a name="jf_data-scientist"></a>

**AWS 관리형 정책 이름:** [DataScientist](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DataScientist)

**사용 사례:** 이 사용자는 Hadoop 작업과 쿼리를 실행합니다. 또한 데이터 분석 및 비즈니스 인텔리전스에 관한 정보에 액세스하고 이를 분석합니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 Amazon EMR 클러스터에서 쿼리를 생성, 관리, 실행하고 Amazon QuickSight 같은 도구로 데이터 분석을 수행할 수 있는 권한을 부여합니다. 이 정책에는 AWS Data Pipeline, Amazon EC2, Amazon Kinesis, Amazon Machine Learning, SageMaker AI와 같은 추가적인 데이터 과학 서비스에 대한 액세스가 포함됩니다. 이 정책이 지원하는 데이터 과학자 서비스의 전체 목록에 대한 정책을 봅니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [DataScientist](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/DataScientist.html)를 참조하세요.

이 직무 정책은 AWS 서비스로 역할을 전달할 수 있는 기능을 지원합니다. 한 개의 명령문으로 역할을 SageMaker에 전달할 수 있습니다. 또 다른 문은 다음 표에 명시된 역할에만 `iam:PassRole` 작업을 허용합니다. 자세한 내용은 이 주제의 후반부에서 [역할 생성 및 정책 연결(콘솔)](access_policies_job-functions_create-policies.md) 섹션을 참조하세요.


| 사용 사례: | 역할 이름(\$1는 와일드카드) | 선택할 서비스 역할 유형 | 선택할 AWS 관리형 정책 | 
| --- | --- | --- | --- | 
| 클러스터에 적합한 서비스와 리소스에 대한 Amazon EC2 인스턴스 액세스를 허용 | [EMR-EC2\$1DefaultRole](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-iam-roles-defaultroles.html) | EC2에 대한 Amazon EMR  | [AmazonElasticMapReduceforEC2Role](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role) | 
| Amazon EMR이 클러스터에 대한 Amazon EC2 서비스와 리소스에 액세스하도록 허용 | [EMR\$1DefaultRole](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/emr-iam-roles-defaultroles.html) | Amazon EMR | [AmazonEMRServicePolicy\$1v2](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2) | 
| Apache Flink용 Kinesis 관리형 서비스가 스트리밍 데이터 소스에 액세스하도록 허용 | [kinesis-\$1](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader) | [AWS 빅 데이터 블로그](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader)에 정의된 대로 신뢰 정책으로 역할을 생성합니다. | 사용 사례에 따라 네 가지 가능한 옵션을 소개한 [AWS 빅 데이터 블로그](https://aws.amazon.com/blogs/big-data/a-zero-administration-amazon-redshift-database-loader) 참조 | 
| AWS Data Pipeline가 AWS 리소스에 액세스하도록 허용 | [DataPipelineDefaultRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | [AWS Data Pipeline 개발자 가이드](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)에 정의된 대로 신뢰 정책으로 역할 생성 | AWS Data Pipeline 설명서에는 이 사용 사례에 필요한 사용 권한이 나열됩니다. [AWS Data Pipeline에 대한 IAM 역할](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) 참조 | 
| Amazon EC2 인스턴스에서 실행 중인 애플리케이션이 AWS 리소스에 액세스하도록 허용 | [DataPipelineDefaultResourceRole](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html) | [AWS Data Pipeline 개발자 가이드](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-iam-roles.html)에 정의된 대로 신뢰 정책으로 역할 생성 | [AmazonEC2RoleforDataPipelineRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforDataPipelineRole) | 

## 개발자 고급 사용자 직무
<a name="jf_developer-power-user"></a>

**AWS 관리형 정책 이름:** [PowerUserAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/PowerUserAccess)

**사용 사례:** 이 사용자는 애플리케이션 개발 작업을 수행하며, AWS 인식 애플리케이션 개발을 지원하는 리소스와 서비스를 생성하고 구성할 수 있습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책의 첫 번째 설명문은 [`NotAction`](reference_policies_elements_notaction.md) 요소를 사용하여 모든 AWS 서비스와 모든 리소스(AWS Identity and Access Management, AWS Organizations 및 AWS Account Management 제외)에 대해 모든 작업을 허용합니다. 두 번째 설명문은 서비스에 연결된 역할을 생성할 수 있는 IAM 권한을 부여합니다. 이것은 Amazon S3 버킷처럼 다른 서비스에서 리소스에 액세스해야 하는 서비스에 필요합니다. 또한 관리 계정 이메일과 조직 한도 등 사용자 조직에 대한 정보를 볼 AWS Organizations 권한을 부여합니다. 이 정책은 IAM 및 AWS Organizations를 제한하지만 IAM Identity Center가 활성화된 경우 사용자가 모든 IAM Identity Center 작업을 수행할 수 있습니다. 또한 계정에 대해 활성화 또는 비활성화된 AWS 리전을 볼 수 있는 계정 관리 권한을 부여합니다.

## 네트워크 관리자 직무
<a name="jf_network-administrator"></a>

**AWS 관리형 정책 이름:** [NetworkAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/NetworkAdministrator)

**사용 사례:** 이 사용자는 AWS 네트워크 리소스를 설정하고 유지하는 작업을 담당합니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 Auto Scaling, Amazon EC2, AWS Direct Connect, Route 53, Amazon CloudFront, Elastic Load Balancing, AWS Elastic Beanstalk, Amazon SNS, CloudWatch, CloudWatch Logs, Amazon S3, IAM, Amazon Virtual Private Cloud의 네트워크 리소스를 생성하고 유지할 수 있는 권한을 부여합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [NetworkAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/NetworkAdministrator.html)를 참조하세요.

이 직무는 AWS 서비스로 역할을 전달할 수 있는 기능을 필요로 합니다. 이 정책은 다음 표에 명시된 역할에만 `iam:GetRole` 및 `iam:PassRole`을 허용합니다. 자세한 내용은 이 주제의 후반부에서 [역할 생성 및 정책 연결(콘솔)](access_policies_job-functions_create-policies.md) 섹션을 참조하세요.


| 사용 사례: | 역할 이름(\$1는 와일드카드) | 선택할 서비스 역할 유형 | 선택할 AWS 관리형 정책 | 
| --- | --- | --- | --- | 
| Amazon VPC가 사용자를 대신해 CloudWatch Logs의 로그를 생성하고 관리하여 VPC로 들어오고 나가는 IP 트래픽을 모니터링하도록 허용 | [flow-logs-\$1](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam) | [Amazon VPC 사용 가이드](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam)에 정의된 대로 신뢰 정책으로 역할 생성 | 이 사용 사례에는 기존 AWS 관리형 정책이 없지만 설명서에는 필요한 권한이 나열되어 있습니다. [Amazon VPC 사용 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-logs-iam)를 참조하세요. | 

## 읽기 전용 액세스
<a name="awsmp_readonlyaccess"></a>

**AWS 관리형 정책 이름:** [ReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/ReadOnlyAccess)

**사용 사례:** 이 사용자는 AWS 계정의 모든 리소스에 대한 읽기 전용 액세스가 필요합니다.

**중요**  
또한 이 사용자는 Amazon S3 버킷 및 Amazon DynamoDB 테이블과 같은 스토리지 서비스의 데이터를 읽을 수 있는 액세스 권한이 있습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 리소스와 해당 속성을 나열하고, 가져오고, 설명하고 볼 수 있는 권한을 부여합니다. 생성 또는 삭제와 같은 변형 기능은 포함되지 않습니다. 이 정책에는 보안 관련 AWS 서비스(예: AWS Identity and Access Management 및 AWS 결제 및 비용 관리)에 대한 읽기 전용 액세스가 포함됩니다. 이 정책이 지원하는 서비스 및 작업의 전체 목록에 대한 정책을 봅니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [ReadOnlyAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/ReadOnlyAccess.html)를 참조하세요. 스토리지 서비스의 데이터를 읽을 액세스 권한을 부여하지 않는 유사한 정책이 필요한 경우 [보기 전용 사용자 직무](#jf_view-only-user) 섹션을 참조하세요.

## MCP 서비스 작업 전체 액세스
<a name="jf_mcp-service-actions"></a>

**AWS 관리형 정책 이름:** [AWSMcpServiceActionsFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSMcpServiceActionsFullAccess)

**사용 사례:** 이 사용자는 AWS MCP 서버를 사용하여 AWS 서비스에 액세스해야 합니다. 이 정책은 MCP 서비스가 수행한 작업에 대한 액세스 권한을 다른 AWS 서비스에 부여하지 않습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 모든 AWS MCP 서비스 작업을 직접적으로 호출할 수 있는 권한을 부여합니다. AWS MCP 서비스당 권한을 지정할 필요가 없는 경우 사용할 수 있습니다. MCP 서비스가 수행하는 작업에 대한 권한을 다른 AWS 서비스에 부여하지 않으므로, 이러한 권한은 항상 MCP 서비스 작업 외에 별도로 부여해야 합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [AWSMcpServiceActionsFullAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AWSMcpServiceActionsFullAccess.html)를 참조하세요.

## 보안 감사자 직무
<a name="jf_security-auditor"></a>

**AWS 관리형 정책 이름:** [SecurityAudit](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/SecurityAudit)

**사용 사례:** 이 사용자는 보안 요구 사항을 준수하기 위해 계정을 모니터링합니다. 이 사용자는 로그와 이벤트에 액세스하여 잠재적인 보안 위반이나 악의적인 활동을 조사할 수 있습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 많은 AWS 서비스에 대한 구성 데이터를 확인하고, 해당 로그를 검토할 수 있는 권한을 부여합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [SecurityAudit](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/SecurityAudit.html)를 참조하세요.

## 지원 사용자 직무
<a name="jf_support-user"></a>

**AWS 관리형 정책 이름:** [AWSSupportAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSSupportAccess)

**사용 사례:** 이 사용자는 AWS 지원을 통해 지원 사례를 생성하고 기존 사례의 상태를 확인합니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 지원 사례를 생성하고 업데이트할 수 있는 권한을 부여합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [AWSSupportUser](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/AWSSupportAccess.html)를 참조하세요.

## 시스템 관리자 직무
<a name="jf_system-administrator"></a>

**AWS 관리형 정책 이름:** [SystemAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/SystemAdministrator)

**사용 사례:** 이 사용자는 개발 작업에 필요한 리소스를 설정하고 유지합니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 AWS CloudTrail, Amazon CloudWatch, AWS CodeCommit, AWS CodeDeploy, AWS Config, AWS Directory Service, Amazon EC2, AWS Identity and Access Management, AWS Key Management Service, AWS Lambda, Amazon RDS, Route 53, Amazon S3, Amazon SES, Amazon SQS, AWS Trusted Advisor, Amazon VPC를 포함해 대량의 AWS 서비스에 걸쳐서 리소스를 생성하고 유지할 수 있는 권한을 부여합니다. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [SystemAdministrator](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/SystemAdministrator.html)를 참조하세요.

이 직무는 AWS 서비스로 역할을 전달할 수 있는 기능을 필요로 합니다. 이 정책은 다음 표에 명시된 역할에만 `iam:GetRole` 및 `iam:PassRole`을 허용합니다. 자세한 내용은 이 주제의 후반부에서 [역할 생성 및 정책 연결(콘솔)](access_policies_job-functions_create-policies.md) 섹션을 참조하세요. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.


| 사용 사례: | 역할 이름(\$1는 와일드카드) | 선택할 서비스 역할 유형 | 선택할 AWS 관리형 정책 | 
| --- | --- | --- | --- | 
| Amazon ECS 클러스터 내 EC2 인스턴스에서 실행 중인 앱이 Amazon ECS에 액세스하도록 허용 | [ecr-sysadmin-\$1](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html) | EC2 Container Service에 대한 Amazon EC2 역할  | [AmazonEC2ContainerServiceforEC2Role](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role) | 
| 사용자가 데이터베이스를 모니터링하도록 허용 | [rds-monitoring-role](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html) | 확장 모니터링에 대한 Amazon RDS 역할 | [AmazonRDSEnhancedMonitoringRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole) | 
| EC2 인스턴스에서 실행 중인 앱이 AWS 리소스에 액세스하도록 허용합니다. | [ec2-sysadmin-\$1](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) | Amazon EC2 | [Amazon EC2 사용 설명서](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)에 나온 것과 같이 S3 버킷에 대한 액세스 권한을 부여하는 역할의 샘플 정책. 필요에 따라 사용자 지정 | 
| Lambda가 DynamoDB Streams을 읽고 CloudWatch Logs에 작성하도록 허용 | [lambda-sysadmin-\$1](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html) | AWS Lambda | [AWSLambdaDynamoDBExecutionRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole) | 

## 보기 전용 사용자 직무
<a name="jf_view-only-user"></a>

**AWS 관리형 정책 이름:** [ViewOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/ViewOnlyAccess)

**사용 사례:** 이 사용자는 여러 서비스에 걸쳐 계정 내 AWS 리소스와 기본 메타데이터 목록을 확인할 수 있습니다. 하지만 할당량을 초과하는 리소스 콘텐츠나 메타데이터, 리소스의 목록 정보를 읽을 수 없습니다.

**정책 업데이트** AWS는 이 정책을 유지 관리하고 업데이트합니다. 이 정책의 변경 내역을 보려면 IAM 콘솔에서 정책을 확인한 다음 **정책 버전(Policy versions)** 탭을 선택합니다. 작업 기능 정책 업데이트에 대한 자세한 내용은 [직무에 관한 AWS 관리형 정책 업데이트](#security-iam-awsmanpol-jobfunction-updates) 섹션을 참조하세요.

**정책 설명:** 이 정책은 AWS 서비스 리소스에 대한 `List*`, `Describe*`, `Get*`, `View*`, `Lookup*` 액세스를 부여합니다. 각 서비스에 대해 이 정책에 포함된 작업을 보려면 [ViewOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/ViewOnlyAccess) 섹션을 참조하세요. 관리형 정책에 대한 자세한 내용은 *AWS 관리형 정책 참조 가이드*의 [ViewOnlyAccess](https://docs.aws.amazon.com//aws-managed-policy/latest/reference/ViewOnlyAccess.html)를 참조하세요.

## 직무에 관한 AWS 관리형 정책 업데이트
<a name="security-iam-awsmanpol-jobfunction-updates"></a>

이러한 정책은 모두 AWS가 유지하며, AWS 서비스에서 정책을 추가할 때 새로운 서비스와 새로운 기능에 대한 지원을 포함시켜 모든 것을 최신 상태로 유지합니다. 이러한 정책은 고객이 수정할 수 없습니다. 정책 사본을 만든 후 이를 수정할 수 있으나 AWS가 새로운 서비스와 API 작업을 도입할 때 이 사본이 자동으로 업데이트되지는 않습니다.

직무 정책의 경우 IAM 콘솔에서 버전 기록 및 각 업데이트의 시간과 날짜를 볼 수 있습니다. 이렇게 하려면 이 페이지의 링크를 사용하여 정책 세부 정보를 봅니다. 그런 다음 **정책 버전(Policy versions)** 탭을 클릭하여 버전을 볼 수 있습니다. 이 페이지에는 정책의 최근 25개 버전이 표시됩니다. 정책의 모든 버전을 보려면 [get-policy-version](https://docs.aws.amazon.com/cli/latest/reference/iam/get-policy-version.html) AWS CLI 명령 또는 [GetPolicyVersion](https://docs.aws.amazon.com/IAM/latest/APIReference/API_GetPolicyVersion.html) API 작업을 호출합니다.

**참고**  
고객 관리형 정책의 최대 5개의 버전을 사용할 수 있지만 AWS는 AWS 관리형 정책의 전체 버전 기록을 유지합니다.

# 역할 생성 및 정책 연결(콘솔)
<a name="access_policies_job-functions_create-policies"></a>

앞서 나열한 여러 가지 정책은 AWS 서비스에서 사용자 대신 작업을 수행할 수 있도록 해주는 역할을 이용해 해당 서비스를 구성할 수 있는 권한을 부여합니다. 직무 정책은 반드시 사용해야 하는 정확한 역할 이름을 정의하거나, 사용할 수 있는 이름의 앞부분을 지정하는 접두사만이라도 포함합니다. 이러한 역할 중 하나를 생성하려면 다음 절차의 단계를 따릅니다.

**AWS 서비스에 대한 역할 생성(IAM 콘솔)**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택하고 **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

1. **서비스 또는 사용 사례**의 경우 서비스를 선택한 다음, 사용 사례를 선택합니다. 사용 사례는 서비스에 필요한 신뢰 정책을 포함하도록 서비스에서 정의합니다.

1. **다음**을 선택합니다.

1. **권한 정책**의 경우 선택한 사용 사례에 따라 옵션이 달라집니다.
   + 서비스가 역할에 대한 권한을 정의하는 경우 권한 정책을 선택할 수 없습니다.
   + 제한된 권한 정책 세트에서 선택합니다.
   + 모든 권한 정책에서 선택합니다.
   + 권한 정책 없음을 선택하고 역할이 생성된 후 정책을 생성한 다음, 정책을 역할에 연결합니다.

1. (선택 사항) [권한 경계](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 선택합니다. 이는 서비스 역할에서 사용 가능한 고급 기능이며 서비스에 연결된 역할은 아닙니다.

   1. **권한 경계 설정** 섹션을 열고 **최대 역할 권한을 관리하기 위한 권한 경계 사용**을 선택합니다.

      IAM은 계정의 AWS 관리형 또는 고객 관리형 정책 목록을 포함합니다.

   1. 정책을 선택하여 권한 경계를 사용합니다.

1. **다음**을 선택합니다.

1. **역할 이름**의 경우 옵션은 서비스에 따라 달라집니다.
   + 서비스에서 역할 이름을 정의하는 경우 이 역할 이름을 편집할 수 없습니다.
   + 서비스에서 역할 이름에 대한 접두사를 정의하는 경우 사용자가 선택적 접미사를 입력할 수 있습니다.
   + 서비스에서 역할 이름을 정의하지 않는 경우 역할 이름을 지정할 수 있습니다.
**중요**  
역할 이름을 지정할 때는 다음 사항에 유의하세요.  
역할 이름은 AWS 계정 내에서 고유해야 하지만 대소문자를 구분하지는 않습니다.  
예를 들어, 이름이 **PRODROLE**과 **prodrole**, 두 가지로 지정된 역할을 만들지 마세요. 역할 이름이 정책 또는 ARN의 일부로 사용되는 경우 역할 이름은 대소문자를 구분합니다. 그러나 로그인 프로세스와 같이 콘솔에서 역할 이름이 고객에게 표시되는 경우에는 역할 이름이 대소문자를 구분하지 않습니다.
다른 엔터티가 역할을 참조할 수 있기 때문에 역할이 생성된 후에는 역할 이름을 편집할 수 없습니다.

1. (선택 사항) **설명**에 역할에 대한 설명을 입력합니다.

1. (선택 사항) 역할에 대한 사용 사례와 권한을 편집하려면 **1단계: 신뢰할 수 있는 엔터티 선택** 또는 **2단계: 권한 추가** 섹션에서 **편집**을 선택합니다.

1. (선택 사항) 역할을 식별, 구성 또는 검색하려면 태그를 키-값 페어로 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS Identity and Access Management 리소스용 태그](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)를 참조하세요.

1. 역할을 검토한 다음 **역할 생성**을 선택합니다.

## 예시 1: 사용자를 데이터베이스 관리자로 구성(콘솔)
<a name="jf_example_1"></a>

이 예시는 IAM 사용자 Alice를 [데이터베이스 관리자](access_policies_job-functions.md#jf_database-administrator)로 구성하는 데 필요한 단계를 보여줍니다. 이 섹션에서 테이블 첫 번째 행의 정보를 사용하여 사용자가 Amazon RDS 모니터링을 지원하도록 허용합니다. Amazon 데이터베이스 서비스를 관리할 수 있도록 [DatabaseAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/DatabaseAdministrator) 정책을 Alice의 IAM 사용자에게 연결합니다. 이 정책을 통해 Alice는 `rds-monitoring-role`(이)라는 역할을 Amazon RDS 서비스로 전달할 수도 있습니다. 그러면 사용자를 대신해 Amazon RDS 데이터베이스를 모니터링합니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. **정책**을 선택한 후 검색 상자에 **database**를 입력하고 Enter를 누릅니다.

1. **DatabaseAdministrator** 정책의 라디오 버튼과 **작업**, **연결**을 차례로 선택합니다.

1. 엔터티 목록에서 **Alice**를 선택한 후 **정책 연결**을 선택합니다. 이제 Alice가 AWS 데이터베이스를 관리할 수 있습니다. 하지만 Alice가 이 데이터베이스를 모니터링하도록 허용하려면 서비스 역할을 구성해야 합니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택하고 **역할 생성**을 선택합니다.

1. **AWS 서비스** 역할 유형을 선택한 후 **Amazon RDS**를 선택합니다.

1. **확장 모니터링을 위한 Amazon RDS 역할(Amazon RDS Role for Enhanced Monitoring)** 사용 사례를 선택합니다.

1. Amazon RDS는 역할에 대한 권한을 정의합니다. 계속하려면 **Next: Review(다음: 검토)**를 선택합니다.

1. 역할 이름은 현재 Alice가 적용하는 DatabaseAdministrator 정책에 지정된 것 중 하나여야 합니다. 그중 하나는 **rds-monitoring-role**입니다. **Role name**(역할 이름)에 이를 입력합니다.

1. (선택 사항) **역할 설명**에 새 역할에 대한 설명을 입력합니다.

1. 세부 정보를 검토한 후 **역할 생성**을 선택합니다.

1. 이제 Alice는 Amazon RDS 콘솔의 **모니터링** 섹션에서 **RDS 확장 모니터링(RDS Enhanced Monitoring)**을 활성화할 수 있습니다. 예를 들어, DB 인스턴스 또는 읽기 전용 복제본을 생성하거나 DB 인스턴스를 수정할 때 이렇게 합니다. **Enable Enhanced Monitoring**(확장 모니터링 활성화)를 **Yes**(예)로 설정하면서 **Monitoring Role**(역할 모니터링) 상자에 생성한 역할 이름(rds-monitoring-role)을 입력해야 합니다.

## 예시 2: 사용자를 네트워크 관리자로 구성(콘솔)
<a name="jf_example_2"></a>

이 예시는 IAM 사용자 Jorge를 [네트워크 관리자](access_policies_job-functions.md#jf_network-administrator)로 구성하는 데 필요한 단계를 보여줍니다. 해당 섹션에서 테이블의 정보를 사용하여 Jorge가 VPC로 들어오고 나가는 IP 트래픽을 모니터링하도록 허용합니다. 또한 Jorge가 CloudWatch Logs의 로그에서 해당 정보를 캡처하도록 허용합니다. AWS 네트워크 리소스를 구성할 수 있도록 Jorge의 IAM 사용자에게 [NetworkAdministrator](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/job-function/NetworkAdministrator) 정책을 연결합니다. 또한 이 정책 덕분에 흐름 로그를 작성할 때 Jorge가 `flow-logs*`(으)로 시작하는 역할을 Amazon EC2로 전달하도록 설정할 수 있습니다. 예시 1과 달리 이 시나리오에서는 사전 정의된 서비스 역할 유형이 없기 때문에 몇 가지 단계를 다르게 수행해야 합니다.

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 탐색 창에서 **정책**을 선택한 후 검색 상자에 **network**를 입력합니다.

1. **NetworkAdministrator** 정책 옆의 라디오 버튼에 이어 **작업**, **연결**을 차례로 선택합니다.

1. 사용자 목록에서 **Jorge** 옆에 있는 확인란을 선택한 후 **정책 연결**을 선택하세요. 이제 Jorge가 AWS 네트워크 리소스를 관리할 수 있습니다. 하지만 VPC 내 트래픽을 모니터링하도록 하려면 서비스 역할을 구성해야 합니다.

1. 생성해야 하는 서비스 역할에 사전 정의된 관리형 정책이 없기 때문에 먼저 이 정책부터 생성해야 합니다. 탐색 창에서 **정책**을 선택한 다음 **정책 생성**을 선택합니다.

1. **정책 편집기** 섹션에서 **JSON** 옵션을 선택하고, 다음의 JSON 정책 문서에서 텍스트를 복사합니다. 이 텍스트를 **JSON** 텍스트 상자에 붙여 넣습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:DescribeLogGroups",
           "logs:DescribeLogStreams"
         ],
         "Effect": "Allow",
         "Resource": "*"
       }
     ]
   }
   ```

------

1.  [정책 검증](access_policies_policy-validator.md) 중에 생성되는 모든 보안 경고, 오류 또는 일반 경고를 해결하고 **다음**을 선택합니다.
**참고**  
언제든지 **시각적** 편집기 옵션과 **JSON** 편집기 옵션을 서로 전환할 수 있습니다. 그러나 변경을 적용하거나 **시각적** 편집기에서 **다음**을 선택한 경우 IAM은 시각적 편집기에 최적화되도록 정책을 재구성할 수 있습니다. 자세한 내용은 [정책 재구성](troubleshoot_policies.md#troubleshoot_viseditor-restructure) 섹션을 참조하세요.

1. **검토 및 생성** 페이지에서 정책 이름에 **vpc-flow-logs-policy-for-service-role**을 입력합니다. **이 정책에 정의된 권한**을 검토하여 정책이 부여한 권한을 확인한 다음 **정책 생성**을 선택하여 작업을 저장합니다.

   새로운 정책이 관리형 정책 목록에 나타나며 연결 준비가 완료됩니다.

1. IAM 콘솔의 탐색 창에서 **역할**을 선택하고 **역할 생성**을 선택합니다.

1. **AWS 서비스** 역할 유형을 선택한 후 **Amazon EC2**를 선택합니다.

1. **Amazon EC2** 사용 사례를 선택합니다.

1. **권한 정책 연결** 페이지에서 앞서 생성한 정책을 선택하고 **vpc-flow-logs-policy-for-service-role**과 **Next: Review(다음: 검토)**를 차례로 선택합니다.

1. 역할 이름은 현재 Jorge가 적용하는 NetworkAdministrator 정책에서 허용한 것이어야 합니다. `flow-logs-`로 시작하는 이름은 무엇이든 허용됩니다. 이 예시에서는 **Role name**(역할 이름)에 **flow-logs-for-jorge**을(를) 입력합니다.

1. (선택 사항) **역할 설명**에 새 역할에 대한 설명을 입력합니다.

1. 세부 정보를 검토한 후 **역할 생성**을 선택합니다.

1. 이제 이 시나리오에 필요한 신뢰 정책을 구성할 수 있습니다. **역할** 페이지에서 **flow-logs-for-jorge** 역할(확인란이 아닌 이름)을 선택하세요. 새 역할의 세부 정보 페이지에서 **신뢰 관계** 탭을 선택한 다음 **Edit trust relationship(신뢰 관계 편집)**을 선택합니다.

1. "Service" 라인을 다음과 같이 변경해 `ec2.amazonaws.com`의 항목을 교체합니다.

   ```
           "Service": "vpc-flow-logs.amazonaws.com"
   ```

1. 이제 Jorge가 Amazon EC2 콘솔에서 VPC나 서브넷의 흐름 로그를 생성할 수 있습니다. 흐름 로그를 생성할 때 **flow-logs-for-jorge** 역할을 지정합니다. 이 역할에는 로그를 생성하고 데이터를 쓸 수 있는 권한이 있습니다.

# AWS 글로벌 조건 컨텍스트 키
<a name="reference_policies_condition-keys"></a>

[보안 주체](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html?icmpid=docs_homepage_addtlrcs#principal)가 AWS에 [요청](intro-structure.md#intro-structure-request)하면 AWS는 요청 정보를 [요청 컨텍스트](intro-structure.md#intro-structure-request)로 수집합니다. JSON 정책의 `Condition` 요소를 사용하여 요청 컨텍스트의 키를 정책에서 지정한 키 값과 비교할 수 있습니다. 요청 정보는 요청을 수행하는 보안 주체, 요청의 대상이 되는 리소스, 요청 자체에 대한 메타데이터 등 다양한 소스를 통해 제공됩니다.

**전역 조건 키**는 모든 AWS 서비스에서 사용할 수 있습니다. 이러한 조건 키는 모든 정책에서 사용할 수 있지만 모든 요청 컨텍스트에서 키를 사용할 수 있는 것은 아닙니다. 예를 들어 `aws:SourceAccount` 조건 키는 [AWS 서비스 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)가 리소스를 직접적으로 호출하는 경우에만 사용할 수 있습니다. 요청 컨텍스트에 전역 키가 포함되는 상황에 대한 자세한 내용은 각 키의 **가용성** 정보를 참조하세요.

일부 개별 서비스는 다른 서비스의 요청 컨텍스트에서 사용할 수 있는 자체 조건 키를 생성합니다. **교차 서비스 조건 키**는 `ec2:` 또는 `lambda:`와 같이 서비스 이름과 일치하는 접두사를 포함하지만 다른 서비스에서 사용할 수 있는 전역 조건 키의 한 유형입니다.

**서비스별 조건 키**는 개별 AWS 서비스에 사용할 수 있도록 정의됩니다. 예를 들어 Amazon S3에서는 `s3:VersionId` 조건 키를 사용하여 Amazon S3 객체의 특정 버전에 대한 액세스를 제한하는 정책을 작성할 수 있습니다. 이 조건 키는 서비스에 고유합니다. 즉, Amazon S3 서비스에 대한 요청에만 작동합니다. 서비스별 조건 키의 경우 [AWS 서비스에 대한 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)를 참조하고 키를 보려는 서비스를 선택합니다.

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

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

**중요**  
조건을 여러 키 값이 있는 요청 컨텍스트와 비교하려면 `ForAllValues` 또는 `ForAnyValue` 연산자를 설정해야 합니다. 집합 연산자는 다중 값 조건 키에만 사용합니다. 단일 값 조건 키(single-valued condition keys)에는 집합 연산자를 사용하지 마세요. 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.


| 보안 주체의 속성 | 역할 세션의 속성 | 네트워크의 속성 | 리소스의 속성 | 요청의 속성 | 
| --- | --- | --- | --- | --- | 
|  `aws:PrincipalArn` `aws:PrincipalAccount` `aws:PrincipalOrgPaths` `aws:PrincipalOrgID` `aws:PrincipalTag/*tag-key*` `aws:PrincipalIsAWSService` `aws:PrincipalServiceName` `aws:PrincipalServiceNamesList` `aws:PrincipalType` `aws:userid` `aws:username`  |  `aws:AssumedRoot` `aws:FederatedProvider` `aws:TokenIssueTime` `aws:MultiFactorAuthAge` `aws:MultiFactorAuthPresent` `aws:ChatbotSourceArn` `aws:Ec2InstanceSourceVpc` `aws:Ec2InstanceSourcePrivateIPv4` `aws:SourceIdentity` `ec2:RoleDelivery` `ec2:SourceInstanceArn` `glue:RoleAssumedBy` `glue:CredentialIssuingService` `codebuild:BuildArn` `codebuild:ProjectArn` `lambda:SourceFunctionArn` `ssm:SourceInstanceArn` `identitystore:UserId`  |  `aws:SourceIp` `aws:SourceVpc` `aws:SourceVpcArn` `aws:SourceVpce` `aws:VpceAccount` `aws:VpceOrgID` `aws:VpceOrgPaths` `aws:VpcSourceIp`  |  `aws:ResourceAccount` `aws:ResourceOrgID` `aws:ResourceOrgPaths` `aws:ResourceTag/*tag-key*`  |  `aws:CalledVia` `aws:CalledViaFirst` `aws:CalledViaLast` `aws:CalledViaAWSMCP` `aws:ViaAWSService` `aws:ViaAWSMCPService` `aws:CurrentTime` `aws:EpochTime` `aws:referer` `aws:RequestedRegion` `aws:RequestTag/*tag-key*` `aws:TagKeys` `aws:SecureTransport` `aws:SourceAccount` `aws:SourceArn` `aws:SourceOrgID` `aws:SourceOrgPaths` `aws:UserAgent` `aws:IsMcpServiceAction`  | 

## 민감한 조건 키
<a name="condition-keys-sensitive"></a>

다음과 같은 조건 키는 민감한 것으로 간주됩니다. 이러한 조건 키에 와일드카드를 사용하면 와일드카드가 포함된 키값의 하위 문자열을 사용하더라도 유효한 사용 사례가 없습니다. 와일드카드로 인해 조건 키가 어떤 값과도 일치할 수 있어 보안 위험이 발생할 수 있기 때문입니다.
+ `aws:PrincipalAccount`
+ `aws:PrincipalOrgID`
+ `aws:ResourceAccount`
+ `aws:ResourceOrgID`
+ `aws:SourceAccount`
+ `aws:SourceOrgID`
+ `aws:SourceVpc`
+ `aws:SourceVpce`
+ `aws:VpceAccount`
+ `aws:VpceOrgID`

## 보안 주체의 속성
<a name="condition-keys-principal-properties"></a>

다음 조건 키를 사용하여 요청하는 보안 주체에 대한 세부 정보를 정책에 지정한 보안 주체 속성과 비교합니다. 요청할 수 있는 보안 주체의 목록은 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요.

### aws:PrincipalArn
<a name="condition-keys-principalarn"></a>

이 키를 사용하여 요청한 보안 주체의 [Amazon 리소스 이름](reference_identifiers.md#identifiers-arns)(ARN)을 정책에서 지정한 ARN과 비교합니다. IAM 역할의 경우 요청 컨텍스트는 역할을 수임한 사용자의 ARN이 아니라 역할의 ARN을 반환합니다.
+ **가용성** - 이 키는 서명된 모든 요청에 대한 요청 컨텍스트에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다. 이 조건 키에서 다음 유형의 보안 주체를 지정할 수 있습니다.
  + IAM 역할
  + IAM 사용자
  + AWS STS 페더레이션 사용자 보안 주체
  + AWS 계정 루트 사용자
+ **데이터 유형** - ARN

  AWS는 ARN을 비교할 때 [문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String) 대신 [ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용하는 것이 좋습니다.
+ **값 유형**-단일 값
+ **예제 값** 다음 목록은 `aws:PrincipalArn` 조건 키에서 지정할 수 있는 여러 유형의 보안 주체에 대해 반환된 요청 컨텍스트 값을 보여줍니다.
  + **IAM 역할** – 요청 컨텍스트에는 조건 키 `aws:PrincipalArn`에 대한 다음 값이 포함됩니다. 맡은 역할 세션 ARN을 조건 키의 값으로 지정하지 마십시오. 위임된 역할 세션 보안 주체에 대한 자세한 내용은 [역할 세션 보안 주체](reference_policies_elements_principal.md#principal-role-session) 섹션을 참조하세요.

    ```
    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 계정 보안 주체](reference_policies_elements_principal.md#principal-accounts) 섹션을 참조하세요.

    ```
    arn:aws:iam::123456789012:root
    ```

루트 사용자 ARN을 AWS Organizations 서비스 제어 정책(SCP)의 조건 키 `aws:PrincipalArn`의 값으로 지정할 수 있습니다. SCP는 조직의 권한을 관리하는 데 사용되는 조직 정책 유형이며 조직의 구성원 계정에만 영향을 미칩니다. SCP는 멤버 계정의 IAM 사용자 및 역할(멤버 계정의 루트 사용자 포함)에 대해 권한을 제한합니다. SCP가 권한에 미치는 영향에 대한 자세한 내용은 *AWS Organizations 사용 설명서*의 [SCP가 권한에 미치는 영향](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#scp-effects-on-permissions)을 참조하세요.

### aws:PrincipalAccount
<a name="condition-keys-principalaccount"></a>

이 키를 사용하여 요청한 보안 주체가 속한 계정과 정책에서 지정한 계정 식별자를 비교합니다. 익명 요청의 경우 요청 컨텍스트는 `anonymous`를 반환합니다.
+ **가용성**-이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessFromPrincipalNotInSpecificAccount",
      "Action": "service:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:service:us-east-1:111122223333:resource"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": [
            "123456789012"
          ]
        }
      }
    }
  ]
}
```

------

### aws:PrincipalOrgPaths
<a name="condition-keys-principalorgpaths"></a>

이 키를 사용하여 요청 중인 보안 주체의 AWS Organizations 경로를 정책의 경로와 비교합니다. 이 보안 주체는 IAM 사용자, IAM 역할, AWS STS 페더레이션 사용자 보안 주체 또는 AWS 계정 루트 사용자일 수 있습니다. 정책에서 이 조건 키는 요청자가 AWS Organizations의 지정된 조직 루트 또는 조직 단위(OU) 내의 계정 멤버인지 확인합니다. AWS Organizations 경로는 AWS Organizations 엔터티 구조의 텍스트 표현입니다. 경로 사용 및 이해에 대한 자세한 내용은 [AWS Organizations 엔터티 경로 이해](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path) 섹션을 참조하세요.
+ **가용성**-이 키는 보안 주체가 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다.
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

**참고**  
조직 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`는 다중 값 조건 키입니다. 다중 값 키는 요청 컨텍스트에서 여러 값을 가질 수 있습니다. `ForAnyValue` 조건 연산자에서 여러 값을 사용하는 경우 보안 주체의 경로는 정책에 나열된 경로 중 하나와 일치해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

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

### aws:PrincipalOrgID
<a name="condition-keys-principalorgid"></a>

이 키를 사용하여 요청한 보안 주체가 속한 AWS Organizations의 조직 식별자와 정책에 지정된 식별자를 비교합니다.
+ **가용성**-이 키는 보안 주체가 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

이 전역 키는 조직 내 모든 AWS 계정의 계정 ID를 전부 나열하는 대안을 제공합니다. 이 조건 키를 사용하여 [리소스 기반 정책](access_policies_identity-vs-resource.md)에서 `Principal` 요소를 간단하게 지정할 수 있습니다. 조건 요소에서 [조직 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)를 지정할 수 있습니다. 계정을 추가 및 제거할 때 `aws:PrincipalOrgID` 키가 포함된 정책에는 자동으로 올바른 계정이 포함되므로 수동 업데이트가 필요하지 않습니다.

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

------
#### [ JSON ]

****  

```
 {
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Sid": "AllowPutObject",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {"StringEquals":
      {"aws:PrincipalOrgID":"o-xxxxxxxxxxx"}
    }
  }
}
```

------

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

AWS Organizations에 대한 자세한 내용은 *AWS Organizations 사용 설명서*의 [AWS Organizations이란 무엇입니까?](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)를 참조하세요.

### aws:PrincipalTag/*tag-key*
<a name="condition-keys-principaltag"></a>

이 키를 사용하여 요청한 보안 주체에 연결된 태그를 정책에서 지정한 태그와 비교합니다. 보안 주체에 둘 이상의 태그가 연결되어 있는 경우 요청 컨텍스트에는 연결된 각 태그 키에 대해 `aws:PrincipalTag` 키가 하나씩 포함됩니다.
+ **가용성** - 이 키는 보안 주체가 태그가 연결된 IAM 사용자를 사용하는 경우 요청 컨텍스트에 포함됩니다. 연결된 태그 또는 [세션 태그](id_session-tags.md)가 있는 IAM 역할을 사용하는 보안 주체에 포함됩니다. 익명 요청에는 이 키가 포함되지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

사용자 또는 역할에 사용자 지정 속성을 키 값 페어의 형태로 추가할 수 있습니다. IAM에서의 태그 사용에 대한 자세한 내용은 [AWS Identity and Access Management 리소스용 태그](id_tags.md) 섹션을 참조하세요. `aws:PrincipalTag`를 사용하여 AWS 보안 주체에 대한 [액세스를 제어](access_iam-tags.md#access_iam-tags_control-principals)할 수 있습니다.

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

------
#### [ JSON ]

****  

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

------

### aws:PrincipalIsAWSService
<a name="condition-keys-principalisawsservice"></a>

이 키를 사용하여 리소스에 대한 호출이 AWS [서비스 보안 주체](reference_policies_elements_principal.md#principal-services)에 의해 직접 수행되고 있는지를 확인합니다. 예를 들어 AWS CloudTrail은 서비스 보안 주체 `cloudtrail.amazonaws.com`을 사용하여 Amazon S3 버킷에 로그를 작성합니다. 서비스가 서비스 보안 주체를 사용하여 리소스에 대한 직접 작업을 수행하는 경우 요청 컨텍스트 키는 true로 설정됩니다. 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하면 요청 컨텍스트 키가 false로 설정됩니다. 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우에도 false로 설정됩니다.
+ **가용성** - 이 키는 AWS 자격 증명을 사용하는 모든 API 요청에 대한 요청 컨텍스트에 표시됩니다. 익명 요청에는 이 키가 포함되지 않습니다.
+ **데이터 유형** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

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

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

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExpectedNetworkServicePrincipal",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/AWSLogs/AccountNumber/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-111bbb22"
        },
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false"
        }
      }
    }
  ]
}
```

------

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

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/gv-_H8a42G4/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/gv-_H8a42G4)


### aws:PrincipalServiceName
<a name="condition-keys-principalservicename"></a>

이 키를 사용하여 정책의 [서비스 보안 주체](reference_policies_elements_principal.md#principal-services)이름을 리소스에 요청하는 서비스 보안 주체와 비교합니다. 이 키를 사용하여 이 호출이 특정 서비스 보안 주체에 의해 수행되었는지를 확인할 수 있습니다. 서비스 보안 주체가 리소스에 직접 요청하면 `aws:PrincipalServiceName` 키에는 서비스 보안 주체의 이름이 포함됩니다. 예를 들어 AWS CloudTrail 서비스 보안 주체의 이름은 `cloudtrail.amazonaws.com`입니다.
+ **가용성** - 이 키는 호출이 AWS 서비스 보안 주체에 의해 이루어질 때 요청에 표시됩니다. 이 키는 다음과 같은 다른 상황에서는 나타나지 않습니다.
  + 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우.
  + 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하는 경우.
  + IAM 보안 주체가 직접 호출한 경우.
  + 익명의 요청자가 호출하는 경우.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

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

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExpectedNetworkServicePrincipal",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/AWSLogs/AccountNumber/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-111bbb22",
          "aws:PrincipalServiceName": "cloudtrail.amazonaws.com"
        }
      }
    }
  ]
}
```

------

### aws:PrincipalServiceNamesList
<a name="condition-keys-principalservicenameslist"></a>

이 키는 서비스에 속한 모든 [서비스 보안 주체](reference_policies_elements_principal.md#principal-services) 이름의 목록을 제공합니다. 이 키는 고급 조건 키입니다. 이를 사용해 서비스가 특정 리전에서만 리소스에 액세스하지 못하도록 제한할 수 있습니다. 일부 서비스는 특정 리전 내에서 서비스의 특정 인스턴스를 나타내는 리전 서비스 보안 주체를 생성할 수 있습니다. 리소스에 대한 액세스를 서비스의 특정 인스턴스로 제한할 수 있습니다. 서비스 보안 주체가 리소스에 직접 요청하는 경우 `aws:PrincipalServiceNamesList`에는 서비스의 리전별 인스턴스와 연결된 모든 서비스 보안 주체 이름의 순서가 지정되지 않은 목록이 포함되어 있습니다.
+ **가용성** - 이 키는 호출이 AWS 서비스 보안 주체에 의해 이루어질 때 요청에 표시됩니다. 이 키는 다음과 같은 다른 상황에서는 나타나지 않습니다.
  + 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우.
  + 서비스가 IAM 보안 주체의 자격 증명을 사용해 보안 주체를 대신하여 요청을 수행하는 경우.
  + IAM 보안 주체가 직접 호출한 경우.
  + 익명의 요청자가 호출하는 경우.
+ **데이터 형식**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

`aws:PrincipalServiceNamesList`는 다중 값 조건 키입니다. 다중 값 키는 요청 컨텍스트에서 여러 값을 가질 수 있습니다. 이 키에 대한 [문자열 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_String)와 함께 `ForAnyValue` 또는 `ForAllValues` 집합 연산자를 사용해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

### aws:PrincipalType
<a name="condition-keys-principaltype"></a>

이 키를 사용하여 요청하는 보안 주체의 유형을 정책에서 지정한 보안 주체 유형과 비교합니다. 자세한 내용은 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요. `principal` 키 값의 구체적인 예제를 보려면 [보안 주체 키 값](reference_policies_variables.md#principaltable) 섹션을 참조하세요.
+ **가용성**-이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

### aws:userid
<a name="condition-keys-userid"></a>

이 키를 사용하여 요청자의 보안 주체 식별자를 정책에서 지정한 ID와 비교합니다. IAM 사용자의 경우 요청 컨텍스트 값은 사용자 ID입니다. IAM 역할의 경우 이 값 형식은 다를 수 있습니다. 다른 보안 주체에 대한 정보가 표시되는 방법에 대한 자세한 내용은 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요. `principal` 키 값의 구체적인 예제를 보려면 [보안 주체 키 값](reference_policies_variables.md#principaltable) 섹션을 참조하세요.
+ **가용성**-이 키는 익명 요청을 포함한 모든 요청에 대한 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

### aws:username
<a name="condition-keys-username"></a>

이 키를 사용하여 요청자의 사용자 이름을 정책에서 지정한 사용자 이름과 비교합니다. 다른 보안 주체에 대한 정보가 표시되는 방법에 대한 자세한 내용은 [보안 주체를 지정하는 방법](reference_policies_elements_principal.md#Principal_specifying) 섹션을 참조하세요. `principal` 키 값의 구체적인 예제를 보려면 [보안 주체 키 값](reference_policies_variables.md#principaltable) 섹션을 참조하세요.
+ **가용성** - 이 키는 항상 IAM 사용자의 요청 컨텍스트에 포함됩니다. 익명 요청 및 AWS 계정 루트 사용자 또는 IAM 역할에서 생성된 요청에는 이 키가 포함되지 않습니다. IAM Identity Center 보안 인증을 사용하여 수행된 요청에는 컨텍스트에 이 키가 포함되지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

## 역할 세션의 속성
<a name="condition-keys-role-session-properties"></a>

다음 조건 키를 사용하여 세션이 생성된 시점의 역할 세션 속성을 비교합니다. 이러한 조건 키는 보안 주체가 역할 세션 또는 페더레이션 사용자 보안 주체 자격 증명을 사용하여 요청하는 경우에만 사용 가능합니다. 이러한 조건 키의 값은 역할의 세션 토큰에 포함됩니다.

[역할](reference_policies_elements_principal.md#principal-roles)은 보안 주체의 한 유형입니다. [보안 주체의 속성](#condition-keys-principal-properties) 섹션의 조건 키를 사용하여 역할이 요청할 때 역할의 속성을 평가할 수도 있습니다.

### aws:AssumedRoot
<a name="condition-keys-assumedroot"></a>

[AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html)를 사용하여 요청이 이루어졌는지 확인하려면 이 키를 사용합니다. `AssumeRoot`는 조직의 멤버 계정에서 권한 있는 작업을 수행하는 데 사용할 수 있는 권한 있는 루트 사용자 세션에 대한 단기 자격 증명을 반환합니다. 자세한 내용은 [중앙에서 멤버 계정에 대한 루트 액세스 관리](id_root-user.md#id_root-user-access-management) 섹션을 참조하세요.
+ **가용성** - 이 키는 보안 주체가 [AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html)의 자격 증명을 사용하여 요청할 때만 요청 컨텍스트에 포함됩니다.
+ **데이터 유형** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

다음 예제에서는 서비스 제어 정책으로 사용하는 경우 AWS Organizations 멤버 계정에 있는 루트 사용자의 장기 자격 증명 사용을 거부합니다. 이 정책에서는 `AssumeRoot` 세션에서 허용하는 작업을 `AssumeRoot` 세션이 수행하는 것을 거부하지 않습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
       {
          "Effect":"Deny",
          "Action":"*",
          "Resource": "*",
          "Condition":{
             "ArnLike":{
                "aws:PrincipalArn":[
                   "arn:aws:iam::*:root"
                ]
             },
             "Null":{
                "aws:AssumedRoot":"true"
             }
          }
       }
    ]
 }
```

------

### aws:FederatedProvider
<a name="condition-keys-federatedprovider"></a>

이 키를 사용하여 요청자의 보안 주체 식별자 공급자(IdP)를 정책에서 지정한 IdP와 비교합니다. 이는 [https://docs.aws.amazon.com//STS/latest/APIReference/API_AssumeRoleWithWebIdentity](https://docs.aws.amazon.com//STS/latest/APIReference/API_AssumeRoleWithWebIdentity) AWS STS 작업을 사용하여 IAM 역할을 수임했음을 의미합니다. 결과 역할 세션의 임시 자격 증명이 요청을 수행하는 데 사용되는 경우 요청 컨텍스트는 원래 페더레이션 자격 증명을 인증한 IdP를 식별합니다.
+ **가용성** - 이 키는 OpenID Connect(OIDC) 공급자를 사용하여 수임한 역할의 역할 세션과 OIDC 공급자가 `AssumeRoleWithWebIdentity`를 직접 호출하는 데 사용될 때의 역할 신뢰 정책에 있습니다.
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)\$1
+ **값 유형**-단일 값

\$1 데이터 유형은 IdP에 따라 달라집니다.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)와 같은 기본 제공 AWS IdP를 사용하는 경우 키 값은 **문자열**입니다. 키 값은 `cognito-identity.amazonaws.com`과 같을 수 있습니다.
+ [https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) 또는 [Amazon EKS](https://docs.aws.amazon.com//eks/latest/userguide/associate-service-account-role.html)와 같이 AWS에서 기본으로 제공되지 않는 IdP를 사용하는 경우 키 값은 **ARN**입니다. 키 값은 `arn:aws:iam::111122223333:oidc-provider/oidc.eks.region.amazonaws.com/id/OIDC_Provider_ID`과 같을 수 있습니다.

외부 IdP 및 `AssumeRoleWithWebIDentity`에 대한 자세한 내용은 [일반적인 시나리오](id_federation_common_scenarios.md) 섹션을 참조하세요. 자세한 내용은 [역할 세션 보안 주체](reference_policies_elements_principal.md#principal-role-session) 섹션을 참조하세요.

### aws:TokenIssueTime
<a name="condition-keys-tokenissuetime"></a>

이 키를 사용하여 임시 보안 자격 증명이 발급된 날짜와 시간을 정책에서 지정한 날짜 및 시간과 비교할 수 있습니다.
+ **가용성**-이 키는 보안 주체가 임시 자격 증명을 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다. 액세스 키를 사용하는 AWS CLI, AWS API 또는 AWS SDK 요청에는 이 키가 존재하지 않습니다.
+ **데이터 유형** - [날짜](reference_policies_elements_condition_operators.md#Conditions_Date)
+ **값 유형**-단일 값

임시 자격 증명의 사용을 지원하는 서비스에 대해 알아보려면 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md) 섹션을 참조하세요.

### aws:MultiFactorAuthAge
<a name="condition-keys-multifactorauthage"></a>

이 키를 사용하여 요청한 보안 주체가 MFA를 사용하여 승인된 이후의 시간(초)과 정책에서 지정한 시간을 비교합니다. MFA에 대한 자세한 내용은 [IAM의 AWS 다중 인증](id_credentials_mfa.md) 섹션을 참조하세요.

**중요**  
이 조건 키는 페더레이션형 ID 또는 액세스 키를 사용하여 AWS CLI, AWS API 또는 AWS SDK 요청에 서명하기 위해 만든 요청에는 존재하지 않습니다. 임시 보안 자격 증명으로 API 작업에 MFA 보호를 추가하는 방법에 대한 자세한 내용은 [MFA를 통한 보안 API 액세스](id_credentials_mfa_configure-api-require.md) 섹션을 참조하세요.  
IAM 페더레이션형 ID를 검증하는 데 MFA가 사용되는지 확인하려면 ID 제공업체의 인증 방법을 AWS에 세션 태그로 전달합니다. 자세한 내용은 [AWS STS에서 세션 태그 전달](id_session-tags.md)을 참조하세요. IAM Identity Center ID에 대해 MFA를 적용하려면 [액세스 제어 속성](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-abac.html)에서 ID 제공업체의 인증 방법과 함께 SAML 어설션 클레임을 IAM Identity Center에 전달할 수 있게 합니다.
+ **가용성** - 이 키는 보안 주체가 [임시 보안 자격 증명](id_credentials_temp.md)을 사용하여 요청할 때만 요청 컨텍스트에 포함됩니다. MFA 조건이 포함된 정책은 다음에 연결할 수 있습니다.
  + IAM 사용자 또는 그룹
  + Amazon S3 버킷, Amazon SQS 대기열, Amazon SNS 주제 등과 같은 리소스
  + 사용자가 수임할 수 있는 IAM 역할의 신뢰 정책
+ **데이터 유형** – [숫자](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **값 유형**-단일 값

### aws:MultiFactorAuthPresent
<a name="condition-keys-multifactorauthpresent"></a>

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

**중요**  
이 조건 키는 페더레이션형 ID 또는 액세스 키를 사용하여 AWS CLI, AWS API 또는 AWS SDK 요청에 서명하기 위해 만든 요청에는 존재하지 않습니다. 임시 보안 자격 증명으로 API 작업에 MFA 보호를 추가하는 방법에 대한 자세한 내용은 [MFA를 통한 보안 API 액세스](id_credentials_mfa_configure-api-require.md) 섹션을 참조하세요.  
IAM 페더레이션형 ID를 검증하는 데 MFA가 사용되는지 확인하려면 ID 제공업체의 인증 방법을 AWS에 세션 태그로 전달합니다. 자세한 내용은 [AWS STS에서 세션 태그 전달](id_session-tags.md)을 참조하세요. IAM Identity Center ID에 대해 MFA를 적용하려면 [액세스 제어 속성](https://docs.aws.amazon.com/singlesignon/latest/userguide/configure-abac.html)에서 ID 제공업체의 인증 방법과 함께 SAML 어설션 클레임을 IAM Identity Center에 전달할 수 있게 합니다.
+ **가용성**-이 키는 보안 주체가 임시 자격 증명을 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다. MFA 조건이 포함된 정책은 다음에 연결할 수 있습니다.
  + IAM 사용자 또는 그룹
  + Amazon S3 버킷, Amazon SQS 대기열, Amazon SNS 주제 등과 같은 리소스
  + 사용자가 수임할 수 있는 IAM 역할의 신뢰 정책
+ **데이터 유형** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

임시 자격 증명은 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 또는 [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html)의 임시 토큰을 사용하여 IAM 역할 및 IAM 사용자와 AWS Management Console 사용자를 인증하는 데 사용됩니다.

IAM 사용자 액세스 키는 장기 자격 증명이지만 경우에 따라 AWS는 작업을 수행하기 위해 IAM 사용자를 대신하여 임시 자격 증명을 생성합니다. 이러한 경우 `aws:MultiFactorAuthPresent` 키는 요청에 있으며 `false` 값으로 설정됩니다. 이런 일이 발생할 수 있는 두 가지 일반적인 경우가 있습니다.
+ AWS Management Console의 IAM 사용자는 자신도 모르게 임시 자격 증명을 사용합니다. 사용자는 장기 자격 증명인 사용자 이름과 암호를 사용하여 콘솔에 로그인합니다. 하지만 백그라운드에서는 콘솔이 사용자를 대신하여 임시 자격 증명을 생성합니다.
+ IAM 사용자가 AWS 서비스를 호출하는 경우 서비스는 사용자의 자격 증명을 다시 사용하여 다른 서비스에 다른 요청을 합니다. 예를 들어 Athena를 호출하여 Amazon S3 버킷에 액세스하거나 CloudFormation을 사용해 Amazon EC2 인스턴스를 생성하는 경우입니다. 후속 요청의 경우 AWS는 임시 자격 증명을 사용합니다.

임시 자격 증명의 사용을 지원하는 서비스에 대해 알아보려면 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md) 섹션을 참조하세요.

`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`](reference_policies_elements_condition_operators.md#Conditions_IfExists) 연산자를 사용하여, 요청이 MFA를 사용하여 인증되는지 여부를 확인하는 것이 좋습니다.

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

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

**대체 조합**  
또한 [`BoolIfExists`](reference_policies_elements_condition_operators.md#Conditions_IfExists) 연산자를 사용하여 MFA로 인증된 요청 및 장기 자격 증명을 사용하는 AWS CLI 또는 AWS API 요청을 허용할 수 있습니다.

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

이 조건은 키가 존재하든 존재하지 않든 **마찬가지로** 일치합니다. `Allow`, `BoolIfExists` 및 `true`를 조합할 경우, 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`, `Bool` 및 `true`를 조합할 경우, MFA를 사용해 인증된 요청만을 허용합니다. 이러한 조합은 MFA의 사용을 지원하는 임시 자격 증명에만 지원됩니다. 이 문은 장기 액세스 키를 사용하는 요청 또는 MFA 없이 임시 자격 증명을 사용하는 요청에 대한 액세스를 허용하지 않습니다.

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

```
#####   WARNING: USE WITH CAUTION   #####

"Effect" : "Allow",
"Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : "false" } }
```

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

### aws:ChatbotSourceArn
<a name="condition-keys-chatbotsourcearn"></a>

이 키를 사용하여 위탁자가 설정한 소스 채팅 구성 ARN을 채널 구성과 연결된 IAM 역할의 정책에 지정한 채팅 구성 ARN을 비교합니다. 채팅 애플리케이션의 Amazon Q Developer에서 시작한 역할 수임 세션을 기반으로 요청을 승인할 수 있습니다.
+ **가용성**-이 키는 역할 세션이 수임될 때마다 채팅 애플리케이션 서비스의 Amazon Q Developer에 의해 요청 컨텍스트에 포함됩니다. 키 값은 채팅 구성 ARN입니다(예: [채팅 채널에서 AWS CLI 명령을 실행하는 경우](https://docs.aws.amazon.com/chatbot/latest/adminguide/chatbot-cli-commands.html)).
+ **데이터 유형** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** – `arn:aws::chatbot::123456789021:chat-configuration/slack-channel/private_channel`

다음 정책은 Slack 채널에서 시작하는 모든 요청에 대해 지정된 버킷에 대한 Amazon S3 풋 요청을 거부합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ExampleS3Deny",
            "Effect": "Deny",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "ArnLike": {
                      "aws:ChatbotSourceArn": "arn:aws:chatbot::*:chat-configuration/slack-channel/*"
                }
            }
        }
    ]
}
```

------

### aws:Ec2InstanceSourceVpc
<a name="condition-keys-ec2instancesourcevpc"></a>

이 키는 Amazon EC2 IAM 역할 보안 인증 정보가 전송된 VPC를 식별합니다. 정책에서 이 키를 [`aws:SourceVPC`](#condition-keys-sourcevpc) 글로벌 키와 함께 사용하여 보안 인증 정보가 전송된 VPC(`aws:Ec2InstanceSourceVpc`)와 일치하는 VPC(`aws:SourceVPC`)에서 호출이 이루어졌는지 확인할 수 있습니다.
+ **가용성** - 이 키는 요청자가 Amazon EC2 역할 보안 인증 정보를 사용하여 요청에 서명할 때마다 요청 컨텍스트에 포함됩니다. IAM 정책, 서비스 제어 정책, VPC 엔드포인트 정책 및 리소스 정책에 이 키를 사용할 수 있습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

이 키는 VPC 식별자 값과 함께 사용할 수 있지만 `aws:SourceVpc` 컨텍스트 키와 함께 변수로 사용할 때 가장 유용합니다. `aws:SourceVpc` 컨텍스트 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다. `aws:Ec2InstanceSourceVpc`를 `aws:SourceVpc`와 함께 사용하면, 일반적으로 함께 변경되는 값을 비교하는 `aws:Ec2InstanceSourceVpc`를 더 광범위하게 사용할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RequireSameVPC",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
            "aws:SourceVpc": "${aws:Ec2InstanceSourceVpc}"
        },
        "Null": {
          "ec2:SourceInstanceARN": "false"
        },
        "BoolIfExists": {
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}
```

------

위의 예에서 `aws:SourceVpc` 값이 `aws:Ec2InstanceSourceVpc` 값과 일치하지 않으면 액세스가 거부됩니다. 정책 문은 `ec2:SourceInstanceARN` 조건 키의 존재 여부를 테스트하는 방식으로, Amazon EC2 인스턴스 역할로 사용되는 역할로만 제한됩니다.

이 정책은 사용자의 Amazon EC2 인스턴스 역할을 대신하여 요청을 할 때 `aws:ViaAWSService`를 사용하여 AWS가 요청을 승인할 수 있도록 합니다. 예를 들어 Amazon EC2 인스턴스에서 암호화된 Amazon S3 버킷에 대한 요청을 하면 Amazon S3가 사용자를 대신하여 AWS KMS를 호출합니다. AWS KMS에 요청할 때 일부 키가 표시되지 않습니다.

### aws:Ec2InstanceSourcePrivateIPv4
<a name="condition-keys-ec2instancesourceprivateip4"></a>

이 키는 Amazon EC2 IAM 역할 보안 인증 정보가 전송된 기본 탄력적 네트워크 인터페이스 프라이빗 IPv4 주소를 식별합니다. 이 조건 키를 해당 컴패니언 키 `aws:Ec2InstanceSourceVpc`와 함께 사용하여 전역적으로 고유한 VPC ID와 소스 프라이빗 IP의 조합이 만들어지도록 해야 합니다. 이 키를 `aws:Ec2InstanceSourceVpc`와 함께 사용하면 보안 인증 정보가 전송된 것과 동일한 프라이빗 IP 주소에서 요청이 이루어졌는지 확인할 수 있습니다.
+ **가용성** - 이 키는 요청자가 Amazon EC2 역할 보안 인증 정보를 사용하여 요청에 서명할 때마다 요청 컨텍스트에 포함됩니다. IAM 정책, 서비스 제어 정책, VPC 엔드포인트 정책 및 리소스 정책에 이 키를 사용할 수 있습니다.
+ **데이터 유형** - [IP 주소](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **값 유형**-단일 값

**중요**  
`Allow` 문에 이 키를 단독으로 사용해서는 안 됩니다. 프라이빗 IP 주소는 정의상 전역적으로 고유하지 않습니다. `aws:Ec2InstanceSourcePrivateIPv4` 키를 사용할 때마다 `aws:Ec2InstanceSourceVpc` 키를 사용하여 사용 가능한 Amazon EC2 인스턴스 보안 인증 정보가 있는 VPC를 지정해야 합니다.

다음 예제는 요청이 역할 자격 증명과 동일한 VPC의 VPC 엔드포인트를 통해 도착하는 경우를 제외하고 모든 리소스에 대한 액세스를 거부하는 서비스 제어 정책(SCP)입니다. 이 예제에서 `aws:Ec2InstanceSourcePrivateIPv4`는 소스 IP를 기반으로 자격 증명 소스를 특정 인스턴스로 제한합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":  "*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:Ec2InstanceSourceVpc": "${aws:SourceVpc}"
                },                
                "Null": {
                    "ec2:SourceInstanceARN": "false"
                },
                "BoolIfExists": {
                    "aws:ViaAWSService": "false"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action":  "*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "aws:Ec2InstanceSourcePrivateIPv4": "${aws:VpcSourceIp}"
                },                               
                "Null": {
                    "ec2:SourceInstanceARN": "false"
                },
                "BoolIfExists": {
                    "aws:ViaAWSService": "false"
                }
            }
        }
    ]
}
```

------

### aws:SourceIdentity
<a name="condition-keys-sourceidentity"></a>

이 키를 사용하여 보안 주체가 설정한 소스 자격 증명과 정책에 지정한 소스 자격 증명을 비교합니다.
+ **가용성** - 이 키는 AWS STS assume-role CLI 명령 또는 AWS STS `AssumeRole` API 작업을 사용해 역할이 수임된 경우 소스 자격 증명이 설정된 후에 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

[`sts:RoleSessionName`](reference_policies_iam-condition-keys.md#ck_rolesessionname)과 달리 소스 자격 증명을 설정한 후에는 값을 변경할 수 없습니다. 이것은 역할에서 수행되는 모든 작업의 요청 컨텍스트에 있습니다. 세션 자격 증명을 사용하여 다른 역할을 수임하는 경우 값이 후속 역할 세션에 유지됩니다. 한 역할에서 다른 역할을 맡는 것을 [역할 체인](id_roles.md#iam-term-role-chaining)이라고 합니다.

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

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

------
#### [ JSON ]

****  

```
{
    "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"]
                }
            }
        }
    ]
}
```

------

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

### ec2:RoleDelivery
<a name="condition-keys-ec2-role-delivery"></a>

이 키를 사용하여 서명된 요청의 인스턴스 메타데이터 서비스 버전을 Amazon EC2에 대한 IAM 역할 자격 증명 정보와 비교합니다. 인스턴스 메타데이터 서비스는 특정 요청에 대해 IMDSv2에 고유한 `PUT` 또는 `GET` 헤더가 해당 요청에 있는지 여부에 따라 IMDSv1 및 IMDSv2 요청 간을 구별합니다.
+ **가용성** - 이 키는 Amazon EC2 인스턴스에서 역할 세션이 생성될 때마다 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** – [숫자](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **값 유형**-단일 값
+ **예제 값** – 1.0, 2.0

로컬 코드 또는 사용자가 IMDSv2를 사용해야 하도록 각 인스턴스에서 인스턴스 메타데이터 서비스(IMDS)를 구성할 수 있습니다. IMDSv2를 사용해야 하도록 지정하면 IMDSv1는 더 이상 작동하지 않습니다.
+ 인스턴스 메타데이터 서비스 버전 1(IMDSv1) – 요청/응답 방법 
+ 인스턴스 메타데이터 서비스 버전 2(IMDSv2) – 세션 지향 방법

인스턴스에서 IMDSv2를 사용하도록 구성하는 방법에 대한 자세한 내용은 [인스턴스 메타데이터 옵션 구성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)을 참조하세요.

다음 예에서는 요청 컨텍스트의 EC2:RoleDelivery 값이 1.0(IMDSv1)인 경우 액세스가 거부됩니다. 이 정책 문은 일반적으로 적용됩니다. Amazon EC2 역할 자격 증명으로 요청에 서명하지 않으면 요청은 아무 효과가 없습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Sid": "RequireAllEc2RolesToUseV2",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "NumericLessThan": {
                    "ec2:RoleDelivery": "2.0"
                }
            }
        }
    ]
}
```

------

자세한 내용은 [인스턴스 메타데이터 작업을 위한 정책 예제](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-instance-metadata)를 참조하세요.

### ec2:SourceInstanceArn
<a name="condition-keys-ec2-source-instance-arn"></a>

이 키를 사용하여 해당 역할의 세션이 생성된 인스턴스의 ARN을 비교합니다.
+ **가용성** - 이 키는 Amazon EC2 인스턴스에서 역할 세션이 생성될 때마다 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

정책 예제는 [특정 인스턴스에서 다른 AWS 서비스의 리소스를 보는 것을 허용](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-example-source-instance)을 참조하세요.

### glue:RoleAssumedBy
<a name="condition-keys-glue-role-assumed-by"></a>

AWS Glue 서비스는 AWS Glue가 고객 대신(작업이나 개발자 엔드포인트가 아니라 AWS Glue 서비스를 통해 직접) 서비스 역할을 사용하여 요청을 하는 각 AWS API 요청에 대해 이 조건 키를 설정합니다. 이 키를 사용하여 AWS 리소스에 대한 호출이 AWS Glue 서비스로부터 왔는지 확인합니다.
+ **가용성** - 이 키는 AWS Glue가 고객 대신 서비스 역할을 사용하여 요청을 할 때 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값
+ **예제 값** – 이 키는 항상 `glue.amazonaws.com`으로 설정됩니다.

다음 예제에서는 AWS Glue 서비스가 Amazon S3 버킷에서 객체를 가져오도록 허용하는 조건을 추가합니다.

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:RoleAssumedBy": "glue.amazonaws.com"
        }
    }
}
```

### glue:CredentialIssuingService
<a name="condition-keys-glue-credential-issuing"></a>

AWS Glue 서비스는 작업 또는 개발자 엔드포인트로부터 오는 서비스 역할을 사용하여 각 AWS API 요청에 대해 이 키를 설정합니다. 이 키를 사용하여 AWS 리소스에 대한 호출이 AWS Glue 작업 또는 개발자 엔드포인트로부터 왔는지 확인합니다.
+ **가용성** - 이 키는 AWS Glue가 작업 또는 개발자 엔드포인트로부터 오는 요청을 할 때 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값
+ **예제 값** – 이 키는 항상 `glue.amazonaws.com`으로 설정됩니다.

다음 예제에서는 AWS Glue 작업에서 사용하는 IAM 역할에 연결된 조건을 추가합니다. 이렇게 하면 역할 세션이 AWS Glue 작업 런타임 환경에 사용되는지 여부에 따라 특정 작업이 허용/거부됩니다.

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "StringEquals": {
            "glue:CredentialIssuingService": "glue.amazonaws.com"
        }
    }
}
```

### codebuild:BuildArn
<a name="condition-keys-codebuild-build-arn"></a>

이 키는 IAM 역할 자격 증명이 전달된 CodeBuild 빌드 ARN을 식별합니다. 이 키를 사용하여 AWS 리소스에 대한 직접 호출이 특정 CodeBuild 빌드로부터 왔는지 확인합니다.

**참고**  
`codebuild:BuildArn`의 전체 값은 미리 알 수 없습니다. 동적으로 생성된 빌드 ID를 포함하기 때문입니다.
+ **가용성** -CodeBuild가 수임한 역할이 요청할 때마다 이 키가 요청 컨텍스트에 포함됩니다.
+ **데이터 유형** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** - arn:aws:codebuild:us-east-1:123456789012:build/MyBuildProject:12345678-1234-1234-1234-123456789012

다음 예제에서는 특정 CodeBuild 빌드가 지정된 버킷에 대해 `s3:GetObject` 액세스 권한을 가질 수 있도록 합니다.

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "ArnLike": {
            "codebuild:BuildArn": "arn:aws:codebuild:us-east-1:123456789012:build/MyBuildProject:*"
        }
    }
}
```

### codebuild:ProjectArn
<a name="condition-keys-codebuild-project-arn"></a>

이 키는 IAM 역할 자격 증명이 CodeBuild 빌드에 전달된 CodeBuild 프로젝트 ARN을 식별합니다. 이 키를 사용하여 AWS 리소스에 대한 직접 호출이 특정 CodeBuild 빌드 프로젝트로부터 왔는지 확인합니다.
+ **가용성** -CodeBuild가 수임한 역할이 요청할 때마다 이 키가 요청 컨텍스트에 포함됩니다.
+ **데이터 유형** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** – arn:aws:codebuild:us-east-1:123456789012:project/MyBuildProject

다음 예제에서는 특정 CodeBuild 프로젝트의 모든 빌드가 지정된 버킷에 대해 `s3:GetObject` 액세스 권한을 가질 수 있도록 합니다.

```
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
        "ArnEquals": {
            "codebuild:ProjectArn": "arn:aws:codebuild:us-east-1:123456789012:project/MyBuildProject"
        }
    }
}
```

### lambda:SourceFunctionArn
<a name="condition-keys-lambda-source-function-arn"></a>

이 키를 사용하여 IAM 역할 보안 인증 정보가 전송된 Lambda 함수 ARN을 식별합니다. Lambda 서비스는 함수의 실행 환경으로부터 오는 각 AWS API 요청에 대해 이 키를 설정합니다. 이 키를 사용하여 AWS 리소스에 대한 호출이 특정 Lambda 함수의 코드로부터 왔는지 확인합니다. 또한 Lambda는 CloudWatch에 로그를 작성하고 X-Ray에 추적을 전송하는 등 실행 환경 외부로부터 온 일부 요청에 대해 이 키를 설정합니다.
+ **가용성** - 이 키는 Lambda 함수 코드가 호출될 때마다 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** – arn:aws:lambda:us-east-1:123456789012:function:TestFunction

다음 예제에서는 하나의 특정 Lambda 함수에서 `s3:PutObject`가 지정된 버킷에 액세스할 수 있도록 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ExampleSourceFunctionArn",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Condition": {
                "ArnEquals": {
                    "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda"
                }
            }
        }
    ]
}
```

------

자세한 내용은 *AWS Lambda 개발자 안내서*의 [Working with Lambda execution environment credentials](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-source-function-arn)를 참조하세요.

### ssm:SourceInstanceArn
<a name="condition-keys-ssm-source-instance-arn"></a>

이 키를 사용하여 IAM 역할 보안 인증 정보가 전송된 AWS Systems Manager 관리형 인스턴스 ARN을 식별합니다. 요청이 Amazon EC2 인스턴스 프로파일과 연결된 IAM 역할이 있는 관리형 인스턴스로부터 오는 경우에는 이 조건 키가 존재하지 않습니다.
+ **가용성** - 이 키는 역할 보안 인증 정보가 AWS Systems Manager 관리형 인스턴스에 전송될 때마다 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)
+ **값 유형**-단일 값
+ **예제 값** – arn:aws::ec2:us-west-2:111111111111:instance/instance-id

### identitystore:UserId
<a name="condition-keys-identity-store-user-id"></a>

이 키를 사용하여 서명된 요청에 있는 IAM Identity Center 인력 ID를 정책에 지정된 ID와 비교합니다.
+ **가용성** - 이 키는 요청의 호출자가 IAM Identity Center의 사용자인 경우 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값
+ **예제 값** – 94482488-3041-7026-18f3-be45837cd0e4

AWS CLI, AWS API 또는 AWS SDK로 [GetUserId](https://docs.aws.amazon.com//singlesignon/latest/IdentityStoreAPIReference/API_GetUserId.html)에 요청하여 IAM Identity Center에서 사용자의 UserId를 찾을 수 있습니다.

## 네트워크의 속성
<a name="condition-keys-network-properties"></a>

다음 조건 키를 사용하여 요청이 시작되었거나 통과한 네트워크에 대한 세부 정보를 정책에 지정한 네트워크 속성과 비교합니다.

### aws:SourceIp
<a name="condition-keys-sourceip"></a>

이 키를 사용하여 요청자의 IP 주소를 정책에서 지정한 IP 주소와 비교합니다. `aws:SourceIp` 조건 키는 퍼블릭 IP 주소 범위에만 사용할 수 있습니다.
+ **가용성** - 이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우를 제외하고 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [IP 주소](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **값 유형**-단일 값

정책 내에서 `aws:SourceIp` 조건 키를 사용하여 보안 주체가 지정된 IP 범위 내에서만 요청하도록 할 수 있습니다.

**참고**  
`aws:SourceIp`는 IPv4 및 IPv6 주소 또는 IP 주소 범위를 모두 지원합니다. IPv6를 지원하는 AWS 서비스 목록의 경우 **Amazon VPC 사용 설명서의 [IPv6를 지원하는 AWS 서비스](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)를 참조하세요.

예를 들어 다음 자격 증명 기반 정책을 IAM 역할에 연결할 수 있습니다. 이 정책은 사용자가 지정된 IPv4 주소 범위에서 호출을 수행하는 경우 객체를 `amzn-s3-demo-bucket3` Amazon S3 버킷에 넣을 수 있도록 허용합니다. 또한 이 정책은 AWS 서비스가 사용자를 대신하여 이 작업을 수행하기 위해 [전달 액세스 세션](access_forward_access_sessions.md)을 사용하도록 허용합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalPutObjectIfIpAddress",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "203.0.113.0/24"
                }
            }
        }
    ]
}
```

------

IPv4 및 IPv6 주소 지정을 모두 지원하는 네트워크에서의 액세스를 제한해야 하는 경우 IAM 정책 조건에 IPv4 및 IPv6 주소 또는 IP 주소 범위를 포함시킬 수 있습니다. 다음 자격 증명 기반 정책은 사용자가 지정된 IPv4 또는 IPv6 주소 범위에서 호출을 수행하는 경우 객체를 `amzn-s3-demo-bucket3` Amazon S3 버킷에 넣을 수 있도록 허용합니다. IAM 정책에 IPv6 주소 범위를 포함하기 전에 사용 중인 AWS 서비스가 IPv6를 지원하는지 확인합니다. IPv6를 지원하는 AWS 서비스 목록의 경우 *Amazon VPC 사용 설명서*의 [IPv6를 지원하는 AWS 서비스](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)를 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalPutObjectIfIpAddress",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "203.0.113.0/24",
                        "2001:DB8:1234:5678::/64"
                    ]
                }
            }
        }
    ]
}
```

------

요청이 Amazon VPC 엔드포인트를 사용하는 호스트로부터 오는 경우, `aws:SourceIp` 키를 사용할 수 없습니다. 대신에 [aws:VpcSourceIp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip)와 같은 VPC 전용 키를 사용해야 합니다. VPC 엔드포인트 사용에 대한 자세한 내용을 알아보려면 *AWS PrivateLink 가이드*의 [VPC 엔드포인트 및 VPC 엔드포인트 서비스에 대한 ID 및 액세스 관리](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-iam.html)를 참조하세요.

**참고**  
AWS 서비스가 사용자를 대신하여 다른 AWS 서비스를 호출하면(서비스 간 호출) 특정 네트워크별 권한 부여 컨텍스트가 삭제됩니다. 정책에서 `Deny` 문과 함께 이 조건 키를 사용하는 경우 AWS 서비스 보안 주체가 의도치 않게 차단될 수 있습니다. 보안 요구 사항을 유지하면서 AWS 서비스가 제대로 작동하도록 하려면 값이 `false`인 `aws:PrincipalIsAWSService` 조건 키를 추가하여 `Deny` 문에서 서비스 보안 주체를 제외합니다.

### aws:SourceVpc
<a name="condition-keys-sourcevpc"></a>

이 키를 사용하여 요청이 VPC 엔드포인트가 연결된 VPC를 통해 이동하는지 확인합니다. 정책에서 이 키를 사용하여 특정 VPC에 대한 액세스만 허용할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [특정 VPC에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-access-vpc)을 참조하세요.
+ **가용성**-이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

정책에서 해당 키를 사용하여 특정 VPC에 대한 액세스를 허용하거나 제한할 수 있습니다.

예를 들어 다음 ID 기반 정책을 IAM 역할에 연결하면 지정된 VPC ID에서 요청하거나 [FAS(전달 액세스 세션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)를 사용하여 역할을 대신하여 요청하는 AWS 서비스에서 요청하지 않는 한 `amzn-s3-demo-bucket3` Amazon S3 버킷에 대한 `PutObject`의 액세스를 거부할 수 있습니다. [aws:SourceIp](#condition-keys-sourceip)와 달리 초기 요청의 소스 VPC가 보존되지 않으므로 FAS 요청을 허용하려면 [aws:ViaAWSService](#condition-keys-viaawsservice) 또는 [aws:CalledVia](#condition-keys-calledvia)를 사용해야 합니다.

**참고**  
이 정책은 어떤 작업도 허용하지 않습니다. 이 정책을 특정 작업을 허용하는 다른 정책과 함께 사용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "PutObjectIfNotVPCID",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket3/*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceVpc": "vpc-1234567890abcdef0"
        },
        "Bool": {
          "aws:ViaAWSService": "false"
        }
      }
    }
  ]
}
```

------

**참고**  
AWS는 대상 서비스에서 `aws:SourceVpcArn`를 지원하는 경우 `aws:SourceVpc` 대신 `aws:SourceVpcArn`를 사용할 것을 권장합니다. 지원되는 서비스 목록은 [aws:SourceVpcArn](#condition-keys-sourcevpcarn)을 참조하세요.

### aws:SourceVpcArn
<a name="condition-keys-sourcevpcarn"></a>

이 키를 사용하여 VPC 엔드포인트를 통해 요청이 이루어진 VPC의 ARN을 확인합니다. 이 키는 VPC 엔드포인트가 연결된 VPC의 ARN을 반환합니다.
+ **가용성** - 이 키는 요청이 VPC 엔드포인트를 통해 이루어진 경우에만 지원되는 서비스의 요청 컨텍스트에 포함됩니다. 퍼블릭 서비스 엔드포인트를 통해 이루어진 요청에는 키가 포함되지 않습니다. 아래의 서비스는 이 키를 지원합니다.
  + AWS App Runner(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html))
  + AWS Application Discovery Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html))
  + Amazon Athena(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html))
  + AWS Cloud Map(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html))
  + Amazon CloudWatch Application Insights(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html))
  + AWS CloudFormation(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html))
  + Amazon Comprehend Medical(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html))
  + AWS Compute Optimizer(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html))
  + Amazon Elastic Container Registry(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html))
  + Amazon Elastic Container Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html))
  + Amazon Kinesis Analytics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html))
  + Amazon Route 53(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html))
  + AWS DataSync(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html))
  + Amazon Elastic Block Store(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html))
  + Amazon EventBridge Scheduler(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html))
  + Amazon Data Firehose(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html))
  + AWS HealthImaging(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html))
  + AWS HealthLake(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html))
  + AWS HealthOmics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html))
  + AWS Identity and Access Management(`iam:PassRole` 작업에는 제외)(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html))
  + AWS IoT FleetWise(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html))
  + AWS IoT 무선(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html))
  + AWS Key Management Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html))
  + AWS Lambda(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html))
  + AWS Payment Cryptography(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html))
  + Amazon Polly(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html))
  + AWS Private Certificate Authority(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html))
  + AWS 휴지통(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html))
  + Amazon Rekognition(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html))
  + Service Quotas(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html))
  + Amazon Simple Storage Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html))
  + AWS Storage Gateway(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html))
  + AWS Systems Manager Incident Manager Contacts(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html))
  + Amazon Textract(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html))
  + Amazon Transcribe(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html))
  + AWS Transfer Family(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html))
+ **데이터 유형** – ARN

  AWS는 ARN을 비교할 때 [문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String) 대신 [ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용하는 것이 좋습니다.
+ **값 유형**-단일 값
+ **예제 값** – `arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE`

다음은 VPC `amzn-s3-demo-bucket` 외부 위치에서 `vpc-1a2b3c4d` 및 그 객체에 액세스할 수 없도록 거부하는 버킷 정책의 예시입니다.

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
     {
       "Sid": "Access-to-specific-VPC-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "ArnNotEquals": {
           "aws:SourceVpcArn": "arn:aws:ec2:us-east-1:*:vpc/vpc-1a2b3c4d"
         }
       }
     }
   ]
}
```

### aws:SourceVpce
<a name="condition-keys-sourcevpce"></a>

이 키를 사용하여 요청의 VPC 엔드포인트 식별자를 정책에서 지정한 엔드포인트 ID와 비교합니다.
+ **가용성**-이 키는 요청자가 VPC 엔드포인트를 사용하여 요청한 경우에만 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

정책에서 이 키를 사용하여 특정 VPC에 대한 액세스를 제한할 수 있습니다. 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [특정 VPC에 대한 액세스 제한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-access-vpc)을 참조하세요. [aws:SourceVpc](#condition-keys-sourcevpc)를 사용할 때와 마찬가지로 [aws:ViaAWSService](#condition-keys-viaawsservice) 또는 [aws:CalledVia](#condition-keys-calledvia)를 사용하여 AWS 서비스의 요청을 허용하려면 [FAS(전달 액세스 세션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)를 사용해야 합니다. 이는 초기 요청의 소스 VPC 엔드포인트가 보존되지 않기 때문입니다.

### aws:VpceAccount
<a name="condition-keys-vpceaccount"></a>

이 키를 사용하면 요청이 이루어진 VPC 엔드포인트를 소유한 AWS 계정 ID를 정책에 지정된 계정 ID와 비교할 수 있습니다. 이 조건 키는 특정 계정이 소유한 VPC 엔드포인트를 통해 요청이 이루어지도록 하여 네트워크 경계 제어를 설정하도록 지원합니다.
+ **가용성** - 이 키는 요청이 VPC 엔드포인트를 통해 이루어진 경우에만 요청 컨텍스트에 포함됩니다. 퍼블릭 서비스 엔드포인트를 통해 이루어진 요청에는 키가 포함되지 않습니다.

  아래의 서비스는 이 키를 지원합니다.
  + AWS App Runner(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html))
  + AWS Application Discovery Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html))
  + Amazon Athena(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html))
  + AWS Cloud Map(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html))
  + Amazon CloudWatch Application Insights(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html))
  + AWS CloudFormation(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html))
  + Amazon Comprehend Medical(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html))
  + AWS Compute Optimizer(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html))
  + Amazon Elastic Container Registry(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html))
  + Amazon Elastic Container Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html))
  + Amazon Kinesis Analytics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html))
  + Amazon Route 53(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html))
  + AWS DataSync(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html))
  + Amazon Elastic Block Store(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html))
  + Amazon EventBridge Scheduler(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html))
  + Amazon Data Firehose(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html))
  + AWS HealthImaging(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html))
  + AWS HealthLake(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html))
  + AWS HealthOmics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html))
  + AWS Identity and Access Management(`iam:PassRole` 작업에는 제외)(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html))
  + AWS IoT FleetWise(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html))
  + AWS IoT 무선(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html))
  + AWS Key Management Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html))
  + AWS Lambda(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html))
  + AWS Payment Cryptography(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html))
  + Amazon Polly(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html))
  + AWS Private Certificate Authority(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html))
  + AWS 휴지통(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html))
  + Amazon Rekognition(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html))
  + Service Quotas(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html))
  + Amazon Simple Storage Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html))
  + AWS Storage Gateway(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html))
  + AWS Systems Manager Incident Manager Contacts(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html))
  + Amazon Textract(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html))
  + Amazon Transcribe(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html))
  + AWS Transfer Family(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html))
+ **데이터 유형** – [문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값
+ **예제 값** – `123456789012`

이 조건 키를 사용하면 리소스에 대한 액세스를 제한할 수 있으므로 계정이 소유한 VPC 엔드포인트를 통해 요청이 이루어져야 합니다. 다음 Amazon S3 버킷 정책 예제에서는 지정된 계정이 소유한 VPC 엔드포인트를 통해 요청이 이루어지는 경우 액세스를 허용합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessToSpecificVpceAccountOnly",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/RoleName"
            },
            "Action": "s3:GetObject",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
            "Condition": {
                "StringEquals": {
                    "aws:VpceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

**참고**  
이 조건 키는 현재 일부 AWS 서비스 세트에 대해 지원됩니다. 지원되지 않는 서비스와 함께 이 키를 사용하면 의도하지 않은 권한 부여 결과가 발생할 수 있습니다. 항상 조건 키의 범위는 정책에서 지원되는 서비스까지 지정해야 합니다.

일부 AWS 서비스는 사용자를 대신하여 작업을 수행할 때 네트워크에서 리소스에 액세스합니다. 이러한 서비스를 사용할 경우, 서비스가 네트워크 외부에서 리소스에 AWS 액세스할 수 있도록 위의 정책 예제를 편집해야 합니다. 요청 오리진을 기준으로 액세스 제어를 적용할 때 고려해야 할 액세스 패턴에 대한 자세한 내용은 [데이터 경계를 사용하여 권한 가드레일 설정](access_policies_data-perimeters.md) 단원을 참조하세요.

### aws:VpceOrgID
<a name="condition-keys-vpceorgid"></a>

이 키를 사용하면 요청이 이루어진 VPC 엔드포인트를 소유한 조직의 식별자를 AWS Organizations의 정책에 지정된 식별자와 비교할 수 있습니다. 이 조건 키는 네트워크 경계 제어에 대한 가장 확장 가능한 접근 방식을 제공하며, 조직 내 계정이 소유한 모든 VPC 엔드포인트를 자동으로 포함합니다.
+ **가용성** - 이 키는 VPC 엔드포인트를 통해 요청이 이루어지고, VPC 엔드포인트 소유자 계정이 AWS 조직의 멤버인 경우 요청 컨텍스트에 포함됩니다. 다른 네트워크 경로를 통해 요청이 이루어진 경우 또는 VPC 엔드포인트 소유자 계정이 조직의 일부가 아닌 경우에는 키가 포함되지 않습니다.

  아래의 서비스는 이 키를 지원합니다.
  + AWS App Runner(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html))
  + AWS Application Discovery Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html))
  + Amazon Athena(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html))
  + AWS B2B Data Interchange(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsb2bdatainterchange.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsb2bdatainterchange.html))
  + AWS Cloud Map(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html))
  + Amazon CloudWatch Application Insights(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html))
  + AWS CloudFormation(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html))
  + Amazon Cognito(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitoidentity.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitoidentity.html))
  + Amazon Comprehend Medical(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html))
  + AWS Compute Optimizer(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html))
  + AWS Database Migration Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatabasemigrationservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatabasemigrationservice.html))
  + AWS 디렉터리 서비스 데이터(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdirectoryservicedata.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdirectoryservicedata.html))
  + Amazon Elastic Container Registry(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html))
  + Amazon Elastic Container Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html))
  + Amazon Kinesis Analytics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html))
  + Amazon Route 53(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html))
  + AWS DataSync(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html))
  + Amazon Elastic Block Store(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html))
  + Amazon EventBridge Scheduler(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html))
  + Amazon Data Firehose(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html))
  + AWS HealthImaging(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html))
  + AWS HealthLake(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html))
  + AWS HealthOmics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html))
  + AWS Identity and Access Management(`iam:PassRole` 작업에는 제외)(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html))
  + AWS 아이덴티티 스토어(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitystore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentitystore.html))
  + AWS IoT FleetWise(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html))
  + AWS IoT TwinMaker(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiottwinmaker.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiottwinmaker.html))
  + AWS IoT 무선(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html))
  + Amazon Keyspaces(Apache Cassandra용)(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkeyspacesforapachecassandra.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkeyspacesforapachecassandra.html))
  + AWS Key Management Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html))
  + AWS Lambda(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html))
  + AWS Network Firewall(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsnetworkfirewall.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsnetworkfirewall.html))
  + AWS Payment Cryptography(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html))
  + Amazon Pinpoint SMS 및 음성 서비스(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpinpointsmsandvoiceservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpinpointsmsandvoiceservice.html))
  + Amazon Polly(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html))
  + AWS 가격표(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspricelist.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspricelist.html))
  + AWS Private Certificate Authority(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html))
  + AWS 휴지통(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html))
  + Amazon Rekognition(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html))
  + Service Quotas(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html))
  + Amazon Simple Email Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonses.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonses.html))
  + Amazon Simple Storage Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html))
  + Amazon Simple Queue Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsqs.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonsqs.html))
  + AWS Storage Gateway(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html))
  + AWS Systems Manager Incident Manager Contacts(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html))
  + Amazon Textract(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html))
  + Amazon Transcribe(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html))
  + AWS Transfer Family(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html))
  + Amazon WorkMail(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonworkmail.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonworkmail.html))
+ **데이터 유형** – [문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값
+ **예제 값** – `o-a1b2c3d4e5`

아래의 리소스 제어 정책 예제에서는 지정된 조직이 소유한 VPC 엔드포인트를 통해 또는 사용자 대신 작업을 수행하는 AWS 서비스 네트워크를 통해 요청이 이루어지지 않는 한 Amazon S3 및 AWS Key Management Service 리소스에 대한 액세스를 거부합니다. 일부 조직은 조직의 요구 사항을 충족하기 위해 이 정책을 추가로 편집(예: 서드 파티 파트너 액세스 허용)해야 할 수 있습니다. 요청 오리진을 기준으로 액세스 제어를 적용할 때 고려해야 할 액세스 패턴에 대한 자세한 내용은 [데이터 경계를 사용하여 권한 가드레일 설정](access_policies_data-perimeters.md) 단원을 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceNetworkPerimeterVpceOrgID",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*",
        "kms:*"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:PrincipalIsAWSService": "false",
          "aws:ViaAWSService": "false"
        },
        "StringNotEqualsIfExists": {
            "aws:VpceOrgID": "o-abcdef0123",
            "aws:PrincipalTag/network-perimeter-exception": "true"
        }
      }
    }
  ]
}
```

------

**참고**  
이 조건 키는 현재 일부 AWS 서비스 세트에 대해 지원됩니다. 지원되지 않는 서비스와 함께 이 키를 사용하면 의도하지 않은 권한 부여 결과가 발생할 수 있습니다. 항상 조건 키의 범위는 정책에서 지원되는 서비스까지 지정해야 합니다.

### aws:VpceOrgPaths
<a name="condition-keys-vpceorgpaths"></a>

이 키를 사용하면 요청이 이루어진 AWS Organizations VPC 엔드포인트의 경로를 정책에 지정된 경로와 비교할 수 있습니다. 이 조건 키를 사용하면 조직 단위(OU) 수준에서 네트워크 경계 제어를 구현할 수 있으며, 지정된 OU 내에 새 엔드포인트를 추가할 때 VPC 엔드포인트 사용량에 따라 자동으로 규모가 조정됩니다.
+ **가용성** - 이 키는 VPC 엔드포인트를 통해 요청이 이루어지고, VPC 엔드포인트 소유자 계정이 조직의 멤버인 경우 요청 컨텍스트에 포함됩니다. 다른 네트워크 경로를 통해 요청이 이루어진 경우 또는 VPC 엔드포인트 소유자 계정이 조직의 일부가 아닌 경우에는 키가 포함되지 않습니다.

  아래의 서비스는 이 키를 지원합니다.
  + AWS App Runner(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapprunner.html))
  + AWS Application Discovery Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsapplicationdiscoveryservice.html))
  + Amazon Athena(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonathena.html))
  + AWS Cloud Map(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudmap.html))
  + Amazon CloudWatch Application Insights(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchapplicationinsights.html))
  + AWS CloudFormation(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html))
  + Amazon Comprehend Medical(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncomprehendmedical.html))
  + AWS Compute Optimizer(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscomputeoptimizer.html))
  + Amazon Elastic Container Registry(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerregistry.html))
  + Amazon Elastic Container Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerservice.html))
  + Amazon Kinesis Analytics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisanalytics.html))
  + Amazon Route 53(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonroute53.html))
  + AWS DataSync(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsdatasync.html))
  + Amazon Elastic Block Store(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticblockstore.html))
  + Amazon EventBridge Scheduler(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoneventbridgescheduler.html))
  + Amazon Data Firehose(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonkinesisfirehose.html))
  + AWS HealthImaging(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthimaging.html))
  + AWS HealthLake(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthlake.html))
  + AWS HealthOmics(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awshealthomics.html))
  + AWS Identity and Access Management(`iam:PassRole` 작업에는 제외)(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsidentityandaccessmanagementiam.html))
  + AWS IoT FleetWise(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotfleetwise.html))
  + AWS IoT 무선(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotwireless.html))
  + AWS Key Management Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html))
  + AWS Lambda(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html))
  + AWS Payment Cryptography(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awspaymentcryptography.html))
  + Amazon Polly(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonpolly.html))
  + AWS Private Certificate Authority(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsprivatecertificateauthority.html))
  + AWS 휴지통(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsrecyclebin.html))
  + Amazon Rekognition(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrekognition.html))
  + Service Quotas(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_servicequotas.html))
  + Amazon Simple Storage Service(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html))
  + AWS Storage Gateway(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsstoragegateway.html))
  + AWS Systems Manager Incident Manager Contacts(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssystemsmanagerincidentmanagercontacts.html))
  + Amazon Textract(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontextract.html))
  + Amazon Transcribe(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazontranscribe.html))
  + AWS Transfer Family(접두사: [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awstransferfamily.html))
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값
+ **예제 값** – `o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/`

`aws:VpceOrgPaths`는 다중 값 조건 키이므로, 이 키에 대한 [문자열 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_String)와 함께 `ForAnyValue` 또는 `ForAllValues` 세트 연산자를 사용해야 합니다. 다음 Amazon S3 버킷 정책 예제에서는 특정 조직 단위의 계정이 소유한 VPC 엔드포인트를 요청이 이루어지는 경우에만 액세스를 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessFromSpecificOrgPaths",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/RoleName"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
      "Condition": {
        "ForAnyValue:StringLike": {
          "aws:VpceOrgPaths": [
            "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/*",
            "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-33333333/*"
          ]
        }
      }
    }
  ]
}
```

------

**참고**  
이 조건 키는 현재 일부 AWS 서비스 세트에 대해 지원됩니다. 지원되지 않는 서비스와 함께 이 키를 사용하면 의도하지 않은 권한 부여 결과가 발생할 수 있습니다. 항상 조건 키의 범위는 정책에서 지원되는 서비스까지 지정해야 합니다.

일부 AWS 서비스는 사용자를 대신하여 작업을 수행할 때 네트워크에서 리소스에 액세스합니다. 이러한 서비스를 사용할 경우, 서비스가 네트워크 외부에서 리소스에 AWS 액세스할 수 있도록 위의 정책 예제를 편집해야 합니다. 요청 오리진을 기준으로 액세스 제어를 적용할 때 고려해야 할 액세스 패턴에 대한 자세한 내용은 [데이터 경계를 사용하여 권한 가드레일 설정](access_policies_data-perimeters.md) 단원을 참조하세요.

### aws:VpcSourceIp
<a name="condition-keys-vpcsourceip"></a>

이 키를 사용하여 요청한 IP 주소를 정책에서 지정한 IP 주소와 비교합니다. 정책에서 이 키는 요청이 지정된 IP 주소에서 시작되고 VPC 엔드포인트를 통과하는 경우에만 일치합니다.
+ **가용성** - 이 키는 요청이 VPC 엔드포인트를 사용하여 이루어진 경우에만 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [IP 주소](reference_policies_elements_condition_operators.md#Conditions_IPAddress)
+ **값 유형**-단일 값

자세한 내용은 **Amazon VPC 사용 설명서의 [엔드포인트 정책을 사용하여 VPC 엔드포인트에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)를 참조하세요. [aws:SourceVpc](#condition-keys-sourcevpc)를 사용할 때와 마찬가지로 [aws:ViaAWSService](#condition-keys-viaawsservice) 또는 [aws:CalledVia](#condition-keys-calledvia)를 사용하여 AWS 서비스의 요청을 허용하려면 [FAS(전달 액세스 세션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)를 사용해야 합니다. 이는 VPC 엔드포인트를 사용한 초기 요청의 소스 IP가 FAS 요청에 보존되지 않기 때문입니다.

**참고**  
`aws:VpcSourceIp`는 IPv4 및 IPv6 주소 또는 IP 주소 범위를 모두 지원합니다. IPv6를 지원하는 AWS 서비스 목록의 경우 *Amazon VPC 사용 설명서*의 [IPv6를 지원하는 AWS 서비스](https://docs.aws.amazon.com/vpc/latest/userguide/aws-ipv6-support.html)를 참조하세요.  
`aws:VpcSourceIp` 조건 키는 항상 `aws:SourceVpc` 또는 `aws:SourceVpce` 조건 키와 함께 사용해야 합니다. 그렇지 않으면 동일하거나 중복되는 IP CIDR을 사용하는 예상치 못한 VPC로부터의 API 직접 호출이 정책에 의해 허용될 수 있습니다. 이는 관련 없는 두 VPC의 IP CIDR이 동일하거나 중복되기 때문에 발생할 수 있습니다. VPC ID 또는 VPC 엔드포인트 ID는 전역 고유 식별자를 보유하면 대신 이 ID를 정책에 사용해야 합니다. 이러한 고유 식별자를 사용하면 예상치 못한 결과가 발생하지 않습니다.

**참고**  
AWS 서비스가 사용자를 대신하여 다른 AWS 서비스를 호출하면(서비스 간 호출) 특정 네트워크별 권한 부여 컨텍스트가 삭제됩니다. 정책에서 `Deny` 문과 함께 이 조건 키를 사용하는 경우 AWS 서비스 보안 주체가 의도치 않게 차단될 수 있습니다. 보안 요구 사항을 유지하면서 AWS 서비스가 제대로 작동하도록 하려면 값이 `false`인 `aws:PrincipalIsAWSService` 조건 키를 추가하여 `Deny` 문에서 서비스 보안 주체를 제외합니다.

## 리소스의 속성
<a name="condition-keys-resource-properties"></a>

다음 조건 키를 사용하여 요청 대상인 리소스에 대한 세부 정보를 정책에 지정한 리소스 속성과 비교합니다.

### aws:ResourceAccount
<a name="condition-keys-resourceaccount"></a>

이 키를 사용하여 요청된 리소스 소유자의 [AWS 계정 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html)를 정책의 리소스 계정과 비교합니다. 그런 다음 리소스를 소유한 계정을 기반으로 해당 리소스에 대한 액세스를 허용하거나 거부할 수 있습니다.
+ **가용성** - 이 키는 항상 대다수 서비스 작업의 요청 컨텍스트에 포함됩니다. 다음 작업은 이 키를 지원하지 않습니다.
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 모든 작업
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents`는 해당 이벤트 버스가 2023년 3월 2일 전에 크로스 계정 EventBridge 대상으로 구성된 경우 다른 계정의 이벤트 버스를 호출합니다. 자세한 내용은 **Amazon EventBridge 사용 설명서의 [Grant permissions to allow events from other AWS accounts](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)를 참조하세요.
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

**참고**  
위의 지원되지 않는 작업에 대한 추가 고려 사항은 [데이터 경계 정책 예제](https://github.com/aws-samples/data-perimeter-policy-examples) 리포지토리를 참조하세요.

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

계정에 있는 대부분의 리소스에 대해 [ARN](reference_policies_elements_condition_operators.md#Conditions_ARN)에는 해당 리소스의 소유자 계정 ID가 포함되어 있습니다. Amazon S3 버킷과 같은 특정 리소스의 경우 리소스 ARN에 계정 ID가 포함되지 않습니다. 다음 두 예제는 ARN에 계정 ID가 있는 리소스와 계정 ID가 없는 Amazon S3 ARN의 차이점을 보여줍니다.
+ `arn:aws:iam::123456789012:role/AWSExampleRole` - 계정 123456789012 내에서 생성되고 소유된 IAM 역할.
+ `arn:aws:s3:::amzn-s3-demo-bucket2`- 계정 `111122223333` 내에서 생성되고 소유된 Amazon S3 버킷, ARN에 표시되지 않음

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

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

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

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

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyInteractionWithResourcesNotInSpecificAccount",
      "Action": "service:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:service:us-east-1:111122223333:*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": [
            "111122223333"
          ]
        }
      }
    }
  ]
}
```

------

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

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

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

이 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 [설명서](https://docs.aws.amazon.com/index.html)를 참조하세요.

### aws:ResourceOrgPaths
<a name="condition-keys-resourceorgpaths"></a>

이 키를 사용하여 액세스한 리소스의 AWS Organizations 경로를 정책의 경로와 비교합니다. 정책에서 이 조건 키는 리소스가 AWS Organizations의 지정된 조직 루트 또는 조직 단위(OU) 내의 계정 멤버에게 속하도록 합니다. AWS Organizations 경로는 조직 엔터티 구조의 텍스트 표현입니다. 경로 사용 및 이해에 대한 자세한 내용을 알아보려면 [AWS Organizations 엔터티 경로 이해](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path) 섹션을 참조하세요.
+ **가용성** - 이 키는 리소스를 소유한 계정이 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 이 전역 조건 키는 다음 작업을 지원하지 않습니다.
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 모든 작업
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents`는 해당 이벤트 버스가 2023년 3월 2일 전에 크로스 계정 EventBridge 대상으로 구성된 경우 다른 계정의 이벤트 버스를 호출합니다. 자세한 내용은 **Amazon EventBridge 사용 설명서의 [Grant permissions to allow events from other AWS accounts](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)를 참조하세요.
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

**참고**  
위의 지원되지 않는 작업에 대한 추가 고려 사항은 [데이터 경계 정책 예제](https://github.com/aws-samples/data-perimeter-policy-examples) 리포지토리를 참조하세요.

`aws:ResourceOrgPaths`는 다중 값 조건 키입니다. 다중 값 키는 요청 컨텍스트에서 여러 값을 가질 수 있습니다. 이 키에 대한 [문자열 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_String)와 함께 `ForAnyValue` 또는 `ForAllValues` 집합 연산자를 사용해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

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

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

다음의 조건은 OU ID가 `ou-ab12-11111111`인 리소스에 대해 `True`를 반환합니다. OU ou-ab12-11111111 또는 하위 OU에 연결된 계정에서 소유한 리소스와 일치하게 됩니다.

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

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

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

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

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

이 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 [설명서](https://docs.aws.amazon.com/index.html)를 참조하세요.

### aws:ResourceOrgID
<a name="condition-keys-resourceorgid"></a>

이 키를 사용하여 요청된 리소스가 속한 AWS Organizations의 조직 식별자를 정책에 지정된 식별자와 비교합니다.
+ **가용성** - 이 키는 리소스를 소유한 계정이 조직의 멤버인 경우에만 요청 컨텍스트에 포함됩니다. 이 전역 조건 키는 다음 작업을 지원하지 않습니다.
  + AWS Audit Manager
    + `auditmanager:UpdateAssessmentFrameworkShare`
  + Amazon Detective
    + `detective:AcceptInvitation`
  + AWS Directory Service
    + `ds:AcceptSharedDirectory`
  + Amazon Elastic Block Store – 모든 작업
  + Amazon EC2
    + `ec2:AcceptTransitGatewayPeeringAttachment`
    + `ec2:AcceptVpcEndpointConnections`
    + `ec2:AcceptVpcPeeringConnection`
    + `ec2:CreateTransitGatewayPeeringAttachment`
    + `ec2:CreateVpcEndpoint`
    + `ec2:CreateVpcPeeringConnection`
  + Amazon EventBridge
    + `events:PutEvents` – EventBridge `PutEvents`는 해당 이벤트 버스가 2023년 3월 2일 전에 크로스 계정 EventBridge 대상으로 구성된 경우 다른 계정의 이벤트 버스를 호출합니다. 자세한 내용은 **Amazon EventBridge 사용 설명서의 [Grant permissions to allow events from other AWS accounts](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-cross-account.html#eb-receiving-events-from-another-account)를 참조하세요.
  + Amazon GuardDuty
    + `guardduty:AcceptAdministratorInvitation`
  + Amazon Macie
    + `macie2:AcceptInvitation`
  + Amazon OpenSearch Service
    + `es:AcceptInboundConnection`
  + Amazon Route 53
    + `route53:AssociateVpcWithHostedZone`
    + `route53:CreateVPCAssociationAuthorization`
  + AWS Security Hub CSPM
    + `securityhub:AcceptAdministratorInvitation`
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

**참고**  
위의 지원되지 않는 작업에 대한 추가 고려 사항은 [데이터 경계 정책 예제](https://github.com/aws-samples/data-perimeter-policy-examples) 리포지토리를 참조하세요.

이 전역 키는 지정된 요청에 대한 리소스 조직 ID를 반환합니다. 이를 통해 [아이덴티티 기반 정책](access_policies_identity-vs-resource.md)의 `Resource` 요소에 지정된 조직의 모든 리소스에 적용되는 규칙을 생성할 수 있습니다. 조건 요소에서 [조직 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)를 지정할 수 있습니다. 계정을 추가하고 제거할 때 `aws:ResourceOrgID` 키가 포함된 정책에 올바른 계정이 자동으로 포함되므로 수동으로 업데이트할 필요가 없습니다.

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

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

------
#### [ JSON ]

****  

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

------

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

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

이 정책 예제를 고유한 사용자 지정 정책 생성을 위한 템플릿으로 사용하세요. 자세한 내용은 서비스 [설명서](https://docs.aws.amazon.com/index.html)를 참조하세요.

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

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/cWVW0xAiWwc/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/cWVW0xAiWwc)


### aws:ResourceTag/*tag-key*
<a name="condition-keys-resourcetag"></a>

이 키를 사용하여 정책에서 지정한 태그 키-값 쌍을 리소스에 연결된 키-값 쌍과 비교합니다. 예를 들어 리소스에 값이 `"Marketing"`인 태그 키 `"Dept"`와 연결된 경우에만 리소스에 대한 액세스가 필요할 수 있습니다. 자세한 내용은 [AWS 리소스에 대한 액세스 제어](access_tags.md#access_tags_control-resources) 섹션을 참조하세요.
+ **가용성** - 이 키는 요청된 리소스에 이미 태그가 연결된 경우 요청 컨텍스트에 포함되거나 태그가 연결된 리소스를 생성하는 요청에 포함됩니다. 이 키는 [태그를 기반으로 권한 부여를 지원하는](reference_aws-services-that-work-with-iam.md) 리소스에 대해서만 반환됩니다. 각 태그 키 값 페어에는 하나의 컨텍스트 키가 있습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

`aws:ResourceTag` 키를 사용하여 IAM 리소스에 대한 액세스를 제어하는 예는 [AWS 리소스에 대한 액세스 제어](access_tags.md#access_tags_control-resources) 섹션을 참조하세요.

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

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

## 요청의 속성
<a name="condition-keys-request-properties"></a>

다음 조건 키를 사용하여 요청 자체에 대한 세부 정보와 요청 내용을 정책에 지정한 요청 속성과 비교합니다.

### aws:CalledVia
<a name="condition-keys-calledvia"></a>

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

자세한 내용은 [전달 액세스 세션](access_forward_access_sessions.md) 섹션을 참조하세요.
+ **가용성** - 이 키는 `aws:CalledVia`를 지원하는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 요청을 수행할 때 요청에 표시됩니다. 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 제공되지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.
+ **데이터 형식**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

정책에서 `aws:CalledVia` 조건 키를 사용하려면 AWS 서비스 요청을 허용 또는 거부할 서비스 보안 주체를 제공해야 합니다. 예를 들어 AWS CloudFormation를 사용하여 Amazon DynamoDB 테이블에서 읽고 쓸 수 있습니다. 그런 다음 DynamoDB가 AWS Key Management Service(AWS KMS)에서 제공한 암호화를 사용합니다.

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

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

![\[aws:CalledVia를 사용한 예\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/condition-key-calledvia-example-diagram.png)


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

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

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

------

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

![\[aws:CalledViaFirst and aws:CalledViaLast 사용 예제\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/condition-key-calledviafirstlast-example-diagram.png)


### aws:CalledViaFirst
<a name="condition-keys-calledviafirst"></a>

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청을 수행한 ***첫 번째 서비스***와 비교합니다. 자세한 내용은 `aws:CalledVia` 섹션을 참조하세요.
+ **가용성** - 이 키는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 최소 1개의 요청을 수행할 때 요청에 표시됩니다. 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 제공되지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

### aws:CalledViaLast
<a name="condition-keys-calledvialast"></a>

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청을 수행한 *마지막 서비스*와 비교합니다. 자세한 내용은 `aws:CalledVia` 섹션을 참조하세요.
+ **가용성** - 이 키는 서비스가 IAM 보안 주체의 자격 증명을 사용하여 다른 서비스에 최소 1개의 요청을 수행할 때 요청에 표시됩니다. 서비스가 [서비스 역할 또는 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#id_roles_terms-and-concepts)을 사용해 보안 주체를 대신하여 호출을 하는 경우에는 이 키가 제공되지 않습니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

### aws:ViaAWSService
<a name="condition-keys-viaawsservice"></a>

이 키를 사용하여 AWS 서비스가 사용자를 대신하여 다른 서비스에 요청하는 경우 [FAS(전달 액세스 세션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)를 사용하는지 여부를 확인할 수 있습니다.

요청 컨텍스트 키는 서비스가 전달 액세스 세션을 사용하여 원래 IAM 보안 주체를 대신하여 요청하는 경우 `true`를 반환합니다. 보안 주체가 직접 호출을 할 때도 요청 컨텍스트 키에서 `false`를 반환합니다.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

### aws:CalledViaAWSMCP
<a name="condition-keys-calledviaawasmcp"></a>

이 키를 사용하여 정책의 서비스를 IAM 보안 주체(사용자 또는 역할)를 대신하여 요청한 AWS 서비스와 비교합니다. 보안 주체가 AWS MCP 서비스에 요청을 하면 해당 서비스는 보안 주체의 자격 증명을 사용하여 다른 서비스에 대한 후속 요청을 수행할 수 있습니다. AWS MCP 서비스를 사용하여 요청하는 경우 해당 키는 서비스 보안 주체의 값으로 설정됩니다. `aws:CalledViaAWSMCP` 키에는 보안 주체를 대신하여 요청한 MCP 서비스의 서비스 보안 주체 이름이 포함됩니다.
+ **가용성** - 이 키는AWS MCP 서비스가 IAM 보안 주체의 자격 증명을 사용하여 AWS 서비스에 요청을 수행할 때 요청에 표시됩니다. 이 키는 보안 주체가 직접 호출을 할 때도 존재하지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

이 조건 키를 사용하여 요청을 시작한 특정 MCP 서버에 따라 액세스를 허용하거나 거부할 수 있습니다. 예를 들어, 다음 정책은 특정 MCP 서버를 통해 시작될 때 민감한 삭제 작업을 거부합니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenySensitiveActionsViaSpecificMCP",
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "dynamodb:DeleteTable"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:CalledViaAWSMCP": "aws-mcp.amazonaws.com"
                }
            }
        }
    ]
}
```

### aws:ViaAWSMCPService
<a name="condition-keys-viaawsmcpservice"></a>

이 키를 사용하여 AWS MCP 서비스가 사용자를 대신하여 다른 AWS 서비스에 요청하는 경우 FAS(전달 액세스 세션)를 사용하는지 여부를 확인할 수 있습니다. 요청 컨텍스트 키는 AWS MCP 서비스가 원래 IAM 보안 주체를 대신하여 AWS 서비스에 요청하는 경우 `true`를 반환합니다. 보안 주체가 직접 호출을 할 때도 요청 컨텍스트 키에서 `false`를 반환합니다.
+ **가용성** - 이 키는 AWS MCP 서버가 IAM 보안 주체를 대신하여 다운스트림 AWS 서비스에 요청할 때 요청 컨텍스트에 포함됩니다.
+ **데이터 유형** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

이 키를 사용하여 MCP 서버를 통해 특정 작업을 제한할 수 있습니다. 예를 들어 다음 정책은 AWS MCP 서버를 통해 시작될 때 민감한 삭제 작업을 거부합니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DenySensitiveActionsViaMCP",
            "Effect": "Deny",
            "Action": [
                "s3:DeleteBucket",
                "s3:DeleteObject",
                "dynamodb:DeleteTable"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "aws:ViaAWSMCPService": "true"
                }
            }
        }
    ]
}
```

### aws:CurrentTime
<a name="condition-keys-currenttime"></a>

이 키를 사용하여 요청의 날짜 및 시간을 정책에서 지정한 날짜 및 시간과 비교합니다. 이 조건 키를 사용하는 예시 정책을 보려면 [AWS: 날짜 및 시간에 따라 액세스 허용](reference_policies_examples_aws-dates.md) 섹션을 참조하세요.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** - [날짜](reference_policies_elements_condition_operators.md#Conditions_Date)
+ **값 유형**-단일 값

### aws:EpochTime
<a name="condition-keys-epochtime"></a>

이 키를 사용하여 epoch 또는 Unix 시간의 요청 날짜 및 시간을 정책에서 지정한 값과 비교합니다. 또한 이 키는 1970년 1월 1일 이후의 초 수를 허용합니다.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 유형** - [날짜](reference_policies_elements_condition_operators.md#Conditions_Date), [숫자](reference_policies_elements_condition_operators.md#Conditions_Numeric)
+ **값 유형**-단일 값

### aws:referer
<a name="condition-keys-referer"></a>

이 키를 사용하여 클라이언트 브라우저에서 요청을 참조한 사람과 정책에서 지정한 참조자를 비교합니다. `aws:referer` 요청 컨텍스트 값은 HTTP 헤더의 호출자에 의해 제공됩니다. 웹 페이지에서 링크를 선택하면 웹 브라우저 요청에 `Referer` 헤더가 포함됩니다. `Referer` 헤더에는 링크가 선택된 웹 페이지의 URL이 포함됩니다.
+ **가용성** - 이 키는 브라우저의 웹 페이지 URL에서 링크하여 AWS 리소스에 대한 요청을 호출한 경우에만 요청 컨텍스트에 포함됩니다. 이 키는 AWS 리소스에 액세스할 때 브라우저 링크를 사용하지 않기 때문에 프로그래밍 방식의 요청에 포함되지 않습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

예를 들어 URL을 사용하거나 직접 API 호출을 사용하여 Amazon S3 객체에 직접 액세스할 수 있습니다. 자세한 내용은 [웹 브라우저를 직접 사용한 Amazon S3 API 작업](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-use-case-4)을 참조하세요. 웹 페이지에 있는 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
<a name="condition-keys-requestedregion"></a>

이 키를 사용하여 요청에서 호출된 AWS 리전을 정책에서 지정한 리전과 비교합니다. 이 전역 조건 키를 사용하여 요청할 수 있는 리전을 제어할 수 있습니다. 각 서비스의 AWS 리전을 보려면 **Amazon Web Services 일반 참조의 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하세요.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

**참고**  
`aws:RequestedRegion` 조건 키를 사용하면 서비스의 어떤 엔드포인트를 호출할지 제어할 수 있지만 작업의 영향은 제어할 수 없습니다. 일부 서비스의 경우 교차 리전 영향이 있습니다.  
예를 들어, Amazon S3에는 여러 리전으로 확장되는 API 작업이 있습니다.  
`s3:PutBucketReplication` 조건 키의 영향을 받는 한 리전에서 `aws:RequestedRegion`을 호출할 수 있는데 다른 리전은 복제 구성 설정에 따라 영향을 받습니다.
`s3:CreateBucket`을 간접적으로 호출하여 다른 리전에서 버킷을 생성하고, `s3:LocationConstraint` 조건 키를 사용하여 해당 리전을 제어할 수 있습니다.

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

------
#### [ JSON ]

****  

```
{
    "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*
<a name="condition-keys-requesttag"></a>

이 키를 사용하여 요청에서 전달된 태그 키 값 페어를 정책에서 지정한 태그 페어와 비교합니다. 예를 들어, 요청에 태그 키 `"Dept"`가 포함되어 있으며 값이 `"Accounting"`인지 확인할 수 있습니다. 자세한 내용은 [AWS 요청 중 액세스 제어](access_tags.md#access_tags_control-requests) 섹션을 참조하세요.
+ **가용성** - 이 키는 태그 키-값 페어가 요청에 전달될 때 요청 컨텍스트에 포함됩니다. 요청에 여러 태그가 전달되면 각 태그 키 값 페어에 대해 하나의 컨텍스트 키가 있습니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

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

------
#### [ JSON ]

****  

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

------

### aws:TagKeys
<a name="condition-keys-tagkeys"></a>

이 키를 사용하여 요청의 태그 키를 정책에서 지정한 키와 비교합니다. 정책을 사용하여 태그를 통해 액세스를 제어할 때 `aws:TagKeys` 조건 키를 사용하여 어떤 태그 키가 허용되는지 정의하는 것이 좋습니다. 정책 예제 및 자세한 내용은 [태그 키를 기반으로 액세스 제어](access_tags.md#access_tags_control-tag-keys) 섹션을 참조하세요.
+ **가용성** - 작업이 요청에서 태그 전달을 지원하는 경우 이 키는 요청 컨텍스트에 포함됩니다.
+ **데이터 형식**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

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

요청에 여러 개의 태그 키 값 페어를 포함할 수 있으므로 요청 콘텐츠는 [다중 값](reference_policies_condition-single-vs-multi-valued-context-keys.md) 요청이 될 수 있습니다. 이 경우 `ForAllValues` 또는 `ForAnyValue` 설정 연산자를 사용해야 합니다. 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

일부 서비스는 리소스 생성, 수정 또는 삭제와 같은 리소스 작업을 포함한 태그 지정을 지원합니다. 태그 지정 및 단일 호출과 같은 작업을 허용하려면 태그 지정 작업 및 리소스 수정 작업을 모두 포함하는 정책을 생성해야 합니다. 그런 다음 `aws:TagKeys` 조건 키를 사용하여 요청 내 특정 태그 키 사용을 적용할 수 있습니다. 예를 들어 누군가 Amazon EC2 스냅샷을 생성할 때 태그를 제한하려면 `ec2:CreateSnapshot` 생성 작업 ***및*** `ec2:CreateTags` 태그 지정 작업을 정책에 포함시켜야 합니다. `aws:TagKeys`를 사용하는 이 시나리오에 대한 정책을 보려면 *Amazon EC2 사용 설명서*의 [태그를 사용하여 스냅샷 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExamplePolicies_EC2.html#iam-creating-snapshot-with-tags)을 참조하세요.

### aws:SecureTransport
<a name="condition-keys-securetransport"></a>

이 키를 사용하여 요청이 TLS를 사용하여 전송되었는지 여부를 확인합니다. 요청 컨텍스트는 `true` 또는 `false`를 반환합니다. 정책에서 TLS를 사용하여 요청이 전송된 경우에만 특정 작업을 허용할 수 있습니다.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 형식** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

**참고**  
AWS 서비스가 사용자를 대신하여 다른 AWS 서비스를 호출하면(서비스 간 호출) 특정 네트워크별 권한 부여 컨텍스트가 삭제됩니다. 정책에서 `Deny` 문과 함께 이 조건 키를 사용하는 경우 AWS 서비스 보안 주체가 의도치 않게 차단될 수 있습니다. 보안 요구 사항을 유지하면서 AWS 서비스가 제대로 작동하도록 하려면 값이 `false`인 `aws:PrincipalIsAWSService` 조건 키를 추가하여 `Deny` 문에서 서비스 보안 주체를 제외합니다. 예제:  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
이 정책은 HTTPS가 사용되지 않을 때(`aws:SecureTransport`가 false) Amazon S3 작업에 대한 액세스를 거부하지만 AWS 서비스 보안 주체가 아닌 사용자에게만 적용됩니다. 이렇게 하면 AWS 서비스 보안 주체를 제외한 모든 보안 주체에게 조건부 제한이 적용됩니다.

### aws:SourceAccount
<a name="condition-keys-sourceaccount"></a>

이 키를 사용하여 서비스 간 요청을 하는 리소스의 계정 ID를 정책에서 지정한 계정 ID와 비교합니다. 단, AWS 서비스 주체가 요청을 하는 경우에만 해당됩니다.
+ **가용성** - 이 키는 구성에서 서비스 간 요청을 트리거한 리소스를 대신하여 [AWS서비스 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)가 리소스를 직접 호출하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스 계정 ID를 호출된 서비스로 전달합니다.
**참고**  
이 키는 AWS 서비스 전반에 걸쳐 서비스 간 혼동된 대리자 제어를 적용하기 위한 통일된 메커니즘을 제공합니다. 그러나 모든 서비스 통합에서 이 전역 조건 키를 사용해야 하는 것은 아닙니다. 서비스 간 혼동된 대리자 위험을 완화하기 위한 서비스별 메커니즘에 대한 자세한 내용은 사용하는 AWS 서비스의 설명서를 참조하세요.  
![\[aws:SourceAccount\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/sourceAccount.png)
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

이 조건 키를 사용하여 요청이 특정 계정에서 시작된 경우에만 직접 호출 서비스가 리소스에 액세스하도록 할 수 있습니다. 예를 들어 다음 리소스 제어 정책(RCP)을 연결하여 지정된 계정의 리소스에 의해 트리거되지 않는 한 Amazon S3 버킷에 대한 서비스 위탁자의 요청을 거부할 수 있습니다. 이 정책은 `aws:SourceAccount` 키가 있는(`"Null": {"aws:SourceAccount": "false"}`) 서비스 주체(`"Bool": {"aws:PrincipalIsAWSService": "true"}`)의 요청에만 제어를 적용하므로 이 키를 사용할 필요가 없는 서비스 통합과 주체의 직접 호출에는 영향을 미치지 않습니다. 요청 컨텍스트에 `aws:SourceAccount` 키가 있는 경우 `Null` 조건이 `true`로 평가되어 `aws:SourceAccount` 키가 적용됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RCPEnforceConfusedDeputyProtection",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceAccount": "111122223333"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

------

위탁자가 AWS 서비스 위탁자인 리소스 기반 정책에서 키를 사용하여 서비스에 부여된 권한을 제한합니다. 예를 들어 Amazon S3 버킷이 Amazon SNS 주제에 알림을 보내도록 구성된 경우 Amazon S3 서비스는 구성된 모든 이벤트에 대해 `sns:Publish` API 작업을 간접적으로 호출합니다. `sns:Publish` 작업을 허용하는 주제 정책에서 조건 키의 값을 Amazon S3 버킷의 계정 ID로 설정합니다.

### aws:SourceArn
<a name="condition-keys-sourcearn"></a>

이 키를 사용하여 서비스 간 요청을 하는 리소스의 [Amazon 리소스 이름(ARN)](reference_identifiers.md#identifiers-arns)을 정책에 지정한 ARN과 비교합니다. 단, AWS 서비스 보안 주체가 요청을 하는 경우에만 해당됩니다. 소스의 ARN에는 계정 ID가 포함되어 있는 경우 `aws:SourceAccount`와 함께 `aws:SourceArn`을 사용할 필요가 없습니다.

이 키는 요청하는 보안 주체의 ARN에서는 작동하지 않습니다. 대신 `aws:PrincipalArn`를 사용합니다.
+ **가용성** - 이 키는 구성에서 서비스 간 요청을 트리거한 리소스를 대신하여 [AWS서비스 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)가 리소스를 직접 호출하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스의 ARN을 호출된 서비스로 전달합니다.
**참고**  
이 키는 AWS 서비스 전반에 걸쳐 서비스 간 혼동된 대리자 제어를 적용하기 위한 통일된 메커니즘을 제공합니다. 그러나 모든 서비스 통합에서 이 전역 조건 키를 사용해야 하는 것은 아닙니다. 서비스 간 혼동된 대리자 위험을 완화하기 위한 서비스별 메커니즘에 대한 자세한 내용은 사용하는 AWS 서비스의 설명서를 참조하세요.  
![\[aws:SourceArn\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/sourceArn.png)
+ **데이터 유형** – ARN

  AWS는 ARN을 비교할 때 [문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String) 대신 [ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용하는 것이 좋습니다.
+ **값 유형**-단일 값

이 조건 키를 사용하여 요청이 특정 리소스에서 시작된 경우에만 직접 호출 서비스가 리소스에 액세스하도록 할 수 있습니다. AWS 서비스 위탁자를 `Principal`로 하여 리소스 기반 정책을 사용하는 경우 이 조건 키의 값을 액세스를 제한하려는 리소스의 ARN으로 설정합니다. 예를 들어 Amazon S3 버킷이 Amazon SNS 주제에 알림을 보내도록 구성된 경우 Amazon S3 서비스는 구성된 모든 이벤트에 대해 `sns:Publish` API 작업을 간접적으로 호출합니다. `sns:Publish` 작업을 허용하는 주제 정책에서 조건 키의 값을 Amazon S3 버킷의 ARN으로 설정합니다. 리소스 기반 정책에서 이 조건 키를 사용하는 경우에 대한 권장 사항은 사용 중인 AWS 서비스에 대한 설명서를 참조하세요.

### aws:SourceOrgID
<a name="condition-keys-sourceorgid"></a>

이 키를 사용하여 서비스 대 서비스 요청을 하는 리소스의 [조직 ID를](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html) 정책에서 지정한 조직 ID와 비교합니다. 단, 서비스 대 서비스 요청을 하는 리소스의 조직 ID를 AWS 서비스 보안 주체가 요청한 경우에만 비교합니다. AWS Organizations에서 조직에 계정을 추가하고 제거하면 `aws:SourceOrgID` 키가 포함된 정책에 올바른 계정이 자동으로 포함되므로 정책을 수동으로 업데이트할 필요가 없습니다.
+ **가용성** - 이 키는 조직의 구성원인 계정이 소유한 리소스를 대신하여 [AWS서비스 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)가 사용자의 리소스를 직접 호출하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스의 조직 ID를 호출된 서비스로 전달해야 합니다.
**참고**  
이 키는 AWS 서비스 전반에 걸쳐 서비스 간 혼동된 대리자 제어를 적용하기 위한 통일된 메커니즘을 제공합니다. 그러나 모든 서비스 통합에서 이 전역 조건 키를 사용해야 하는 것은 아닙니다. 서비스 간 혼동된 대리자 위험을 완화하기 위한 서비스별 메커니즘에 대한 자세한 내용은 사용하는 AWS 서비스의 설명서를 참조하세요.  
![\[aws:SourceOrgID\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/sourceOrgID.png)
+ **데이터 유형** – [문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

이 조건 키를 사용하여 요청이 특정 조직에서 시작된 경우에만 직접 호출 서비스가 리소스에 액세스하도록 할 수 있습니다. 예를 들어 다음 리소스 제어 정책(RCP)을 연결하여 지정된 AWS 조직의 리소스에 의해 트리거되지 않는 한 Amazon S3 버킷에 대한 서비스 위탁자의 요청을 거부할 수 있습니다. 이 정책은 `aws:SourceAccount` 키가 있는(`"Null": {"aws:SourceAccount": "false"}`) 서비스 주체(`"Bool": {"aws:PrincipalIsAWSService": "true"}`)의 요청에만 제어를 적용하므로 키를 사용할 필요가 없는 서비스 통합과 주체의 직접 호출에는 영향을 미치지 않습니다. 요청 컨텍스트에 `aws:SourceAccount` 키가 있는 경우 `Null` 조건이 `true`로 평가되어 `aws:SourceOrgID` 키가 적용됩니다. `Null` 조건 연산자에서 `aws:SourceOrgID` 대신 `aws:SourceAccount`를 사용하여 요청이 조직에 속하지 않은 계정에서 시작된 경우에도 제어가 여전히 적용되도록 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RCPEnforceConfusedDeputyProtection",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:*"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEqualsIfExists": {
          "aws:SourceOrgID": "o-xxxxxxxxxx"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
    }
  ]
}
```

------

### aws:SourceOrgPaths
<a name="condition-keys-sourceorgpaths"></a>

이 키를 사용하여 서비스 대 서비스 요청을 하는 리소스의 AWS Organizations 경로를 정책에서 지정한 조직의 경로와 비교합니다. 단, 서비스 대 서비스 요청을 하는 조직의 경로를 AWS 서비스 보안 주체가 요청한 경우에만 비교합니다. AWS Organizations 경로는 AWS Organizations 엔터티 구조의 텍스트 표현입니다. 경로 사용 및 이해에 대한 자세한 내용은 [AWS Organizations 엔터티 경로 이해하기](access_policies_last-accessed-view-data-orgs.md#access_policies_last-accessed-viewing-orgs-entity-path) 섹션을 참조하세요.
+ **가용성** - 이 키는 조직의 구성원인 계정이 소유한 리소스를 대신하여 [AWS서비스 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)가 사용자의 리소스를 직접 호출하는 경우에만 요청 컨텍스트에 포함됩니다. 호출하는 서비스는 원래 리소스의 조직 경로를 호출된 서비스로 전달해야 합니다.
**참고**  
이 키는 AWS 서비스 전반에 걸쳐 서비스 간 혼동된 대리자 제어를 적용하기 위한 통일된 메커니즘을 제공합니다. 그러나 모든 서비스 통합에서 이 전역 조건 키를 사용해야 하는 것은 아닙니다. 서비스 간 혼동된 대리자 위험을 완화하기 위한 서비스별 메커니즘에 대한 자세한 내용은 사용하는 AWS 서비스의 설명서를 참조하세요.  
![\[aws:SourceOrgPaths\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/sourceOrgPaths.png)
+ **데이터 유형** - [문자열](reference_policies_elements_condition_operators.md#Conditions_String)(목록)
+ **값 유형**-다중 값

이 조건 키를 사용하여 요청이 AWS Organizations의 특정 조직 단위(OU)에서 시작된 경우에만 직접 호출 서비스가 리소스에 액세스하도록 합니다.

`aws:SourceOrgID`와 마찬가지로 이 키를 사용할 필요가 없는 서비스 통합에 미치는 영향을 방지하려면 요청이 조직에 속하지 않은 계정에서 시작된 경우에도 제어가 적용되도록 `aws:SourceAccount` 조건 키와 함께 `Null` 조건 연산자를 사용합니다.

```
{
      "Condition": {
        "ForAllValues:StringNotLikeIfExists": {
            "aws:SourceOrgPaths": "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/ou-ab12-22222222/"
        },
        "Null": {
          "aws:SourceAccount": "false"
        },
        "Bool": {
          "aws:PrincipalIsAWSService": "true"
        }
      }
}
```

`aws:SourceOrgPaths`는 다중 값 조건 키입니다. 다중 값 키는 요청 컨텍스트에서 여러 값을 가질 수 있습니다. 이 키에 대한 [문자열 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_String)와 함께 `ForAnyValue` 또는 `ForAllValues` 집합 연산자를 사용해야 합니다. 다중 값 조건 키에 대한 자세한 내용은 [다중 값 컨텍스트 키에 대한 연산자 설정](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys) 섹션을 참조하세요.

### aws:UserAgent
<a name="condition-keys-useragent"></a>

이 키를 사용하여 요청자의 클라이언트 애플리케이션을 정책에서 지정한 애플리케이션과 비교합니다.
+ **가용성**-이 키는 항상 요청 컨텍스트에 포함됩니다.
+ **데이터 유형**-[문자열](reference_policies_elements_condition_operators.md#Conditions_String)
+ **값 유형**-단일 값

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

### aws:IsMcpServiceAction
<a name="condition-keys-ismcpserviceaction"></a>

이 키를 사용하여 승인되는 작업이 MCP 서비스 작업인지 확인합니다. 이 키는 MCP 서비스가 다른 AWS 서비스에 대해 수행한 작업을 참조하지 않습니다.
+ **가용성** - 이 키는 요청 컨텍스트에 포함되며 MCP 서비스가 MCP 서비스 작업을 승인하는 경우에만 True로 설정됩니다.
+ **데이터 유형** – [부울](reference_policies_elements_condition_operators.md#Conditions_Boolean)
+ **값 유형**-단일 값

## 기타 교차 서비스 조건 키
<a name="condition-keys-other"></a>

AWS STS는 [OIDC 페더레이션](reference_policies_iam-condition-keys.md#condition-keys-wif)을 위한 [SAML 기반 페더레이션 조건 키](reference_policies_iam-condition-keys.md#condition-keys-saml)와 교차 서비스 조건 키를 지원합니다. 이러한 키는 OIDC 또는 SAML을 사용하여 페더레이션된 사용자가 다른 서비스에서 AWS 작업을 수행할 때 사용될 수 있습니다.

# IAM 및 AWS STS 조건 컨텍스트 키
<a name="reference_policies_iam-condition-keys"></a>

JSON 정책의 `Condition` 요소를 사용하여 모든 AWS 요청의 요청 컨텍스트에 포함된 키 값을 테스트할 수 있습니다. 이러한 키는 요청 자체 또는 해당 요청이 참조하는 리소스에 대한 정보를 제공합니다. 사용자가 요청한 작업을 허용하기 전에 키에 값이 지정되었는지 확인할 수 있습니다. 이렇게 하면 JSON 정책 문이 수신 요청과 일치 또는 불일치할 경우 보다 세분화된 제어가 가능합니다. JSON 정책의 `Condition` 요소 사용에 대한 자세한 방법은 [IAM JSON 정책 요소: Condition](reference_policies_elements_condition.md) 섹션을 참조하세요.

이 주제에서는 IAM 서비스(`iam:` 접두사 포함) 및 AWS Security Token Service(AWS STS) 서비스(`sts:` 접두사 포함)에서 정의 및 제공하는 키에 대해 설명합니다. 다른 여러 AWS 서비스에서도 해당 서비스가 정의한 작업 및 리소스와 관련된 서비스 고유 키를 제공합니다. 자세한 내용은 [AWS 서비스에 사용되는 작업, 리소스 및 조건 키](reference_policies_actions-resources-contextkeys.html)를 참조하세요. 대개의 경우 조건 키를 지원하는 서비스의 설명서에 추가 정보를 확인할 수 있습니다. 예를 들어 Amazon S3 리소스 정책에서 사용할 수 있는 키에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [Amazon S3 정책 키](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazon-s3-policy-keys.html#AvailableKeys-iamV2)를 참조하세요.

**Topics**
+ [IAM에서 사용할 수 있는 키](#available-keys-for-iam)
+ [AWS OIDC 페더레이션에서 사용 가능한 키](#condition-keys-wif)
+ [SAML 기반 AWS STS 연동에 사용할 수 있는 키](#condition-keys-saml)
+ [교차 서비스 SAML 기반 AWS STS 페더레이션 컨텍스트 키](#cross-condition-keys-saml)
+ [AWS STS에서 사용할 수 있는 키](#condition-keys-sts)

## IAM에서 사용할 수 있는 키
<a name="available-keys-for-iam"></a>

IAM 리소스에 대한 액세스 제어 정책에서는 다음과 같은 조건 키를 사용할 수 있습니다.

**iam:AssociatedResourceArn**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
대상 서비스에서 이 역할이 연결될 리소스의 ARN을 지정합니다. 리소스는 일반적으로 보안 주체가 역할을 전달하는 서비스에 속합니다. 경우에 따라 리소스는 세 번째 서비스에 속할 수 있습니다. 예를 들어 Amazon EC2 인스턴스에서 사용하는 역할을 Amazon EC2 Auto Scaling에 전달할 수 있습니다. 이 경우 조건은 Amazon EC2 인스턴스의 ARN과 일치합니다.  
이 조건 키는 정책의 [PassRole](id_roles_use_passrole.md) 작업에만 적용됩니다. 다른 작업을 제한하는 데 사용할 수 없습니다.  
정책에서 `iam:AssociatedResourceArn` 조건을 사용하여 [PassRole](id_roles_use_passrole.md) 작업을 제한하는 경우 정책이 [AddRoleToInstanceProfile](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddRoleToInstanceProfile.html) 작업에 대한 액세스를 정의하려는 경우 특별한 고려 사항이 적용됩니다. 이 경우 EC2 인스턴스 ARN에서 리전 또는 인스턴스 ID를 지정할 수 없습니다. ARN 값은 `arn:aws:ec2:*:CallerAccountId:instance/*`여야 합니다. 다른 ARN 값을 사용하면 예상치 못한 평가 결과가 발생할 수 있습니다.
자격 증명 기반 정책에서 이 조건 키를 사용하여 엔터티가 역할을 전달하도록 허용하지만, 해당 역할이 지정된 리소스와 연결된 경우에만 가능합니다. 예를 들어 IAM 사용자 또는 역할이 AWS 계정의 인스턴스에서 사용할 Amazon EC2 서비스에 모든 역할을 전달하도록 허용할 수 있습니다. IAM 사용자 또는 역할은 다른 서비스에 역할을 전달할 수 없습니다.  

```
{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "ec2.amazonaws.com"
        },
        "ArnLike": {
            "iam:AssociatedResourceARN": [
                "arn:aws:ec2:*:111122223333:instance/*"
            ]
        }
    }
}
```
[iam:PassedToService](#ck_PassedToService)를 지원하는 AWS 서비스는 이 조건 키도 지원합니다.

**iam:AWSServiceName**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 역할이 연결되는 AWS 서비스를 지정합니다.  
이 조건 키는 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) API 작업에서 지원됩니다.  
서비스 연결 역할의 사용을 지원하는 서비스에 대한 자세한 정보는 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md)를 참조하고 **서비스 연결 역할** 열에 **예**가 있는 서비스를 찾습니다. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예(Yes)** 링크를 선택합니다.
이 예제에서는 서비스 이름이 *access-analyzer.amazonaws.com*인 경우 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) API 작업을 사용하는 서비스 연결 역할을 엔터티가 생성하도록 허용합니다.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
       "Effect": "Allow",
       "Action": "iam:CreateServiceLinkedRole",
       "Resource": "*",
       "Condition": {
         "StringLike": {
           "iam:AWSServiceName": "access-analyzer.amazonaws.com"
         }
       }
     }]
 }
```

**iam:FIDO-certification**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
FIDO 보안 키 등록 시 MFA 디바이스 FIDO 인증 등급을 확인합니다. 디바이스 인증은 [FIDO Alliance 메타데이터 서비스(MDS)](https://fidoalliance.org/metadata/)에서 가져옵니다. FIDO 보안 키의 인증 상태 또는 등급이 변경될 경우 디바이스를 등록 취소하고 업데이트된 인증 정보를 가져오기 위해 다시 등록하지 않는 한 디바이스 인증은 업데이트되지 않습니다.  
가능한 값: L1, L1plus, L2, L2plus, L3, L3plus  
이 예에서는 보안 키를 등록하고 디바이스에 대한 FIDO Level 1 plus 인증을 가져옵니다.    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-certification": "L1plus"
                }
            }
        }
    ]
                  
 }
```

**iam:FIDO-FIPS-140-2-certification**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
FIDO 보안 키 등록 시 MFA 디바이스 FIPS-140-2 검증 인증 등급을 확인합니다. 디바이스 인증은 [FIDO Alliance 메타데이터 서비스(MDS)](https://fidoalliance.org/metadata/)에서 가져옵니다. FIDO 보안 키의 인증 상태 또는 등급이 변경될 경우 디바이스를 등록 취소하고 업데이트된 인증 정보를 가져오기 위해 다시 등록하지 않는 한 디바이스 인증은 업데이트되지 않습니다.  
가능한 값: L1, L2, L3, L4  
이 예에서는 보안 키를 등록하고 디바이스에 대한 FIPS-140-2 Level 2 인증을 가져옵니다.    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-2-certification": "L2"
                }
            }
        }
    ]
                  
 }
```

**iam:FIDO-FIPS-140-3-certification**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
FIDO 보안 키 등록 시 MFA 디바이스 FIPS-140-3 검증 인증 등급을 확인합니다. 디바이스 인증은 [FIDO Alliance 메타데이터 서비스(MDS)](https://fidoalliance.org/metadata/)에서 가져옵니다. FIDO 보안 키의 인증 상태 또는 등급이 변경될 경우 디바이스를 등록 취소하고 업데이트된 인증 정보를 가져오기 위해 다시 등록하지 않는 한 디바이스 인증은 업데이트되지 않습니다.  
가능한 값: L1, L2, L3, L4  
이 예에서는 보안 키를 등록하고 디바이스에 대한 FIPS-140-3 Level 3 인증을 가져옵니다.    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L3"
                }
            }
        }
    ]
                  
 }
```

**iam:OrganizationsPolicyId**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
지정된 AWS Organizations ID가 포함된 정책이 요청에 사용된 정책과 일치하는지 확인합니다. 이 조건 키를 사용하는 예시 IAM 정책을 보려면 [IAM: AWS Organizations 정책에 대해 마지막으로 액세스한 서비스 정보 보기](reference_policies_examples_iam_service-accessed-data-orgs.md) 섹션을 참조하세요.

**iam:PassedToService**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
역할을 전달할 수 있는 서비스의 서비스 보안 주체를 지정합니다. 이 조건 키는 정책의 [PassRole](id_roles_use_passrole.md) 작업에만 적용됩니다. 다른 작업을 제한하는 데 사용할 수 없습니다.  
정책에서 이 조건 키를 사용할 때 서비스 보안 주체를 사용하여 서비스를 지정합니다. 서비스 보안 주체는 정책의 `Principal` 요소에 지정할 수 있는 서비스 이름입니다. `SERVICE_NAME_URL.amazonaws.com`이 일반적인 형식입니다.  
`iam:PassedToService`를 사용하여 특정 서비스에만 역할을 전달할 수 있도록 사용자를 제한할 수 있습니다. 예를 들어, 사용자는 Amazon S3 버킷에 로그 데이터를 대신 쓸 수 있도록 CloudWatch를 신뢰하는 [서비스 역할](id_roles.md#iam-term-service-role)을 생성할 수 있습니다. 그런 다음 사용자는 새 서비스 역할에 권한 정책 및 신뢰 정책을 연결해야 합니다. 이 경우, 신뢰 정책은 `cloudwatch.amazonaws.com` 요소에 `Principal`을 지정해야 합니다. 사용자가 CloudWatch에 역할을 전달하도록 허용하는 정책을 보려면 [IAM: IAM 역할을 특정 AWS 서비스로 전달](reference_policies_examples_iam-passrole-service.md) 섹션을 참조하세요.  
이 조건 키를 사용하면 사용자가 여러분이 지정한 서비스에 대해서만 서비스 역할을 생성하도록 할 수 있습니다. 예를 들어, 앞의 정책을 가진 사용자가 Amazon EC2에 대한 서비스 역할을 생성하려고 하면 작업이 실패합니다. 해당 사용자에게 Amazon EC2로 역할을 전달할 권한이 없기 때문입니다.  
역할을 서비스에 전달한 다음 역할을 다른 서비스에 전달하는 경우가 있습니다. `iam:PassedToService`에는 역할을 전달하는 중간 서비스가 아니라 역할을 수임하는 최종 서비스만 포함됩니다.  
일부 서비스는 이러한 조건 키를 지원하지 않습니다.

**iam:PermissionsBoundary**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
지정한 정책이 IAM 보안 주체 리소스에 권한 경계로서 연결되어 있는지 확인합니다. 자세한 내용은 [IAM 엔터티의 권한 범위](access_policies_boundaries.md) 섹션을 참조하세요.

**iam:PolicyARN**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
관리형 정책이 포함된 요청에서 관리형 정책의 Amazon 리소스 이름(ARN)을 확인합니다. 자세한 내용은 [정책에 대한 액세스 제어](access_controlling.md#access_controlling-policies) 섹션을 참조하세요.

**iam:RegisterSecurityKey**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
MFA 디바이스 활성화의 현재 상태를 확인합니다.  
가능한 값: `Create` 또는 `Activate`  
이 예에서는 보안 키를 등록하고 디바이스에 대한 FIPS-140-3 Level 1 인증을 가져옵니다.    
****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Statement": [{
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Create"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:EnableMFADevice",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:RegisterSecurityKey" : "Activate",
                    "iam:FIDO-FIPS-140-3-certification": "L1"
                }
            }
        }
    ]
                  
 }
```

**iam:ResourceTag/*key-name***  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
자격 검증 리소스(사용자 또는 역할)에 연결된 태그가 지정된 키 이름 및 값과 일치하는지 확인합니다.  
IAM 및 AWS STS은 `iam:ResourceTag` IAM 조건 키와 `aws:ResourceTag` 전역 조건 키를 모두 지원합니다.
IAM 리소스에 사용자 지정 속성을 키 값 페어의 형태로 추가할 수 있습니다. IAM 리소스의 태그에 대한 자세한 내용은 [AWS Identity and Access Management 리소스용 태그](id_tags.md) 섹션을 참조하세요. `ResourceTag`를 사용하여 AWS 리소스를 비롯한 IAM 리소스에 대한 [액세스를 제어](access_tags.md#access_tags_control-resources)할 수 있습니다. 그러나 IAM은 그룹에 대한 태그를 지원하지 않으므로 태그를 사용하여 그룹에 대한 액세스를 제어할 수 없습니다.  
이 예제는 **status=terminated** 태그가 있는 사용자만 삭제할 수 있는 아이덴티티 기반 정책을 생성하는 방법을 보여줍니다. 이 정책을 사용하려면 정책 예제의 *기울임꼴 자리 표시자 텍스트*를 본인의 정보로 대체합니다. 그런 다음 [정책 생성](access_policies_create.md) 또는 [정책 편집](access_policies_manage-edit.md)의 지침을 따릅니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": "iam:DeleteUser",
        "Resource": "*",
        "Condition": {"StringEquals": {"iam:ResourceTag/status": "terminated"}}
    }]
}
```

**iam:ServiceSpecificCredentialAgeDays**  
[숫자 연산자](reference_policies_elements_condition_operators.md#Conditions_Numeric)를 사용합니다.  
이 조건 키는 만료 설정에 따라 서비스별 자격 증명 생성을 제한합니다. 이렇게 하면 생성 가능한 서비스별 자격 증명의 최대 수명을 일 단위로 제어할 수 있습니다.  
일수의 유효한 범위는 1\$136600(최소 1일, 최대 36600일)입니다.  
이 조건 키는 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) API 작업에서 지원됩니다.  
이 예제에서는 사용자가 90일 이내에 만료되는 경우에만 Amazon Bedrock 서비스에 대한 서비스별 자격 증명을 생성하도록 허용합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceSpecificCredential",
            "Resource": "arn:aws:iam::111122223333:user/username",
            "Condition": {
                "StringEquals": {
                    "iam:ServiceSpecificCredentialServiceName": "bedrock.amazonaws.com"
                },
                "NumericLessThanEquals": {
                    "iam:ServiceSpecificCredentialAgeDays": "90"
                }
            }
        }
    ]
}
```

**iam:ServiceSpecificCredentialServiceName**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
AWS 서비스별 자격 증명을 관리할 때 사용할 수 있는 서비스를 지정합니다. 이 조건 키를 사용하면 AWS 서비스별 자격 증명을 관리할 때 허용되는 서비스를 제한할 수 있습니다.  
이 조건 키는 다음과 같은 API 작업에서 지원됩니다.  
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ResetServiceSpecificCredential.html)
+ [https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateServiceSpecificCredential.html)
다음 서비스는 정확한 값 형식이 있는 서비스별 자격 증명에 대해 지원됩니다.  
+ `bedrock.amazonaws.com`
+ `cassandra.amazonaws.com`
+ `codecommit.amazonaws.com`
이 예제에서는 사용자가 Amazon Bedrock 서비스에 대해서만 [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceSpecificCredential.html) API 작업을 사용하여 서비스별 자격 증명을 생성하도록 허용합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceSpecificCredential",
            "Resource": "arn:aws:iam::111122223333:user/username",
            "Condition": {
                "StringEquals": {
                    "iam:ServiceSpecificCredentialServiceName": "bedrock.amazonaws.com"
                }
            }
        }
    ]
}
```

**iam:DelegationDuration**  
[숫자 연산자](reference_policies_elements_condition_operators.md#Conditions_Numeric)를 사용합니다.  
위임 요청에서 요청된 임시 액세스 기간을 기준으로 액세스를 필터링합니다.  
제품 제공업체는 이 조건 키를 사용하여 고객에게 전송되는 위임 요청에 허용되는 최대 기간을 제어할 수 있습니다. 기간은 초 단위로 지정되며 고객이 교환 토큰을 릴리스한 후에도 임시 자격 증명이 유효한 기간을 결정합니다. 이를 통해 제품 제공업체는 사용 사례에 따라 액세스 기간 제한에 대한 내부 정책을 적용할 수 있습니다.  
이 조건 키는 `CreateDelegationRequest` API 작업에서 지원됩니다.  
이 예시에서는 요청된 기간이 7,200초(2시간) 이하인 경우에만 위임 요청을 생성할 수 있습니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "NumericLessThanEquals": {
                    "iam:DelegationDuration": "7200"
                }
            }
        }
    ]
}
```

**iam:NotificationChannel**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
위임 요청 알림을 수신하도록 지정된 Amazon SNS 주제 ARN을 기준으로 액세스를 필터링합니다.  
제품 제공업체는 이 조건 키를 사용하여 CreateDelegationRequest API 직접 호출에서 위임 요청 알림에 사용할 수 있는 SNS 주제를 제한할 수 있습니다. 제품 제공업체가 상태 변경 알림을 수신하고 토큰을 교환하려면 SNS 주제를 지정해야 합니다. 이렇게 하면 제품 제공업체 조직 내의 승인된 채널에만 알림이 전송됩니다.  
이 조건 키는 `CreateDelegationRequest` API 작업에서 지원됩니다.  
이 예시에서는 알림에 특정 SNS 주제를 사용하는 경우에만 위임 요청 생성을 허용합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:NotificationChannel": "arn:aws:sns:us-east-1:123456789012:delegation-notifications"
                }
            }
        }
    ]
}
```

**iam:TemplateArn**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
위임 요청에서 권한을 정의하는 데 사용되는 정책 템플릿 ARN을 기준으로 액세스를 필터링합니다.  
제품 제공업체는 이 조건 키를 사용하여 CreateDelegationRequest API 직접 호출에 사용 가능한 정책 템플릿을 제어할 수 있습니다. 정책 템플릿은 제품 제공업체가 고객 계정에서 요청하는 임시 권한을 정의합니다. 이를 통해 제품 제공업체는 위임 요청을 생성할 때 사용할 수 있는 등록된 정책 템플릿을 제한할 수 있습니다.  
이 조건 키는 `CreateDelegationRequest` API 작업에서 지원됩니다.  
이 예시에서는 위임 요청이 특정 파트너 도메인의 정책 템플릿을 사용하는 경우에만 위임 요청을 생성하도록 허용합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:CreateDelegationRequest",
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "iam:TemplateArn": "arn:aws:iam:::delegation-template/partner_*"
                }
            }
        }
    ]
}
```

**iam:DelegationRequestOwner**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
위임 요청을 소유한 AWS ID 또는 위탁자를 기준으로 액세스를 필터링합니다.  
고객은 이 조건 키를 사용하여 소유권을 기반으로 위임 요청에 대한 작업을 수행할 수 있는 사용자를 제어할 수 있습니다. 위임 요청의 소유자는 위임 요청을 시작하거나 수신한 고객 계정의 AWS ID 또는 위탁자입니다.  
이 조건 키는 다음과 같은 API 작업에서 지원됩니다.  
+ `GetDelegationRequest`
+ `AcceptDelegationRequest`
+ `RejectDelegationRequest`
+ `SendDelegatedToken`
+ `ListDelegationRequests`
+ `UpdateDelegationRequest`
이 예시에서는 사용자가 자신이 소유한 위임 요청만 관리하도록 허용합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetDelegationRequest",
                "iam:AcceptDelegationRequest",
                "iam:RejectDelegationRequest",
                "iam:SendDelegatedToken",
                "iam:UpdateDelegationRequest",
                "iam:ListDelegationRequests"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:DelegationRequestOwner": "${aws:PrincipalArn}"
                }
            }
        }
    ]
}
```

## AWS OIDC 페더레이션에서 사용 가능한 키
<a name="condition-keys-wif"></a>

OIDC 페더레이션을 사용하여 OpenID Connect를 준수하는 ID 제공업체(idP)를 통해 AWS 계정의 IAM OIDC(OpenID Connect) ID 공급자에게 인증된 사용자에게 임시 보안 자격 증명을 제공할 수 있습니다. 이러한 공급자의 예로는 GitHub, Amazon Cognito, Login with Amazon, Google 등이 있습니다. Amazon Elastic Kubernetes Service 워크로드에 부여된 [서비스 계정 토큰](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html#service-account-tokens)뿐만 아니라 자체 IdP의 자격 증명 토큰 및 액세스 토큰도 사용할 수 있습니다.

AWS OIDC 조건 컨텍스트 키를 사용하여 페더레이션 보안 주체가 특정 공급자, 앱 또는 사용자와 연결된 리소스에만 액세스할 수 있도록 정책을 작성할 수 있습니다. 이러한 키는 일반적으로 역할에 대한 신뢰 정책에서 사용됩니다. OIDC 공급자(`token.actions.githubusercontent.com`)의 이름 다음에 클레임(`:aud`)을 사용하여 `token.actions.githubusercontent.com:aud`와 같이 조건 키를 정의합니다.

일부 OIDC 페더레이션 조건 키는 역할 세션에서 리소스 액세스를 승인하는 데 사용할 수 있습니다. **세션에서 사용 가능** 열의 값이 **Yes**인 경우 정책에서 이러한 조건 키를 사용하여 다른 AWS 서비스에서 사용자가 액세스할 수 있는 대상을 정의할 수 있습니다. 세션에서 클레임을 사용할 수 없는 경우 OIDC 조건 컨텍스트 키는 초기 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) 인증을 위한 역할 신뢰 정책에서만 사용할 수 있습니다.

IdP를 선택하여 IdP의 클레임이 AWS의 IAM 조건 컨텍스트 키에 어떻게 매핑되는지 확인합니다. GitHub 및 Google의 키에 대한 자세한 내용은 **기본** 탭에서 확인할 수 있습니다.

------
#### [ Default ]

기본값에는 표준 OIDC 클레임과 해당 클레임이 AWS의 AWS STS 조건 컨텍스트 키에 매핑되는 방식이 나열됩니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다. IdP가 탭 옵션에 나열되지 않은 경우 이 매핑을 사용합니다.

OIDC JWT ID 토큰에서 기본 구현을 사용하는 IdP의 몇 가지 예로는 GitHub Actions 워크플로와 Google이 있습니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| amr | amr | 예 | 
| aud | azp `azp`의 값이 설정되지 않은 경우 `aud` 조건 키가 `aud` 클레임에 매핑됩니다. | 예 | 
| 이메일 | 이메일 | 아니요 | 
| oaud | aud | 아니요 | 
| sub | sub | 예 | 

GitHub에서 OIDC 조건 컨텍스트 키 사용에 대한 자세한 내용은 [GitHub OIDC ID 제공자의 역할 구성](id_roles_create_for-idp_oidc.md#idp_oidc_Create_GitHub) 섹션을 참조하세요. Google `aud` 및 `azp` 필드에 대한 자세한 내용은 [Google ID 플랫폼 OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) 안내서를 참조하세요.

**amr**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다. 이 키는 다수의 값을 갖습니다. 이 말은 정책 내에서 [조건 설정 연산자](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)를 사용하여 테스트한다는 것을 의미합니다.  
**예**: `token.actions.githubusercontent.com:amr`  
인증 방법 참조에는 사용자에 대한 로그인 정보가 포함됩니다. 키에 추가되는 값은 다음과 같습니다.  
+ 사용자 인증 전에는 키에 `unauthenticated` 값만 추가됩니다.
+ 사용자 인증 후에는 키에 `authenticated` 값과 호출 시 사용된 로그인 공급자 이름(`accounts.google.com`)이 추가됩니다.

**aud**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**:   
+ `accounts.google.com:aud`
+ `token.actions.githubusercontent.com:aud`
`aud` 조건 키를 사용하여 대상이 정책에서 지정한 대상과 일치하는지 확인합니다. 동일한 자격 증명 공급자에 대해 aud 키와 함께 sub 키를 사용할 수 있습니다.  
이 조건 키는 다음 토큰 필드에서 설정됩니다.  
+ `azp` 필드가 설정되지 않은 경우 애플리케이션의 OAuth 2.0 Google 클라이언트 ID에 대한 `aud`. `azp` 필드가 설정되면 `aud` 필드가 `accounts.google.com:oaud` 조건 키와 일치합니다.
+ `azp` 필드가 설정된 경우 `azp`. 이러한 경우는 웹 애플리케이션과 Android 앱이 서로 다른 OAuth 2.0 Google 클라이언트 ID를 가지고 있지만 동일한 Google API 프로젝트를 공유하는 하이브리드 앱에서 발생할 수 있습니다.
`accounts.google.com:aud` 조건 키를 사용하여 정책을 작성할 때 앱이 `azp` 필드를 설정하는 하이브리드 앱인지 여부를 알아야 합니다.  
`azp` 필드가 설정되지 않음  
다음 예제 정책은 `azp` 필드를 설정하지 않는 비 하이브리드 앱에 적용됩니다. 이 경우 Google ID 토큰 `aud` 필드 값은 `accounts.google.com:aud` 및 `accounts.google.com:oaud` 조건 키 값과 일치합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Federated": "accounts.google.com"},
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "accounts.google.com:aud": "aud-value",
                    "accounts.google.com:oaud": "aud-value",
                    "accounts.google.com:sub": "sub-value"
                }
            }
        }
    ]
}
```
`azp` 필드 세트  
다음 예제 정책은 `azp` 필드를 설정하는 하이브리드 앱에 적용됩니다. 이 경우 Google ID 토큰 `aud` 필드 값은 `accounts.google.com:oaud` 조건 키 값과 유일하게 일치합니다. `azp` 필드 값은 `accounts.google.com:aud` 조건 키 값과 일치합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Federated": "accounts.google.com"},
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "accounts.google.com:aud": "azp-value",
                    "accounts.google.com:oaud": "aud-value",
                    "accounts.google.com:sub": "sub-value"
                }
            }
        }
    ]
}
```

**이메일**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**: `accounts.google.com:email`  
이 조건 키는 사용자의 이메일 주소를 확인합니다. 이 클레임의 값은 이 계정에 고유하지 않을 수 있으며 시간이 지남에 따라 변경될 수 있으므로 이 값을 사용자 기록을 확인하는 기본 식별자로 사용해서는 안 됩니다.

**oaud**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**: `accounts.google.com:oaud`  
이 키는 이 ID 토큰의 용도인 다른 대상(`aud`)을 지정합니다. 애플리케이션의 OAuth 2.0 클라이언트 ID 중 하나여야 합니다.

**sub**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**:  
+ `accounts.google.com:sub`
+ token.actions.githubusercontent.com:sub
이러한 키를 사용하여 해당 주체가 정책에서 지정한 주체와 일치하는지 확인합니다. 동일한 자격 증명 공급자에 대해 `sub` 키와 함께 `aud` 키를 사용할 수 있습니다.  
다음 역할 신뢰 정책에서 `sub` 조건 키는 역할을 `demo` 이름이 지정된 GitHib 브랜치로 제한합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::111122223333:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:org-name/repo-name:ref:refs/heads/demo"
        }
      }
    }
  ]
}
```

------
#### [ Amazon Cognito ]

이 탭에서는 Amazon Cognito가 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.

Amazon Cognito에서 사용하는 역할의 경우 `cognito-identity.amazonaws.com`과 클레임을 사용하여 키를 정의합니다.

ID 풀 클레임 매핑에 대한 자세한 내용은 *Amazon Cognito 개발자 안내서*의 [Default provider mappings](https://docs.aws.amazon.com/cognito/latest/developerguide/provider-mappings.html)을 참조하세요. 사용자 풀 클레임 매핑에 대한 자세한 내용은 *Amazon Cognito 개발자 안내서*의 [Using the ID token](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html)을 참조하세요.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| amr | amr | 예 | 
| aud | aud | 예 | 
| oaud | aud | 아니요 | 
| sub | sub | 예 | 

**amr**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다. 이 키는 다수의 값을 갖습니다. 이 말은 정책 내에서 [조건 설정 연산자](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)를 사용하여 테스트한다는 것을 의미합니다.  
**예**-`cognito-identity.amazonaws.com:amr`  
인증 방법 참조에는 사용자에 대한 로그인 정보가 포함됩니다. 키에 추가되는 값은 다음과 같습니다.  
+ 사용자 인증 전에는 키에 `unauthenticated` 값만 추가됩니다.
+ 사용자 인증 후에는 키에 `authenticated` 값과 호출 시 사용된 로그인 공급자 이름(`cognito-identity.amazonaws.com`)이 추가됩니다.
한 예로, Amazon Cognito 역할의 신뢰 정책에서는 다음 조건에 따라 사용자의 인증 여부를 테스트합니다.  

```
"Condition": {
  "StringEquals": 
    { "cognito-identity.amazonaws.com:aud": "us-east-2:identity-pool-id" },
  "ForAnyValue:StringLike": 
    { "cognito-identity.amazonaws.com:amr": "unauthenticated" }
}
```

**aud**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`cognito-identity.amazonaws.com:aud`  
사용자를 인증한 사용자 풀 앱 클라이언트입니다. Amazon Cognito는 액세스 토큰 `client_id` 클레임에서 동일한 값을 렌더링합니다.

**oaud**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`cognito-identity.amazonaws.com:oaud`  
사용자를 인증한 사용자 풀 앱 클라이언트입니다. Amazon Cognito는 액세스 토큰 `client_id` 클레임에서 동일한 값을 렌더링합니다.

**sub**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`cognito-identity.amazonaws.com:sub`  
인증된 사용자에 대한 고유 식별자(UUID) 또는 제목입니다. 사용자 풀에서 사용자 이름이 고유하지 않을 수 있습니다. 하위 클레임은 특정 사용자를 식별하는 가장 좋은 방법입니다. 동일한 자격 증명 공급자에 대해 `sub` 키와 함께 `aud` 키를 사용할 수 있습니다.  

```
"Condition": {
         "StringEquals": {
            "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab",
            "cognito-identity.amazonaws.com:sub": [
               "us-east-1:12345678-1234-1234-1234-123456790ab",
               "us-east-1:98765432-1234-1234-1243-123456790ab"
            ]
         }
      }
```

------
#### [ Login with Amazon ]

이 탭에서는 Login with Amazon이 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
|  app\$1id  |  애플리케이션 ID  |  예  | 
|  sub  |  사용자 ID  |  예  | 
|  user\$1id  |  사용자 ID  |  예  | 

**app\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`www.amazon.com:app_id`  
이 키는 다른 자격 증명 공급자가 사용하는 `aud` 필드와 일치하는 대상 컨텍스트를 지정합니다.

**sub**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`www.amazon.com:sub`  
이 키를 사용하여 사용자 ID가 정책에서 지정한 ID와 일치하는지 확인합니다. 동일한 자격 증명 공급자에 대해 `sub ` 키와 함께 `aud` 키를 사용할 수 있습니다.

**user\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`www.amazon.com:user_id`  
이 키는 다른 자격 증명 공급자가 사용하는 `aud` 필드와 일치하는 대상 컨텍스트를 지정합니다. 동일한 자격 증명 공급자에 대해 `user_id` 키와 함께 `id` 키를 사용할 수 있습니다.

------
#### [ Facebook ]

이 탭에서는 Facebook이 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| app\$1id | 애플리케이션 ID | 예 | 
| id | id | 예 | 

**app\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`graph.facebook.com:app_id`  
이 키는 다른 자격 증명 공급자가 사용하는 `aud` 필드와 일치하는 대상 컨텍스트를 검증합니다.

**id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`graph.facebook.com:id`  
이 키를 사용하여 애플리케이션(또는 사이트) ID가 정책에서 지정한 ID와 일치하는지 확인합니다.

------
#### [ GitHub ]

이 탭에서는 GitHub Actions가 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| 액터 | 액터 | 아니요 | 
| actor\$1id | actor\$1id | 아니요 | 
| job\$1workflow\$1ref | job\$1workflow\$1ref | 아니요 | 
| repository | repository | 아니요 | 
| repository\$1id | repository\$1id | 아니요 | 
| workflow | workflow | 아니요 | 
| ref | ref | 아니요 | 
| 환경 | 환경 | 아니요 | 
| enterprise\$1id | enterprise\$1id | 아니요 | 

**액터**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:actor`  
이 키는 워크플로 실행을 시작한 개인 계정을 식별합니다. 특정 액터에 대한 액세스를 제한하는 데 사용하는 데 사용합니다.

**actor\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:actor_id`  
이 키는 워크플로 실행을 시작한 개인 계정의 ID를 확인합니다. 액터 ID는 GitHub에서 생성되며 변경할 수 없습니다.

**job\$1workflow\$1ref**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:job_workflow_ref`  
이 키에는 재사용 가능한 워크플로를 사용하는 작업에 대한 재사용 가능한 워크플로의 참조 경로가 포함됩니다. 특정 워크플로에 대한 액세스를 제한하고 승인된 워크플로만 역할을 수임할 수 있도록 하는 데 사용합니다.

**repository**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:repository`  
이 키는 워크플로가 실행되는 리포지토리를 식별합니다. 특정 GitHub 리포지토리에 대한 액세스를 제한하는 데 사용합니다.

**repository\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:repository_id`  
이 키는 워크플로가 실행되는 리포지토리의 ID를 확인합니다. 리포지토리 ID는 변경할 수 없으며 리포지토리 이름이 바뀌어도 변경되지 않습니다.

**workflow**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:workflow`  
이 키에는 워크플로의 이름이 포함됩니다. 리포지토리 내의 특정 워크플로에 대한 액세스를 제한하는 데 사용합니다.

**ref**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:ref`  
이 키는 워크플로 실행을 트리거한 git ref(브랜치 또는 태그)를 식별합니다. `main` 또는 `production` 브랜치만 허용하는 등 특정 브랜치를 기준으로 액세스를 제한하는 데 사용합니다.

**환경**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:environment`  
이 키에는 작업에서 사용하는 환경의 이름이 포함됩니다. 개발, 스테이징 및 프로덕션 환경에 대한 별도의 권한과 같은 환경 기반 액세스 제어를 구현하는 데 사용합니다.  
신뢰 정책에 환경 클레임이 포함된 경우 GitHub 워크플로에서 환경을 구성하고 제공해야 합니다.

**enterprise\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`token.actions.githubusercontent.com:enterprise_id`  
이 키는 워크플로가 실행 중인 리포지토리가 포함된 엔터프라이즈의 ID를 확인합니다. GitHub Enterprise 조직 내의 리포지토리로 액세스가 제한되게 하는 데 사용합니다.

다음 예제 신뢰 정책은 GitHub OIDC 토큰의 사용자 지정 클레임을 사용하여 역할에 대한 액세스를 제한합니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
            "StringLike": {
                "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
                "token.actions.githubusercontent.com:job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
                "token.actions.githubusercontent.com:repository": "octo-org/octo-repo",
                "token.actions.githubusercontent.com:actor": "octocat",
                "token.actions.githubusercontent.com:ref": "refs/heads/main",
                "token.actions.githubusercontent.com:enterprise_id": "345"
               }
           }
        }
    ]
}
```

------
#### [ Google ]

이 탭에서는 Google이 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| google/organization\$1number | google:organization\$1number | 아니요 | 

**google/organization\$1number**  
[숫자 연산자](reference_policies_elements_condition_operators.md#Conditions_Numeric)를 사용합니다.  
**예**-`accounts.google.com:google/organization_number`  
이 키는 토큰이 특정 Google Cloud 또는 Google Workspace 조직에 속한 Google ID를 나타내는지 확인합니다. 특정 조직의 사용자에 대한 액세스를 제한하여 조직의 ID만 역할을 수임할 수 있도록 하는 데 사용합니다.

다음 예제 신뢰 정책은 `google/organization_number` 클레임을 사용하여 역할에 대한 액세스를 제한합니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Federated": "accounts.google.com"
         },
         "Action": "sts:AssumeRoleWithWebIdentity",
         "Condition": {
            "NumericEquals": {
                "accounts.google.com:google/organization_number": "123456"
               }
           }
        }
    ]
}
```

------
#### [ CircleCI ]

이 탭에서는 CircleCI가 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| oidc.circleci.com/project-id | oidc.circleci.com/project-id | 아니요 | 

**oidc.circleci.com/project-id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`circleci-issuer-url:oidc.circleci.com/project-id`  
이 키는 작업이 실행 중인 CircleCI 프로젝트를 식별합니다. 값은 CircleCI 프로젝트를 고유하게 식별하는 UUID가 포함된 문자열입니다. 특정 CircleCI 프로젝트에 대한 액세스를 제한하는 데 사용합니다.

다음 예제 신뢰 정책은 `oidc.circleci.com/project-id` 클레임을 사용하여 역할에 대한 액세스를 제한합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.circleci.com/org/12345"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.circleci.com/org/12345:aud": "sts.amazonaws.com",
          "oidc.circleci.com/org/12345:oidc.circleci.com/project-id": "76543210-ba98-fedc-3210-edcba0987654"
        }
      }
    }
  ]
}
```

------
#### [ Oracle Cloud Infrastructure (OCI) ]

이 탭에서는 Oracle Cloud Infrastructure가 OIDC 클레임을 AWS의 AWS STS 조건 컨텍스트 키에 매핑하는 방법을 설명합니다. 이러한 키를 사용하여 역할에 대한 액세스를 제어할 수 있습니다. 이렇게 하려면 **AWS STS 조건 키**를 **IdP JWT 클레임** 열의 값과 비교합니다.


| AWS STS 조건 키 | IdP JWT 클레임 | 세션에서 사용 가능 | 
| --- | --- | --- | 
| rpst\$1id | rpst\$1id | 아니요 | 

**rpst\$1id**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
**예**-`oci-issuer-url:rpst_id`  
이 키는 OCI에서 리소스 위탁자를 고유하게 식별합니다. 특정 OCI 리소스 위탁자에 대한 액세스를 제한하는 데 사용합니다. rpst\$1id(리소스 위탁자 세션 토큰 ID)는 OCI 리소스 기반 인증을 위한 안정적인 식별자를 제공합니다.

다음 예제 신뢰 정책은 `rpst_id` 클레임을 사용하여 역할에 대한 액세스를 제한합니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/idcs-abc123ef5678901234abcd.identity.oraclecloud.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "idcs-abc123ef5678901234abcd.identity.oraclecloud.com:aud": "sts.amazonaws.com",
          "idcs-abc123ef5678901234abcd.identity.oraclecloud.com:rpst_id": "your-rpst-id"
        }
      }
    }
  ]
}
```

------

### OIDC 페더레이션에 대한 자세한 내용
<a name="condition-keys-wif-more-info"></a>


+ [Amazon Cognito 사용 설명서](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)
+ [OIDC 페더레이션](id_roles_providers_oidc.md)

## SAML 기반 AWS STS 연동에 사용할 수 있는 키
<a name="condition-keys-saml"></a>

AWS Security Token Service(AWS STS)를 사용하여 [SAML 기반 연동](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html)으로 작업하는 경우 정책에 조건 키를 추가할 수 있습니다.

### SAML 역할 신뢰 정책
<a name="condition-keys-saml_trust-policy"></a>

역할 신뢰 정책에서는 다음과 같은 키를 추가하여 호출자의 역할 위임 가능 여부를 구성할 수 있습니다. `saml:doc`를 제외한 모든 값은 SAML 어설션에서 가져옵니다. 조건에 따라 정책을 생성하거나 편집할 때 목록의 모든 항목을 IAM 콘솔의 시각적 편집기에서 사용할 수 있습니다. `[]`가 표시된 항목은 지정된 유형의 목록을 값으로 가질 수 *있습니다*.

**saml:aud**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
SAML 어설션이 전송되는 엔드포인트 URL입니다. 이 키에 대한 값은 `Audience` 필드가 *아닌* 어설션의 `SAML Recipient` 필드에서 얻습니다.

**saml:commonName[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`commonName` 속성입니다.

**saml:cn[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:doc**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 역할 위임 시 사용한 보안 주체를 나타냅니다. 형식은 *account-ID*/*provider-friendly-name*(예: `123456789012/SAMLProviderName`)을 따릅니다. *account-ID* 값은 [SAML 공급자](id_roles_providers_create_saml.md)가 속한 계정을 참조합니다.

**saml:edupersonaffiliation[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonassurance[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonentitlement[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonnickname[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonorgdn**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonorgunitdn[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonprimaryaffiliation**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonprimaryorgunitdn**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonprincipalname**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersonscopedaffiliation[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:edupersontargetedid[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduPerson` 속성입니다.

**saml:eduorghomepageuri[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:eduorgidentityauthnpolicyuri[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:eduorglegalname[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:eduorgsuperioruri[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:eduorgwhitepagesuri[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `eduOrg` 속성입니다.

**saml:givenName[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`givenName` 속성입니다.

**saml:iss**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
발급자로서 URN으로 표시됩니다.

**saml:mail[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`mail` 속성입니다.

**saml:name[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`name` 속성입니다.

**saml:namequalifier**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
SAML 공급자의 표시 이름을 기준으로 하는 해시 값입니다. 이 값은 다음 값을 순서대로 연결하며 '/' 문자로 구분합니다.  

1. `Issuer` 응답 값(`saml:iss`)

1. `AWS` 계정 ID

1.  IAM에서 SAML 공급자의 표시 이름(ARN의 마지막 부분) 
계정 ID와 SAML 공급자 표시 이름의 연결을 IAM 정책에서 `saml:doc` 키로 사용할 수 있습니다. 자세한 내용은 [SAML 기반 페더레이션에서 사용자를 고유하게 식별](id_roles_providers_saml.md#CreatingSAML-userid) 섹션을 참조하세요.

**saml:organizationStatus[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `organizationStatus` 속성입니다.

**saml:primaryGroupSID[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`primaryGroupSID` 속성입니다.

**saml:sub**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이것은 클레임의 주체로서 여기에는 조직 내 사용자 개개인을 식별할 수 있는 고유 값이 포함됩니다(예: `_cbb88bf52c2510eabe00c1642d4643f41430fe25e3`).

**saml:sub\$1type**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `persistent`, `transient` 값을 갖거나 SAML 어설션에서 사용되는 `Format` 및 `Subject` 요소의 전체 `NameID` URI로 구성될 수 있습니다. `persistent`의 값은 `saml:sub`의 값이 세션 간 사용자에서도 동일하다는 것을 나타냅니다. 값이 `transient`인 경우 각 세션마다 사용자의 `saml:sub` 값이 다릅니다. `NameID` 요소의 `Format` 속성에 대한 자세한 내용은 [인증 응답에 대한 SAML 어설션 구성](id_roles_providers_create_saml_assertions.md) 섹션을 참조하세요.

**saml:surname[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`surnameuid` 속성입니다.

**saml:uid[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
`uid` 속성입니다.

**saml:x500UniqueIdentifier[]**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키는 `x500UniqueIdentifier` 속성입니다.

`eduPerson` 및 `eduOrg` 속성에 관한 일반 정보는 [REFEDS Wiki 웹사이트](https://wiki.refeds.org/display/STAN/eduPerson)를 참조하세요. `eduPerson` 속성 목록은 [eduPerson Object Class Specification(201602)](https://software.internet2.edu/eduperson/internet2-mace-dir-eduperson-201602.html)을 참조하세요.

형식이 목록인 조건 키에는 다수의 값이 추가될 수 있습니다. 목록 값 정책에서 조건을 생성하려면 [설정 연산자](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys)(`ForAllValues`, `ForAnyValue`)를 사용하면 됩니다. 예를 들어, 소속이 "faculty", "staff"("student" 제외)인 사용자를 모두 허용하려면 다음과 같은 조건을 사용할 수 있습니다.

```
"Condition": {
   "ForAllValues:StringLike": {
     "saml:edupersonaffiliation":[ "faculty", "staff"] 
   }
}
```

## 교차 서비스 SAML 기반 AWS STS 페더레이션 컨텍스트 키
<a name="cross-condition-keys-saml"></a>

일부 SAML 기반 페더레이션 조건 키는 후속 요청에서 다른 서비스 및 `AssumeRole` 호출의 AWS 작업을 승인하는 데 사용할 수 있습니다. 다음은 페더레이션 보안 주체가 다른 역할을 맡을 때 역할 신뢰 정책에서, 그리고 다른 AWS 서비스의 리소스 정책에서 페더레이션 보안 주체의 리소스 액세스를 승인하는 데 사용할 수 있는 조건 키입니다. 이러한 키 사용에 대한 자세한 내용은 [SAML 2.0 기반 페더레이션에 대하여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html#CreatingSAML-userid) 단원을 참조하세요.

설명을 보려면 조건 키를 선택합니다.
+ [saml:namequalifier](#ck_saml-namequalifier)
+ [saml:sub](#ck_saml-sub)
+ [saml:sub_type](#ck_saml-subtype)

**참고**  
초기 외부 ID 제공업체(IdP) 인증 응답 이후에는 다른 SAML 기반 페더레이션 조건 키를 사용할 수 없습니다.

## AWS STS에서 사용할 수 있는 키
<a name="condition-keys-sts"></a>

AWS Security Token Service(AWS STS) 작업을 사용하여 수임한 역할에 대한 IAM 역할 신뢰 정책에서는 다음 조건 키를 사용할 수 있습니다.

**saml:sub**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이것은 클레임의 주체로서 여기에는 조직 내 사용자 개개인을 식별할 수 있는 고유 값이 포함됩니다(예: `_cbb88bf52c2510eabe00c1642d4643f41430fe25e3`).

**sts:AWSServiceName**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키를 사용하여 보유자 토큰을 사용할 수 있는 서비스를 지정합니다. 정책에서 이 조건 키를 사용할 때 서비스 보안 주체를 사용하여 서비스를 지정합니다. 서비스 보안 주체는 정책의 `Principal` 요소에 지정할 수 있는 서비스 이름입니다. 예를 들어 `codeartifact.amazonaws.com`은 AWS CodeArtifact 서비스 보안 주체입니다.  
**가용성** - 이 키는 보유자 토큰을 가져오는 요청에 존재합니다. 보유자 토큰을 얻기 위해 AWS STS를 직접 호출할 수 없습니다. 다른 서비스에서 일부 작업을 수행하면 서비스가 사용자를 대신하여 보유자 토큰을 요청합니다.  
일부 AWS 서비스의 경우 프로그래밍 방식으로 리소스에 액세스하기 전에 AWS STS 서비스 보유자 토큰을 가져올 수 있는 권한이 있어야 합니다. 예를 들어 AWS CodeArtifact에서는 보안 주체가 일부 작업을 수행하기 위해 보유자 토큰을 사용해야 합니다. 이 `aws codeartifact get-authorization-token` 명령은 보유자 토큰을 반환합니다. 그런 다음 보유자 토큰을 사용하여 AWS CodeArtifact 작업을 수행 할 수 있습니다. 보유자 토큰에 대한 자세한 내용은 [서비스 보유자 토큰](id_credentials_bearer.md) 섹션을 참조하세요.  
이 조건 키를 사용하여 보안 주체가 특정 서비스에 사용할 보유자 토큰을 가져오도록 허용할 수 있습니다.

**sts:DurationSeconds**  
[숫자 연산자](reference_policies_elements_condition_operators.md#Conditions_Numeric)를 사용합니다.  
이 키를 사용하여 위탁자가 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API에서 AWS AWS STS 보유자 토큰 또는 JSON 웹 토큰을 가져올 때 사용할 수 있는 지속 시간(초)을 지정합니다.  
**가용성** - 이 키는 GetWebIdentityToken API에서 보유자 토큰 또는 JSON 웹 토큰을 가져오는 요청에 있습니다. 보유자 토큰을 얻기 위해 AWS STS를 직접 호출할 수 없습니다. 다른 서비스에서 일부 작업을 수행하면 서비스가 사용자를 대신하여 보유자 토큰을 요청합니다. 이 키는 AWS STS assume-role 작업에 적용되지 않습니다.  
일부 AWS 서비스의 경우 프로그래밍 방식으로 리소스에 액세스하기 전에 AWS STS 서비스 보유자 토큰을 가져올 수 있는 권한이 있어야 합니다. 예를 들어 AWS CodeArtifact에서는 보안 주체가 일부 작업을 수행하기 위해 보유자 토큰을 사용해야 합니다. 이 `aws codeartifact get-authorization-token` 명령은 보유자 토큰을 반환합니다. 그런 다음 보유자 토큰을 사용하여 AWS CodeArtifact 작업을 수행 할 수 있습니다. 보유자 토큰에 대한 자세한 내용은 [서비스 보유자 토큰](id_credentials_bearer.md) 섹션을 참조하세요.

**sts:IdentityTokenAudience**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키를 사용하여 IAM 위탁자가 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API를 사용하여 JSON 웹 토큰(JWT)을 요청할 수 있는 대상을 지정합니다. IAM 정책에 이 조건 키가 있는 경우 IAM 위탁자는 정책에 지정된 대상에 대해서만 토큰을 요청할 수 있습니다. 외부 서비스는 JSON 웹 토큰의 대상(‘aud’) 클레임을 검증하여 토큰이 의도한 것인지 확인합니다.  
**가용성** - 이 키는 외부 서비스 인증을 위해 JSON 웹 토큰(JWT)을 가져오는 데 사용되는 GetWebIdentityToken API에 대한 요청에 표시됩니다.  
정책에서 이 조건 키를 사용하는 경우 의도한 수신자의 식별자와 일치하는 대상 값을 지정합니다(예: https://api.example.com).  
다음 예시 정책은 위탁자가 지정된 외부 서비스에 대한 토큰을 요청하도록 허용합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "sts:IdentityTokenAudience": [
                        "https://api2.example.com",
                        "https://api1.example.com"
                    ]
                }
            }
        }
    ]
}
```

**sts:SigningAlgorithm**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키를 사용하여 AWS AWS STS가 [GetWebIdentityToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetWebIdentityToken.html) API에서 생성된 JSON 웹 토큰(JWT)에 서명하는 데 사용하는 암호화 알고리즘을 지정합니다. 정책에서 이 조건 키를 사용하는 경우 ES384(P-384 곡선 및 SHA-384를 사용하는 ECDSA) 또는 RS256(SHA-256을 사용하는 RSA)을 지정합니다.  
**가용성** - 이 키는 외부 서비스 인증을 위해 JSON 웹 토큰(JWT)을 가져오는 데 사용되는 GetWebIdentityToken API에 대한 요청에 표시됩니다.  
이 조건 키를 사용하여 보안 요구 사항이나 통합하는 외부 서비스와 호환되는 서명 알고리즘을 사용하여 IAM 위탁자가 토큰을 요청하도록 할 수 있습니다. ES384는 최적의 보안 및 성능을 제공하고, RS256은 ECDSA를 지원하지 않는 시스템과 더 광범위한 호환성을 제공합니다.  
다음 예시 정책은 위탁자가 ES384 서명 알고리즘을 사용하도록 요구합니다.  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:GetWebIdentityToken",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "sts:SigningAlgorithm": "ES384"
                }
            }
        }
    ]
}
```

**sts:ExternalId**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
IAM 역할을 수임할 때 보안 주체가 특정 식별자를 제공하도록 요구하려면 이 키를 사용합니다.  
**가용성** - 이 키는 보안 주체가 AWS CLI 또는 AWS API를 사용하여 역할을 수임하는 동안 외부 ID를 제공할 때 요청에 존재합니다.  
다른 계정에서 역할을 맡을 때 필요할 수도 있는 고유한 식별자. 역할이 속한 계정의 관리자가 외부 ID를 제공한 경우에는 해당 값을 `ExternalId` 파라미터에 제공하세요. 이 값은 암호 또는 계정 번호와 같은 어떤 문자열도 가능합니다. 외부 ID의 주된 기능은 혼동된 대리자 문제를 해결하고 방지하는 것입니다. 외부 ID와 혼동된 대리자 문제에 대해 자세히 알아보려면 [타사가 소유한 AWS 계정에 액세스](id_roles_common-scenarios_third-party.md) 섹션을 참조하세요.  
`ExternalId` 값은 최소 2자, 최대 1,224자여야 합니다. 이 값은 공백 없이 영숫자여야 합니다. 이 값은 더하기(\$1), 등호(=), 쉼표(,) 마침표(.), 기호(@), 콜론(:), 슬래시(/) 및 하이픈(-)과 같은 기호도 포함할 수 있습니다.

**sts:RequestContext/*context-key***  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키를 사용하여 요청에 전달된 신뢰할 수 있는 토큰 발급자 서명 컨텍스트 어설션에 포함된 세션 컨텍스트 키-값 페어를 역할 신뢰 정책에 지정된 컨텍스트 키-값과 비교합니다.  
**가용성** - 이 키는 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 사용해 역할을 수임하는 동안 `ProvidedContexts` 요청 파라미터에 컨텍스트 어설션이 제공되면 요청에 표시됩니다.  
이 컨텍스트 키의 형식은 `"sts:RequestContext/context-key":"context-value"`와 같으며 여기서 `context-key` 및 `context-value`는 컨텍스트 키-값 페어입니다. 요청에 전달된 서명된 컨텍스트 어설션에 여러 컨텍스트 키가 포함된 경우 각 키-값 페어에 대해 하나의 컨텍스트 키가 있습니다. 보안 주체가 결과 세션 토큰 내에서 컨텍스트 키를 설정할 수 있도록 하려면 역할 신뢰 정책에서 `sts:SetContext` 작업에 대한 권한을 부여해야 합니다. 이 키와 함께 사용할 수 있는 지원되는 IAM Identity Center 컨텍스트 키에 대한 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [IAM Identity Center의 AWS STS 조건 키](https://docs.aws.amazon.com/singlesignon/latest/userguide/condition-context-keys-sts-idc.html)를 참조하세요.  
역할 신뢰 정책에서 이 키를 사용하여 역할을 수임할 때 사용자 또는 사용자 특성에 따라 세분화된 액세스 제어를 적용할 수 있습니다. 역할이 위임되면 역할 수임 요청에서 컨텍스트 제공자가 설정한 세션 컨텍스트 키-값 페어를 포함하는 `AdditionalEventData` 속성 내 AWS CloudTrail 로그에 활동이 나타납니다. 이렇게 하면 여러 보안 주체가 한 역할을 사용할 때 관리자가 역할 세션 간을 구분하는 것이 쉬워집니다. 키-값 페어는 AWS CloudTrail 또는 AWS STS가 아닌 지정된 컨텍스트 제공자가 설정합니다. 이를 통해 컨텍스트 제공자는 CloudTrail 로그 및 세션 정보에 포함되는 컨텍스트를 제어할 수 있습니다.

**sts:RequestContextProviders**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
이 키를 사용하여 요청의 컨텍스트 제공자 ARN을 역할 신뢰 정책에 지정된 컨텍스트 제공자 ARN과 비교할 수 있습니다.  
**가용성** - 이 키는 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 사용해 역할을 수임하는 동안 `ProvidedContexts` 요청 파라미터에 컨텍스트 어설션이 제공되면 요청에 표시됩니다.  
다음 예제 조건은 요청에 전달된 컨텍스트 제공자 ARN이 역할 신뢰 정책 조건에 지정된 ARN과 일치하는지 확인합니다. 누락된 컨텍스트 키 또는 값이 비어 있는 컨텍스트 키가 true로 평가되지 않도록 `ForAllValues`를 사용하여 null 검사를 추가하는 것이 좋습니다. 자세한 내용은 [조건 키의 존재를 확인하는 조건 연산자](reference_policies_elements_condition_operators.md#Conditions_Null)을 참조하세요.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Action": "sts:SetContext",
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
      "ForAllValues:ArnEquals": {
        "sts:RequestContextProviders": [
          "arn:aws:iam::aws:contextProvider/IdentityCenter"
        ]
      },
      "Null": {
        "sts:RequestContextProviders": "false"
      }
    }
  }
}
```

**sts:RoleSessionName**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
보안 주체가 역할을 수임할 때 지정하는 세션 이름을 정책에 지정된 값과 비교하려면 이 키를 사용합니다.  
**가용성** - 이 키는 보안 주체가 AWS Management Console, assume-role CLI 명령 또는 AWS STS `AssumeRole` API 작업을 사용하여 역할을 수임할 때 요청에 존재합니다.  
역할 신뢰 정책에서 이 키를 사용하여 사용자가 역할을 수임할 때 특정 세션 이름을 지정하도록 요구할 수 있습니다. 예를 들어 IAM 사용자가 자신의 사용자 이름을 세션 이름으로 지정하도록 요구할 수 있습니다. IAM 사용자가 역할을 수임하면 사용자 이름과 일치하는 세션 이름과 함께 [AWS CloudTrail 로그](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)에 활동이 나타납니다. 이렇게 하면 여러 보안 주체가 한 역할을 사용할 때 관리자가 역할 세션 간을 구분하는 것이 쉬워집니다.  
다음 역할 신뢰 정책에서는 `111122223333` 계정의 IAM 사용자가 역할을 수임할 때 IAM 사용자 이름을 세션 이름으로 지정하도록 요구합니다. 이 요구 사항은 조건 키의 `aws:username` [조건 변수](reference_policies_variables.md)를 사용하여 적용됩니다. 이 정책을 통해 IAM 사용자는 정책에 연결된 역할을 수임할 수 있습니다. 이 정책은 임시 자격 증명을 사용하는 사용자가 역할을 수임하는 것을 허용하지 않습니다. `username` 변수는 IAM 사용자에만 사용되기 때문입니다.  
단일 값 조건 키를 [변수](reference_policies_variables.md)로 사용할 수 있습니다. 다중 값 조건 키는 변수로 사용할 수 없습니다.  
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RoleTrustPolicyRequireUsernameForSessionName",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
            "Condition": {
                "StringLike": {"sts:RoleSessionName": "prefix-${aws:username}"}
            }
        }
    ]
}
```
관리자가 작업에 대한 AWS CloudTrail 로그를 볼 때 세션 이름을 계정의 사용자 이름과 비교할 수 있습니다. 다음 예제에서는 `matjac`이라는 사용자가 `MateoRole`이라는 역할을 사용하여 작업을 수행했습니다. 관리자는 사용자 이름이 `matjac`인 Mateo Jackson에게 연락할 수 있습니다.  

```
    "assumedRoleUser": {
        "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:matjac",
        "arn": "arn:aws:sts::111122223333:assumed-role/MateoRole/matjac"
    }
```
[역할을 사용한 크로스 계정 액세스](id_roles_common-scenarios_aws-accounts.md)를 허용하는 경우 한 계정의 사용자가 다른 계정의 역할을 수임할 수 있습니다. CloudTrail에 나열되어 있는 수임된 역할 사용자의 ARN에는 *해당 역할이 있는* 계정이 포함됩니다. 역할을 수임한 사용자의 계정은 포함되지 않습니다. 사용자는 계정 내에서만 고유합니다. 따라서 관리하는 계정의 사용자가 수임하는 역할에 대해서만 CloudTrail 로그를 확인하는 데 이 방법을 사용하는 것이 좋습니다. 사용자는 여러 계정에서 동일한 사용자 이름을 사용할 수 있습니다.

**sts:SourceIdentity**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
보안 주체가 역할을 수임할 때 지정하는 소스 자격 증명을 정책에 지정된 값과 비교하려면 이 키를 사용합니다.  
**가용성** - AWS STS assume-role CLI 명령 또는 AWS STS `AssumeRole`API 작업을 사용해 역할을 수임하는 동안 보안 주체가 소스 자격 증명을 제공할 때 이 키가 요청에 표시됩니다.  
역할 신뢰 정책에서 이 키를 사용하여 사용자가 역할을 수임할 때 특정 소스 자격 증명을 설정하도록 요구할 수 있습니다. 예를 들어 인력이나 페더레이션 자격 증명에게 소스 자격 증명에 대한 값을 지정하도록 요구할 수 있습니다. 자격 증명 공급자(IdP)는 사용자 이름 또는 전자 메일과 같이 사용자와 연결된 특성 중 하나를 소스 자격 증명으로 사용하도록 구성할 수 있습니다. 그런 다음 IdP가 소스 자격 증명을 어설션 내의 속성으로 전달하거나 클레임하여 AWS로 전송합니다. 소스 자격 증명 속성의 값은 역할을 수임하는 사용자 또는 애플리케이션을 식별합니다.  
사용자가 역할을 수임하면 활동이 설정된 소스 자격 증명 값과 함께 [AWS CloudTrail 로그](cloudtrail-integration.md#cloudtrail-integration_signin-tempcreds)에 나타납니다. 이를 통해 관리자는 AWS의 역할로 누가 어떤 작업을 수행했는지 쉽게 확인할 수 있습니다. 자격 증명이 소스 자격 증명을 설정하도록 허용하는 `sts:SetSourceIdentity` 작업에 대한 사용 권한을 부여 해야 합니다.  
[`sts:RoleSessionName`](#ck_rolesessionname)과 달리 소스 자격 증명을 설정한 후에는 값을 변경할 수 없습니다. 이것은 소스 자격 증명에 의해 역할에서 수행되는 모든 작업의 요청 컨텍스트에 있습니다. 세션 자격 증명을 사용하여 다른 역할을 수임하는 경우 값이 후속 역할 세션에 유지됩니다. 한 역할에서 다른 역할을 맡는 것을 [역할 체인](id_roles.md#iam-term-role-chaining)이라고 합니다.  
[`aws:SourceIdentity`](reference_policies_condition-keys.md#condition-keys-sourceidentity) 전역 조건 키를 사용하여 후속 요청에서 소스 자격 증명 값을 기준으로 AWS 리소스에 대한 액세스 권한을 추가로 제어할 수 있습니다.  
다음 역할 신뢰 정책은 IAM 사용자 `AdminUser`가 계정 `111122223333`의 역할을 수임하도록 허용합니다. 또한 소스 자격 증명 집합이 `DiegoRamirez`로 설정된 경우에 한해 `AdminUser`가 소스 자격 증명을 설정하는 권한을 부여합니다.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAdminUserAssumeRole",
            "Effect": "Allow",
            "Principal": {"AWS": " arn:aws:iam::111122223333:user/AdminUser"},
            "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity"
            ],
            "Condition": {
                "StringEquals": {"sts:SourceIdentity": "DiegoRamirez"}
            }
        }
    ]
}
```
소스 자격 증명 정보에 대한 자세한 내용은 [위임된 역할로 수행한 작업 모니터링 및 제어](id_credentials_temp_control-access_monitor.md) 섹션을 참조하세요.

**sts:TaskPolicyArn**  
[ARN 연산자](reference_policies_elements_condition_operators.md#Conditions_ARN)를 사용합니다.  
이 키를 사용하여 [sts:AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html) 요청의 정책 ARN을 정책에 지정된 정책 ARN과 비교합니다.  
**가용성** - 이 키는 [sts:AssumeRoot](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoot.html)를 사용하여 요청할 때 요청에 존재합니다.  
관리자는 IAM 정책에서 이 조건 키를 사용하여 루트 자격 증명을 수임할 때 관리 계정 또는 위임된 관리자 계정 내의 특정 역할 또는 사용자가 특정 작업을 수행하지 못하도록 제한할 수 있습니다. 자세한 내용은 [AWS Organizations 멤버 계정에서 권한 있는 태스크 수행](id_root-user-privileged-task.md) 섹션을 참조하세요.

**sts:TransitiveTagKeys**  
[문자열 연산자](reference_policies_elements_condition_operators.md#Conditions_String)를 사용합니다.  
이 키를 사용하여 요청의 전이적 세션 태그 키와 정책에 지정된 전이적 세션 태그 키를 비교합니다.  
**가용성** - 이 키는 임시 보안 자격 증명을 사용하여 요청을 수행할 때 요청에 존재합니다. 여기에는 모든 assume-role 작업 또는 `GetFederationToken` 작업을 사용해 생성된 자격 증명이 포함됩니다.  
임시 보안 자격 증명을 사용하여 요청하면 [요청 컨텍스트](reference_policies_elements_condition.md#AccessPolicyLanguage_RequestContext)에 `aws:PrincipalTag` 컨텍스트 키가 포함됩니다. 이 키에는 [세션 태그](id_session-tags.md), [전이적 세션 태그](id_session-tags.md#id_session-tags_role-chaining) 및 역할 태그 목록이 포함됩니다. 전이적 세션 태그를 사용하면 세션 자격 증명을 사용하여 다른 역할을 맡은 경우 모든 후속 세션에서 유지됩니다. 한 역할에서 다른 역할을 맡는 것을 [역할 체인](id_roles.md#iam-term-role-chaining)이라고 합니다.  
정책에서 이 조건 키를 사용하여 역할을 맡거나 사용자를 연동할 때 특정 세션 태그를 전이적으로 설정하도록 요구할 수 있습니다.

# AWS 서비스에 사용되는 작업, 리소스 및 조건 키
<a name="reference_policies_actions-resources-contextkeys"></a>

각 AWS 서비스는 IAM 정책에서 사용할 수 있는 작업, 리소스 및 조건 컨텍스트 키를 정의할 수 있습니다. AWS 서비스와 해당 작업, 리소스 및 조건 컨텍스트 키의 전체 목록은 *서비스 승인 참조*의 [작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)를 참조하세요.