

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# KMS 키 액세스 및 권한
<a name="control-access"></a>

를 사용하려면 AWS KMS가 요청을 인증하는 데 사용할 AWS 수 있는 자격 증명이 있어야 합니다. 자격 증명에는 AWS 리소스 AWS KMS keys 및 [별칭](kms-alias.md)에 액세스할 수 있는 권한이 포함되어야 합니다. 명시적으로 제공되고 거부되지 않는 한 보안 AWS 주체는 KMS 키에 대한 권한이 없습니다. KMS 키를 사용하거나 관리하기 위한 묵시적 권한이나 자동 권한은 없습니다.

KMS 키에 대한 액세스를 제어하는 데 다음 정책 메커니즘을 사용할 수 있습니다.
+ [키 정책](key-policies.md) - 모든 KMS 키에는 키 정책이 있습니다. 키 정책은 KMS 키에 대한 액세스를 제어하는 기본적인 방법입니다. 키 정책만 사용하여 액세스를 제어할 수 있습니다. 즉 KMS 키에 대한 전체 액세스 범위가 단일 문서(키 정책)에 정의됩니다. 키 정책 사용에 대한 자세한 내용은 [키 정책](key-policies.md) 섹션을 참조하세요.
+ [IAM 정책](iam-policies.md) – 키 정책과 함께 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하는 권한을 부여할 수 있습니다. 이러한 방식으로 액세스를 제어하면 IAM에서 IAM 자격 증명에 대한 모든 권한을 관리할 수 있습니다. IAM 정책을 사용하여 KMS 키에 대한 액세스를 허용하려면 키 정책에서 명시적으로 허용해야 합니다. IAM 정책 사용에 대한 자세한 내용은 [IAM 정책](iam-policies.md) 섹션을 참조하세요.
+ [권한 부여](grants.md) – 키 정책 및 IAM 정책과 함께 권한 부여를 사용하여 KMS 키에 대한 액세스를 허용할 수 있습니다. 이와 같이 액세스를 제어하면 키 정책에서 KMS 키에 대한 액세스를 허용하고 ID가 다른 사람에게 액세스를 위임하도록 허용할 수 있습니다. 권한 부여 사용에 대한 자세한 내용은 [의 권한 부여 AWS KMS](grants.md)를 참조하세요.

## KMS 키 정책
<a name="intro-key-policy"></a>

 AWS KMS 리소스에 대한 액세스를 관리하는 기본 방법은 *정책을* 사용하는 것입니다. 정책은 어떤 보안 주체가 어떤 리소스에 액세스 할 수 있는지를 설명하는 문서입니다. IAM 자격 증명에 연결된 정책을 *자격 증명 기반 정책*(또는 *IAM 정책*)이라고 하고, 다른 종류의 리소스에 연결된 정책을 *리소스 정책*이라고 합니다. KMS 키에 대한 AWS KMS 리소스 정책을 *키 정책*이라고 합니다.

모든 KMS 키에는 키 정책이 있습니다. 제공하지 않으면에서 자동으로 AWS KMS 생성합니다. 에서 AWS KMS 사용하는 [기본 키 정책은](key-policy-default.md) AWS KMS 콘솔에서 키를 생성하는지 아니면 AWS KMS API를 사용하는지에 따라 다릅니다. 조직의 [최소 권한 요구 사항](least-privilege.md)에 맞게 기본 키 정책을 편집하는 것이 좋습니다.

키와 IAM 보안 주체가 동일한 AWS 계정에 있는 경우 키 정책만 사용하여 액세스를 제어할 수 있습니다. 즉, KMS 키에 대한 전체 액세스 범위가 단일 문서(키 정책)에 정의되어 있습니다. 그러나 한 계정의 호출자가 다른 계정의 키에 액세스해야 하는 경우 키 정책만 사용하여 액세스 권한을 부여할 수 없습니다. 교차 계정 시나리오에서는 호출자가 API를 직접 호출할 수 있도록 명시적으로 허용하는 IAM 정책을 호출자의 사용자 또는 역할에 연결해야 합니다.

키 정책과 함께 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하는 권한을 부여할 수 있습니다. IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하려면 키 정책에서 계정에 IAM 정책 사용 권한을 부여해야 합니다. [IAM 정책을 활성화하는 키 정책 문](key-policy-default.md#key-policy-default-allow-root-enable-iam)을 지정하거나 키 정책에서 [허용되는 위탁자를 명시적으로 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)할 수 있습니다.

정책을 작성할 때는 다음 작업을 수행할 수 있는 사용자를 제한하는 강력한 제어 기능이 있어야 합니다.
+ IAM 및 KMS 키 정책 업데이트, 생성 및 삭제
+ 사용자, 역할 및 그룹에서 IAM 정책 연결 및 분리
+ KMS 키 정책 연결 및 KMS 키에서 키 정책 분리

## KMS 키 권한 부여
<a name="intro-kms-grants"></a>

IAM 및 키 정책 외에도는 [권한 부여](grants.md)를 AWS KMS 지원합니다. 권한 부여는 권한을 위임하는 유연하고 강력한 방법을 제공합니다. 권한 부여를 사용하여 계정 또는 다른 AWS 계정의 IAM 보안 주체에게 시간 제한 KMS 키 액세스 권한을 부여할 수 있습니다 AWS . 정책이 생성되는 시점에 위탁자의 이름을 모르거나 액세스가 필요한 위탁자가 자주 변경되는 경우 시간 제한이 있는 액세스를 발급하는 것이 좋습니다. [피부여자 위탁자](grants.md#terms-grantee-principal)는 KMS 키와 동일한 계정 또는 다른 계정에 있을 수 있습니다. 위탁자 키와 KMS 키가 서로 다른 계정에 있는 경우 권한 부여 외에 IAM 정책을 지정해야 합니다. API를 직접 호출하여 권한 부여를 생성하고 더 이상 필요하지 않을 때 권한 부여를 사용 중지하거나 취소해야 하기 때문에 권한 부여에는 추가 관리가 필요합니다.

# 의 키 정책 AWS KMS
<a name="key-policies"></a>

키 정책은에 대한 리소스 정책입니다 AWS KMS key. KMS 키에 대한 액세스를 제어하는 기본 방법입니다. 모든 KMS 키에는 단일 키 정책이 요구되고, 키 정책에 따라 KMS 키의 사용 권한 보유자와 사용 방법이 결정됩니다. KMS 키에 대한 액세스는 [IAM 정책](iam-policies.md) 및 [권한 부여](grants.md)를 사용하여 제어할 수도 있지만 모든 KMS 키에는 키 정책이 필요합니다.

계정 루트 사용자 또는 키 생성자를 포함한 보안 AWS 주체는 키 정책, IAM 정책 또는 권한 부여에서 명시적으로 허용되거나 거부되지 않는 한 KMS 키에 대한 권한이 없습니다.

키 정책에서 명시적으로 허용하는 경우를 제외하고, IAM 정책을 사용하여 KMS 키에 대한 액세스를 *허용*할 수는 없습니다. 키 정책의 권한이 없으면 IAM 정책으로 권한을 허용하더라도 효과가 없습니다. (키 정책의 권한이 없어도 IAM 정책으로 KMS 키에 대한 권한 *거부*는 가능). 기본 키 정책은 IAM 정책을 활성화합니다. 키 정책에서 IAM 정책을 활성화하려면 [에 대한 액세스 허용 AWS 계정 및 IAM 정책 활성화](key-policy-default.md#key-policy-default-allow-root-enable-iam)에 기재된 정책을 추가하시기 바랍니다

글로벌 IAM 정책과 달리 키 정책은 리전에 따라 다릅니다. 키 정책은 동일 리전의 KMS 키에 대한 액세스만 제어하고, 다른 리전의 KMS 키에는 영향을 주지 않습니다.

**Topics**
+ [키 정책 생성](key-policy-overview.md)
+ [기본 키 정책](key-policy-default.md)
+ [키 정책 보기](key-policy-viewing.md)
+ [키 정책 변경](key-policy-modifying.md)
+ [AWS 서비스에 대한 권한](key-policy-services.md)

# 키 정책 생성
<a name="key-policy-overview"></a>

 AWS KMS 콘솔에서 또는 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html), [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html), [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)와 같은 AWS KMS API 작업을 사용하여 키 정책을 생성하고 관리할 수 있습니다.

 AWS KMS 콘솔에서 KMS 키를 생성하면 콘솔에서 [콘솔의 기본 키 정책을 기반으로 키 정책을 생성하는 단계를 안내합니다](key-policy-default.md). `CreateKey` 또는 `ReplicateKey` API를 사용할 경우, 키 정책을 지정하지 않으면 이 API가 [프로그래밍 방식으로 생성된 키에 대한 기본 키 정책](key-policy-default.md)을 적용합니다. `PutKeyPolicy` API를 사용하는 경우 키 정책을 지정해야 합니다.

각 정책 문서에는 하나 이상의 정책 문이 포함될 수 있습니다. 다음은 정책 문이 하나 포함된 유효한 키 정책 문서를 나타낸 예제입니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DescribePolicyStatement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/Alice"
      },
      "Action": "kms:DescribeKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:KeySpec": "SYMMETRIC_DEFAULT"
        }
      }
    }
  ]
}
```

------

**Topics**
+ [키 정책 형식](#key-policy-format)
+ [키 정책의 요소](#key-policy-elements)
+ [예제 키 정책](#key-policy-example)

## 키 정책 형식
<a name="key-policy-format"></a>

키 정책 문서는 다음 규칙을 준수해야 합니다.
+ 최대 32KB(32,768바이트)
+ 키 정책 문의 `Sid` 요소에는 공백이 포함될 수 있습니다. (IAM 정책 문서의 `Sid` 요소에는 공백이 금지됩니다.)

키 정책 문서에는 다음 문자만 포함될 수 있습니다.
+ 인쇄 가능한 ASCII 문자
+ Basic Latin 및 Latin-1 Supplement 문자 집합의 인쇄 가능한 문자
+ 탭(`\u0009`), 줄 바꿈(`\u000A`) 및 캐리지 리턴(`\u000D`) 특수 문자

## 키 정책의 요소
<a name="key-policy-elements"></a>

키 정책 문서에는 다음 요소가 있어야 합니다.

**버전**  
키 정책 문서 버전을 지정합니다. 버전을 `2012-10-17`(최신 버전)로 설정합니다.

**명령**  
Statement - 정책 문을 포함합니다. 키 정책 문서에는 하나 이상의 문이 있어야 합니다.  
각 키 정책 문은 최대 6개의 요소로 구성될 수 있습니다. `Effect`, `Principal`, `Action` 및 `Resource` 요소는 필수입니다.    
**Sid **  
(선택 사항) 문 식별자(`Sid`)로서 문 설명에 사용할 수 있는 임의 문자열입니다. 키 정책의 `Sid`에는 공백이 포함될 수 있습니다. (IAM 정책 `Sid` 요소에는 공백을 포함할 수 없습니다.)  
**Effect**  
(필수) 정책 문에서 권한을 허용할지 거부할지를 결정합니다. 유효한 값은 `Allow` 또는 `Deny`입니다. KMS 키에 대한 액세스 권한을 명시적으로 허용하지 않으면 액세스가 암시적으로 거부됩니다. KMS 키에 대한 액세스를 명시적으로 거부할 수도 있습니다. 다른 정책에서 액세스 권한을 허용하더라도 사용자가 액세스할 수 없도록 하려고 할 때 이러한 작업을 수행할 수 있습니다.  
**Principal**  
(필수) [보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#Principal_specifying)는 정책 설명에 지정된 권한을 갖는 자격 증명입니다. 키 정책에서 AWS 계정 IAM 사용자, IAM 역할 및 일부 AWS 서비스를 보안 주체로 지정할 수 있습니다. IAM [사용자 그룹](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 어떤 정책 유형에서도 유효한 보안 주체가 아닙니다.  
`"AWS": "*"`와 같은 별표 값은 모든 계정의 모든 AWS ID를 나타냅니다.  
[조건](policy-conditions.md)을 사용하여 키 정책을 제한하지 않는 한 권한을 허용하는 키 정책문에서 보안 주체를 별표(\$1)로 설정하지 마세요. 별표는 다른 정책 문이 명시적으로 거부하지 않는 한 모든 자격 증명에 KMS 키를 사용할 수 있는 AWS 계정 권한을 부여합니다. 다른의 사용자는 자신의 계정에 해당 권한이 있을 때마다 KMS 키를 사용할 AWS 계정 수 있습니다.
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.
키 정책 문의 보안 주체가 `arn:aws:iam::111122223333:root"` 형식으로 표현된 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)인 경우 정책 문에서는 IAM 보안 주체에 권한을 부여하지 않습니다. 대신 IAM 정책을 AWS 계정 사용하여 키 정책에 지정된 권한을 위임할 수 있는 권한을 부여합니다. (계정 식별자에 'root'를 사용하지만 `arn:aws:iam::111122223333:root"` 형식의 보안 주체는 [AWS 계정 루트 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)를 나타내지 *않습니다*. 계정 보안 주체는 계정과 계정 루트 사용자를 포함한 해당 관리자를 나타냅니다.)  
보안 주체가 다른 보안 주체 AWS 계정 이거나 보안 주체인 경우 권한은 KMS 키 및 키 정책이 있는 리전에서 계정이 활성화된 경우에만 유효합니다. 기본적으로 사용하도록 설정되지 않은 리전(‘옵트인 리전’)에 대한 자세한 내용은 *AWS 일반 참조*의 [AWS 리전관리](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)를 참조하세요.  
다른 AWS 계정 또는 해당 보안 주체가 KMS 키를 사용하도록 허용하려면 키 정책 및 다른 계정의 IAM 정책에서 권한을 제공해야 합니다. 자세한 내용은 [다른 계정의 사용자가 KMS를 사용하도록 허용](key-policy-modifying-external-accounts.md)을 참조하세요.  
**Action**  
(필수) 허용하거나 거부할 API 작업을 지정합니다. 예를 들어 `kms:Encrypt` 작업은 AWS KMS [암호화](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 작업에 해당합니다. 정책 설명에 두 개 이상의 작업을 나열할 수 있습니다. 자세한 내용은 [권한 참조](kms-api-permissions-reference.md) 단원을 참조하십시오.  
필수 `Action` 요소가 키 정책 문에서 누락된 경우 정책 문은 영향을 미치지 않습니다. `Action` 요소가 없는 키 정책 문은 KMS 키에 적용되지 않습니다.  
키 정책 문에 해당 `Action` 요소가 없는 경우 AWS KMS 콘솔은 오류를 올바르게 보고하지만 정책 문이 효과적이지 않더라도 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 및 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs 성공합니다.  
**Resource**  
(필수) 키 정책에서 리소스 요소의 값은 `"*"`이고, “이 KMS 키”를 의미합니다. 별표(`"*"`)는 키 정책이 연결된 KMS 키를 식별합니다.  
필수 `Resource` 요소가 키 정책 문에서 누락된 경우 정책 문은 영향을 미치지 않습니다. `Resource` 요소가 없는 키 정책 문은 KMS 키에 적용되지 않습니다.  
키 정책 문에 해당 `Resource` 요소가 없는 경우 AWS KMS 콘솔은 오류를 올바르게 보고하지만 정책 문이 효과적이지 않더라도 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 및 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) APIs 성공합니다.  
**조건**  
(선택 사항) 키 정책이 적용되기 위해 충족해야 하는 요구 사항을 지정합니다. 조건을 사용하면는 API 요청의 컨텍스트를 AWS 평가하여 정책 설명이 적용되는지 여부를 결정할 수 있습니다.  
조건을 지정하려면 사전 정의된 *조건 키를* 사용합니다.는 [AWS 전역 조건 키](conditions-aws.md)와 [AWS KMS 조건 키를](conditions-kms.md) AWS KMS 지원합니다. 속성 기반 액세스 제어(ABAC)를 지원하기 위해는 태그 및 별칭을 기반으로 KMS 키에 대한 액세스를 제어하는 조건 키를 AWS KMS 제공합니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md)을 참조하세요.  
조건의 형식:  

```
"Condition": {"condition operator": {"condition key": "condition value"}}
```
즉, 다음과 같습니다.  

```
"Condition": {"StringEquals": {"kms:CallerAccount": "111122223333"}}
```

 AWS 정책 구문에 대한 자세한 내용은 [AWS IAM 사용 설명서의 IAM 정책 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)를 참조하세요. ** 

## 예제 키 정책
<a name="key-policy-example"></a>

다음은 대칭 암호화 KMS 키에 대한 전체 키 정책을 나타낸 예제입니다. 이 장의 주요 정책 개념에 대해 읽으면서 참조용으로 사용할 수 있습니다. 이 키 정책은 앞의 [기본 키 정책](key-policy-default.md) 섹션의 예제 정책 설명을 단일 키 정책에 결합하여 다음을 달성합니다.
+ 예제 AWS 계정 111122223333에서 KMS 키에 대한 전체 액세스를 허용합니다. 계정과 해당 관리자(계정 루트 사용자(비상용) 포함)가 해당 계정의 IAM 정책을 사용하여 KMS 키에 대한 액세스를 허용하도록 허용합니다.
+ `ExampleAdminRole` IAM 역할에서 KMS 키를 관리할 수 있도록 허용합니다.
+ `ExampleUserRole` IAM 역할에서 KMS 키를 사용할 수 있도록 허용합니다.

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

****  

```
{
    "Id": "key-consolepolicy",
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "AllowKeyAdministratorsAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleAdminRole"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion",
                "kms:RotateKeyOnDemand"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowKeyUse",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowAttachmentPersistentResources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}
```

------

# 기본 키 정책
<a name="key-policy-default"></a>

KMS 키를 생성할 때 새 KMS 키에 대한 키 정책을 지정할 수 있습니다. 제공하지 않으면에서 자동으로 AWS KMS 생성합니다. 에서 AWS KMS 사용하는 기본 키 정책은 AWS KMS 콘솔에서 키를 생성하는지 아니면 AWS KMS API를 사용하는지에 따라 다릅니다.

**프로그래밍 방식으로 KMS 키를 생성하는 경우 기본 키 정책**  
[AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/)를 사용하여 프로그래밍 방식으로 KMS 키를 생성하고( [AWS SDKs](https://aws.amazon.com/tools/#sdk) [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/) 또는 사용 포함[AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)) 키 정책을 지정하지 않으면가 매우 간단한 기본 키 정책을 AWS KMS 적용합니다. 이 기본 키 정책에는 KMS 키를 소유 AWS 계정 한에 IAM 정책을 사용하여 KMS 키의 모든 AWS KMS 작업에 대한 액세스를 허용할 수 있는 권한을 부여하는 정책 문이 하나 있습니다. 이 정책 설명에 대한 자세한 내용은 [에 대한 액세스 허용 AWS 계정 및 IAM 정책 활성화](#key-policy-default-allow-root-enable-iam) 섹션을 참조하세요.

**를 사용하여 KMS 키를 생성할 때의 기본 키 정책 AWS Management Console**  
[를 사용하여 KMS 키를 생성 AWS Management Console](create-keys.md)하면 키 정책은에 [대한 액세스를 AWS 계정 허용하고 IAM 정책을 활성화](#key-policy-default-allow-root-enable-iam)하는 정책 설명으로 시작됩니다. 그런 다음 콘솔은 [키 관리자 문](#key-policy-default-allow-administrators), [키 사용자 문](#key-policy-default-allow-users) 및 (대부분의 키 유형에 대해) 보안 주체가 [다른 AWS 서비스와](#key-policy-service-integration) 함께 KMS 키를 사용하도록 허용하는 문을 추가합니다. AWS KMS 콘솔의 기능을 사용하여 IAM 사용자, IAM 역할, 키 관리자 AWS 계정 및 키 사용자(또는 둘 다)를 지정할 수 있습니다.

**권한**
+ [에 대한 액세스 허용 AWS 계정 및 IAM 정책 활성화](#key-policy-default-allow-root-enable-iam)
+ [키 관리자가 KMS 키를 관리하도록 허용](#key-policy-default-allow-administrators)
+ [키 사용자가 KMS 키를 사용하도록 허용](#key-policy-default-allow-users)
  + [키 사용자가 암호화 작업에 KMS 키를 사용하도록 허용](#key-policy-users-crypto)
  + [키 사용자가 AWS 서비스와 함께 KMS 키를 사용하도록 허용](#key-policy-service-integration)

## 에 대한 액세스 허용 AWS 계정 및 IAM 정책 활성화
<a name="key-policy-default-allow-root-enable-iam"></a>

다음 기본 키 정책 문은 매우 중요합니다.
+ KMS 키를 소유 AWS 계정 한에 KMS 키에 대한 전체 액세스 권한을 부여합니다.

  다른 AWS 리소스 정책과 달리 AWS KMS 키 정책은 계정 또는 해당 자격 증명에 대한 권한을 자동으로 부여하지 않습니다. 계정 관리자에게 권한을 부여하려면 키 정책에 이와 같이 이 권한을 제공하는 명시적인 문이 포함되어야 합니다.
+ 계정이 IAM 정책을 사용하여 키 정책뿐만 아니라 KMS 키에 대한 액세스를 허용할 수 있도록 합니다.

  이 권한이 없으면 키에 대한 액세스를 허용하는 IAM 정책은 효과가 없지만 키에 대한 액세스를 거부하는 IAM 정책은 여전히 유효합니다.
+ 이는 삭제할 수 없는 계정 루트 사용자를 포함한 계정 관리자에게 액세스 제어 권한을 부여하여 키를 관리할 수 없게 될 위험을 줄입니다.

다음 키 정책 문은 프로그래밍 방식으로 생성된 KMS 키에 대한 전체 기본 키 정책입니다. AWS KMS 콘솔에서 생성된 KMS 키에 대한 기본 키 정책의 첫 번째 정책 설명입니다.

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:root"
   },
  "Action": "kms:*",
  "Resource": "*"
}
```

**IAM 정책에서 KMS 키에 대한 액세스를 허용할 수 있습니다.**  <a name="allow-iam-policies"></a>
위에 표시된 키 정책 문은 키를 소유 AWS 계정 한에 IAM 정책 및 키 정책을 사용하여 KMS 키에 대한 모든 작업(`kms:*`)을 허용할 수 있는 권한을 부여합니다.  
이 키 정책 문의 보안 주체는 [계정 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)이며 `arn:aws:iam::account-id:root` 형식의 ARN으로 표시됩니다. 계정 보안 주체는 AWS 계정과 해당 관리자를 나타냅니다.  
키 정책 문의 보안 주체가 계정 보안 주체인 경우 정책 문에서는 IAM 보안 주체에 KMS 키를 사용할 권한을 부여하지 않습니다. 대신, 계정이 IAM 정책을 사용하여 정책 문에 지정된 권한을 *위임*할 수 있도록 허용합니다. 이 기본 키 정책 문은 계정이 IAM 정책을 사용하여 KMS 키에 대한 모든 작업(`kms:*`) 권한을 위임할 수 있도록 허용합니다.

**는 KMS 키를 관리할 수 없게 될 위험을 줄입니다.**  
다른 AWS 리소스 정책과 달리 AWS KMS 키 정책은 계정 또는 해당 보안 주체에 권한을 자동으로 부여하지 않습니다. [계정 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)를 포함한 모든 보안 주체에게 권한을 부여하려면 권한을 명시적으로 제공하는 키 정책 문을 사용해야 합니다. 계정 보안 주체 또는 다른 보안 주체에게 KMS 키에 대한 액세스 권한을 부여할 필요는 없습니다. 그러나 계정 보안 주체에게 액세스 권한을 부여하면 키를 관리할 수 없게 되는 문제를 방지할 수 있습니다.  
예를 들어 한 명의 사용자에게만 KMS 키에 대한 액세스 권한을 부여하는 키 정책을 만들었다고 가정해 보겠습니다. 그런 다음 해당 사용자를 삭제하면 키를 관리할 수 없게 되므로 [AWS Support에 문의](https://console.aws.amazon.com/support/home#/case/create)하여 KMS 키에 대한 액세스 권한을 다시 받아야 합니다.  
위에 표시된 키 정책 문은 [계정 위탁자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)에게 키를 제어할 수 있는 권한을 부여합니다. 계정 보안 주체는 [계정 루트 사용자를](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) 포함하여 AWS 계정 및 해당 관리자를 나타냅니다. 계정 루트 사용자는 AWS 계정을 삭제하지 않으면 삭제할 수 없는 유일한 보안 주체입니다. IAM 모범 사례에서는 긴급 상황을 제외하고는 계정 루트 사용자를 대신하여 조치를 취하는 것을 권장하지 않습니다. 하지만 KMS 키에 액세스할 수 있는 다른 모든 사용자 및 역할을 삭제할 경우 계정 루트 사용자 역할을 해야 할 수도 있습니다.

## 키 관리자가 KMS 키를 관리하도록 허용
<a name="key-policy-default-allow-administrators"></a>

콘솔이 생성한 기본 키 정책을 통해 해당 계정에서 IAM 사용자와 역할을 선택하고 이들을 *키 관리자*로 지정할 수 있습니다. 이 문은 *키 관리자 문*이라고 합니다. 키 관리자는 KMS 키를 관리할 수 있는 권한이 있지만 [암호화 작업](kms-cryptography.md#cryptographic-operations)에 KMS 키를 사용할 수 있는 권한은 없습니다. 기본 보기 또는 정책 보기에서 KMS 키를 생성할 때 키 관리자 목록에 IAM 사용자와 역할을 추가할 수 있습니다.

**주의**  
키 관리자는 키 정책을 변경하고 권한 부여를 생성할 수 있는 권한이 있으므로 자신과 다른 사용자에게이 정책에 지정되지 않은 AWS KMS 권한을 부여할 수 있습니다.  
태그 및 별칭을 관리할 권한이 있는 보안 주체는 KMS 키에 대한 액세스를 제어할 수도 있습니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md)을 참조하세요.

**참고**  
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

다음은 AWS KMS 콘솔의 기본 보기에서 키 관리자 문을 나타낸 예제입니다.

![\[콘솔의 기본 키 정책의 키 관리자, 기본 보기\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/console-key-policy-administrators-60.png)


다음은 AWS KMS 콘솔의 기본 보기의 예제 키 관리자 문입니다. 이 키 관리자 문은 단일 리전 대칭 암호화 KMS 키를 위한 것입니다.

**참고**  
 AWS KMS 콘솔은 문 식별자 아래의 키 정책에 키 관리자를 추가합니다`"Allow access for Key Administrators"`. 이 문 식별자를 수정하면 문에 대해 콘솔이 업데이트 내용을 표시하는 방식에 영향을 미칠 수 있습니다.

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS":"arn:aws:iam::111122223333:role/ExampleAdminRole"},
  "Action": [
    "kms:Create*",
    "kms:Describe*",
    "kms:Enable*",
    "kms:List*",
    "kms:Put*",
    "kms:Update*",
    "kms:Revoke*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:TagResource",
    "kms:UntagResource",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion",
    "kms:RotateKeyOnDemand"
  ],
  "Resource": "*"
}
```

가장 일반적인 KMS 키인 단일 리전 대칭 KMS 키에 대한 기본 키 관리자 문은 다음과 같은 권한을 허용합니다. 이러한 권한에 대한 자세한 내용은 [AWS KMS 권한](kms-api-permissions-reference.md) 섹션을 참조하세요.

 AWS KMS 콘솔을 사용하여 KMS 키를 생성하면 콘솔은 키 관리자 문의 `Principal` 요소에 지정한 사용자와 역할을 추가합니다.

많은 경우 이러한 권한에 와일드카드 문자(`*`)가 포함되며, 지정된 동사로 시작하는 모든 권한이 허용됩니다. 따라서가 새 API 작업을 AWS KMS 추가하면 키 관리자가 해당 작업을 자동으로 사용할 수 있습니다. 새 작업을 포함하도록 키 정책을 업데이트할 필요는 없습니다. 키 관리자를 고정된 API 작업 집합으로 제한하려는 경우 [키 정책을 변경](key-policy-modifying.md)할 수 있습니다.

**`kms:Create*`**  
[`kms:CreateAlias`](kms-alias.md) 및 [`kms:CreateGrant`](grants.md)를 허용합니다. (`kms:CreateKey` 권한은 IAM 정책에서만 유효)

**`kms:Describe*`**  
[`kms:DescribeKey`](viewing-keys.md)를 허용합니다. AWS Management Console에서 KMS 키의 키 세부 정보 페이지를 보려면 `kms:DescribeKey` 권한이 필요합니다.

**`kms:Enable*`**  
[`kms:EnableKey`](enabling-keys.md)를 허용합니다. 대칭 암호화 KMS 키의 경우 [`kms:EnableKeyRotation`](rotate-keys.md)도 허용합니다.

**`kms:List*`**  
[`kms:ListGrants`](grants.md), [https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeyPolicies.html) 및 [`kms:ListResourceTags`](tagging-keys.md)를 허용합니다. ( AWS Management Console에서 KMS 키를 보는 데 필요한 `kms:ListAliases` 및 `kms:ListKeys` 권한은 IAM 정책에서만 유효)

**`kms:Put*`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)를 허용합니다. 이 권한은 키 관리자가 이 KMS 키에 대한 키 정책을 변경하도록 허용합니다.

**`kms:Update*`**  
[`kms:UpdateAlias`](alias-update.md) 및 [https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html)을 허용합니다. 다중 리전 키의 경우 이 KMS 키에서 [`kms:UpdatePrimaryRegion`](multi-region-update.md#update-primary-console)을 허용합니다.

**`kms:Revoke*`**  
키 관리자가 권한 부여에서 [사용 중지 위탁자](grants.md#terms-retiring-principal)가 아니어도 [권한 부여를 삭제](grant-delete.md)할 수 있도록 [`kms:RevokeGrant`](grant-delete.md)를 허용합니다.

**`kms:Disable*`**  
[`kms:DisableKey`](enabling-keys.md)를 허용합니다. 대칭 암호화 KMS 키의 경우 [`kms:DisableKeyRotation`](rotate-keys.md)도 허용합니다.

**`kms:Get*`**  
[`kms:GetKeyPolicy`](key-policy-viewing.md) 및 [`kms:GetKeyRotationStatus`](rotate-keys.md)를 허용합니다. 가져온 키 구성 요소가 있는 KMS 키의 경우 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)를 허용합니다. 비대칭 KMS 키의 경우 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)를 허용합니다. AWS Management Console에서 KMS 키의 키 정책을 보려면 `kms:GetKeyPolicy` 권한이 필요합니다.

**`kms:Delete*`**  
[`kms:DeleteAlias`](kms-alias.md)를 허용합니다. 가져온 키 구성 요소가 있는 키의 경우 [`kms:DeleteImportedKeyMaterial`](importing-keys.md)을 허용합니다. `kms:Delete*` 권한은 키 관리자가 KMS 키(`ScheduleKeyDeletion`)를 삭제하도록 허용하지 않습니다.

**`kms:TagResource`**  
키 관리자가 KMS 키에 태그를 추가할 수 있도록 하는 [`kms:TagResource`](tagging-keys.md)를 허용합니다. 태그를 사용하여 KMS 키에 대한 액세스를 제어할 수도 있으므로 이 권한을 통해 관리자는 KMS 키에 대한 액세스를 허용하거나 거부할 수 있습니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md) 섹션을 참조하세요.

**`kms:UntagResource`**  
키 관리자가 KMS 키에 태그를 삭제할 수 있도록 하는 [`kms:UntagResource`](tagging-keys.md)를 허용합니다. 태그를 사용하여 키에 대한 액세스를 제어할 수 있으므로 이 권한을 통해 관리자는 KMS 키에 대한 액세스를 허용하거나 거부할 수 있습니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md) 섹션을 참조하세요.

**`kms:ScheduleKeyDeletion`**  
키 관리자가 [이 KMS 키를 삭제](deleting-keys.md)할 수 있도록 하는 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)을 허용합니다. 이 권한을 삭제하려면 **키 관리자가 이 키를 삭제하도록 허용(Allow key administrators to delete this key)** 옵션을 삭제합니다.

**`kms:CancelKeyDeletion`**  
키 관리자가 [이 KMS 키 삭제를 취소](deleting-keys.md)할 수 있도록 하는 [https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CancelKeyDeletion.html)를 허용합니다. 이 권한을 삭제하려면 **키 관리자가 이 키를 삭제하도록 허용(Allow key administrators to delete this key)** 옵션을 삭제합니다.

**`kms:RotateKeyOnDemand`**  
키 관리자가 [이 KMS 키에서 키 구성 요소의 온디맨드 교체를 수행](rotating-keys-on-demand.md)할 수 있는 [https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html)를 허용합니다.

 

AWS KMS 는 특수 목적 키를 생성할 때 기본 키 관리자 문에 다음 권한을 추가합니다.

**`kms:ImportKeyMaterial`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 권한은 키 관리자가 키 구성 요소를 KMS로 가져오도록 허용합니다. 이 권한은 [키 구성 요소 없이 KMS 키를 생성](importing-keys-create-cmk.md)하는 경우에만 키 정책에 포함됩니다.

**`kms:ReplicateKey`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 권한을 통해 키 관리자는 다른 AWS 리전에서 [다중 리전 기본 키의 복제본을 생성할](multi-region-keys-replicate.md) 수 있습니다. 이 권한은 다중 리전 기본 또는 복제본 키를 생성하는 경우에만 키 정책에 포함됩니다.

**`kms:UpdatePrimaryRegion`**  
[https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 권한은 키 관리자가 [다중 리전 복제본 키를 다중 리전 기본 키로 변경](multi-region-update.md)하도록 허용합니다. 이 권한은 다중 리전 기본 또는 복제본 키를 생성하는 경우에만 키 정책에 포함됩니다.

## 키 사용자가 KMS 키를 사용하도록 허용
<a name="key-policy-default-allow-users"></a>

콘솔에서 KMS 키에 대해 생성하는 기본 키 정책을 사용하면 계정 및 외부에서 IAM 사용자 AWS 계정및 IAM 역할을 선택하고 *키 사용자를* 만들 수 있습니다.

콘솔은 키 사용자에 대한 키 정책에 두 개의 정책 문을 추가합니다.
+ [KMS 직접 사용](#key-policy-users-crypto) — 첫 번째 키 정책 문은 키 사용자에게 해당 유형의 KMS 키에 대해 지원되는 모든 [암호화 작업](kms-cryptography.md#cryptographic-operations)에 KMS 키를 직접 사용할 수 있는 권한을 부여합니다.
+ [서비스와 함께 AWS KMS 키 사용](#key-policy-service-integration) - 두 번째 정책 설명은 키 사용자에게와 통합된 AWS 서비스가 자신을 대신하여 KMS 키를 AWS KMS 사용하여 Amazon S3 버킷 및 Amazon DynamoDB 테이블과 같은 리소스를 보호할 수 있는 권한을 부여합니다.

KMS 키를 생성할 때 IAM 사용자, IAM 역할 및 기타 AWS 계정 를 키 사용자 목록에 추가할 수 있습니다. 다음 이미지에서 보듯이, 키 정책에 대한 콘솔의 기본 보기로 목록을 편집할 수도 있습니다. 키 정책의 기본 보기는 키 세부 정보 페이지에 있습니다. 다른의 사용자가 KMS 키를 사용하도록 허용하는 AWS 계정 방법에 대한 자세한 내용은 섹션을 참조하세요[다른 계정의 사용자가 KMS를 사용하도록 허용](key-policy-modifying-external-accounts.md).

**참고**  
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

![\[콘솔의 기본 키 정책의 키 사용자, 기본 보기\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/console-key-policy-users-sm.png)


단일 리전 대칭에 대한 기본 *키 사용자 문*은 다음과 같은 권한을 허용합니다. 각 권한에 대한 자세한 내용은 [AWS KMS 권한](kms-api-permissions-reference.md) 섹션을 참조하세요.

 AWS KMS 콘솔을 사용하여 KMS 키를 생성하면 콘솔은 사용자가 지정한 사용자와 역할을 각 키 사용자 문의 `Principal` 요소에 추가합니다.

**참고**  
 AWS KMS 콘솔은 문 식별자 `"Allow use of the key"` 및 아래의 키 정책에 키 사용자를 추가합니다`"Allow attachment of persistent resources"`. 이러한 문 식별자들을 수정하면 문에 대해 콘솔이 업데이트 내용을 표시하는 방식에 영향을 미칠 수 있습니다.

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
},
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": [
    "arn:aws:iam::111122223333:role/ExampleRole",
    "arn:aws:iam::444455556666:root"
  ]},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

## 키 사용자가 암호화 작업에 KMS 키를 사용하도록 허용
<a name="key-policy-users-crypto"></a>

키 사용자는 KMS 키에서 지원되는 모든 [암호화 작업](kms-cryptography.md#cryptographic-operations)에서 KMS 키를 직접 사용할 수 있는 권한이 있습니다. 또한 [DescribeKey ](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)작업을 사용하여 AWS KMS 콘솔에서 또는 AWS KMS API 작업을 사용하여 KMS 키에 대한 자세한 정보를 가져올 수 있습니다.

기본적으로 AWS KMS 콘솔은 다음 예제와 같은 키 사용자 문을 기본 키 정책에 추가합니다. 서로 다른 API 작업을 지원하므로 대칭 암호화 KMS 키, HMAC KMS 키, 퍼블릭 키 암호화를 위한 비대칭 KMS 키, 서명 및 확인을 위한 비대칭 KMS 키에 대한 정책 문의 작업은 약간 다릅니다.

**대칭 암호화 KMS 키**  
콘솔은 대칭 암호화 KMS 키에 대한 키 정책에 다음 문을 추가합니다.  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey",
    "kms:Encrypt",
    "kms:GenerateDataKey*",
    "kms:ReEncrypt*"
  ],
  "Resource": "*"
}
```

**HMAC KMS 키**  
콘솔은 HMAC KMS 키에 대한 키 정책에 다음 문을 추가합니다.  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",  
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateMac",
    "kms:VerifyMac"
  ],
  "Resource": "*"
}
```

**퍼블릭 키 암호화를 위한 비대칭 KMS 키**  
콘솔은 키 사용이 **암호화 및 해독**인 비대칭 KMS 키에 대한 키 정책에 다음 문을 추가합니다.  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey",
    "kms:GetPublicKey"
  ],
  "Resource": "*"
}
```

**서명 및 확인을 위한 비대칭 KMS 키**  
콘솔은 키 사용이 **서명 및 확인**인 비대칭 KMS 키에 대한 키 정책에 다음 문을 추가합니다.  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:Sign",
    "kms:Verify"
  ],
  "Resource": "*"
}
```

**공유 보안 비밀 도출을 위한 비대칭 KMS 키**  
콘솔은 키 사용에 대한 **키 계약**을 사용하여 비대칭 KMS 키에 대한 키 정책에 다음 문을 추가합니다.  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:DeriveSharedSecret"
  ],
  "Resource": "*"
}
```

이러한 문의 작업은 키 사용자에게 다음 권한을 제공합니다.

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)  
키 사용자가 이 KMS 키를 사용하여 데이터를 암호화하도록 허용합니다.

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)  
키 사용자가 이 KMS 키를 사용하여 데이터를 해독하도록 허용합니다.

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)  
키 사용자가 이 KMS 키로 공유 비밀을 도출할 수 있습니다.

[https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)  
키 사용자가 식별자, 생성 날짜, 키 상태 등 이 KMS 키에 대한 세부 정보를 가져오도록 허용합니다. 또한 키 사용자가 AWS KMS 콘솔에서 KMS 키에 대한 세부 정보를 표시할 수 있습니다.

`kms:GenerateDataKey*`  
키 사용자가 클라이언트 측 암호화 작업을 위해 대칭 데이터 키 또는 비대칭 데이터 키 페어를 요청하도록 허용합니다. 콘솔은 \$1 와일드카드 문자를 사용하여 다음 API 작업에 대한 권한을 나타냅니다. [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html), [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html). 이러한 권한은 데이터 키를 암호화하는 대칭 KMS 키에만 유효합니다.

[kms:GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)  
키 사용자가 HMAC KMS 키를 사용하여 HMAC 태그를 생성하도록 허용합니다.

[kms:GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)  
키 사용자가 비대칭 KMS 키의 퍼블릭 키를 다운로드하도록 허용합니다. 이 퍼블릭 키를 공유하는 당사자는 외부에서 데이터를 암호화할 수 있습니다 AWS KMS. 그러나, 그 암호문은 AWS KMS에서 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 호출해야만 해독할 수 있습니다.

[kms:ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)\$1   
키 사용자가 원래 이 KMS 키로 암호화한 데이터를 다시 암호화하거나, 이 KMS 키를 이용해 이전에 암호화한 데이터를 다시 암호화하도록 허용합니다. [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 작업을 수행하려면 소스 및 대상 KMS 키 모두에 대한 액세스 권한이 필요합니다. 이를 위해 원본 KMS 키에 대한 `kms:ReEncryptFrom` 권한과 대상 KMS 키에 대한 `kms:ReEncryptTo` 권한을 허용할 수 있습니다. 그러나 단순화를 위해 콘솔에서는 두 KMS 키 모두에 대해 `kms:ReEncrypt*`를 허용합니다(`*` 와일드카드 문자 사용).

[kms:Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)  
키 사용자가 이 KMS 키를 사용하여 메시지에 서명하도록 허용합니다.

[kms:Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)  
키 사용자가 이 KMS 키를 사용하여 서명을 확인하도록 허용합니다.

[kms:VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)  
키 사용자가 HMAC KMS 키를 사용하여 HMAC 태그를 확인하도록 허용합니다.

## 키 사용자가 AWS 서비스와 함께 KMS 키를 사용하도록 허용
<a name="key-policy-service-integration"></a>

또한 콘솔의 기본 키 정책은 키 사용자에게 권한 부여를 사용하는 AWS 서비스에서 데이터를 보호하는 데 필요한 권한 부여 권한을 부여합니다. AWS 서비스는 권한 부여를 사용하여 KMS 키를 사용할 수 있는 구체적이고 제한된 권한을 얻는 경우가 많습니다.

이 키 정책 문을 사용하면 키 사용자가 KMS 키에 대한 권한 부여를 생성, 확인 및 취소할 수 있지만 권한 부여 작업 요청이 [AWS 와 통합된 서비스 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)에서 오는 경우에만 가능합니다. [kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 정책 조건은 사용자가 이러한 권한 부여 작업을 직접 호출하도록 허용하지 않습니다. 키 사용자가 허용하면 AWS 서비스는 사용자를 대신하여 KMS 키를 사용하여 사용자의 데이터를 보호할 수 있는 권한 부여를 생성할 수 있습니다.

키 사용자는 통합 서비스와 함께 KMS 키를 사용하려면 이러한 권한 부여 권한이 필요하지만 이러한 권한으로는 충분하지 않습니다. 키 사용자는 통합 서비스를 사용할 수 있는 권한도 필요합니다. 와 통합되는 AWS 서비스에 대한 액세스 권한을 사용자에게 부여하는 방법에 대한 자세한 내용은 통합 서비스에 대한 설명서를 AWS KMS참조하세요.

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/ExampleKeyUserRole"},
  "Action": [
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```

예를 들어 키 사용자는 다음과 같은 방법으로 KMS 키에서 이러한 권한을 사용할 수 있습니다.
+ 이 KMS 키를 Amazon Elastic Block Store(Amazon EBS) 및 Amazon Elastic Compute Cloud(Amazon EC2)와 함께 사용하여 암호화된 EBS 볼륨을 EC2 인스턴스에 연결합니다. 키 사용자는 KMS 키를 사용할 수 있는 Amazon EC2 권한을 묵시적으로 부여해 암호화된 볼륨을 인스턴스에 연결합니다. 자세한 내용은 [Amazon Elastic Block Store(Amazon EBS)의 사용 방식 AWS KMS](services-ebs.md) 단원을 참조하십시오.
+ Amazon Redshift와 함께 이 KMS 키를 사용하여 암호화된 클러스터를 시작합니다. 키 사용자는 KMS 키를 사용할 수 있는 Amazon Redshift 권한을 묵시적으로 부여해 암호화된 클러스터를 시작하고 암호화된 스냅샷을 생성합니다. 자세한 내용은 [Amazon Redshift의 사용 방식 AWS KMS](services-redshift.md) 단원을 참조하십시오.
+ 권한 부여를 사용해 해당 서비스로 암호화된 리소스를 생성, 관리 또는 사용하는 [AWS KMS와 통합된 다른AWS 서비스](service-integration.md)와 함께 이 KMS 키를 사용합니다.

기본 키 정책은 키 사용자가 권한 부여를 사용하는 *모든* 통합 서비스에 권한 부여 권한을 위임하도록 허용합니다. 그러나 권한을 지정된 AWS 서비스로 제한하는 사용자 지정 키 정책을 생성할 수 있습니다. 자세한 내용은 [kms:ViaService](conditions-kms.md#conditions-kms-via-service) 조건 키를 참조하세요.

# 키 정책 보기
<a name="key-policy-viewing"></a>

 AWS KMS API에서 AWS KMS 콘솔 또는 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 작업을 사용하여 계정[AWS 관리형 키](concepts.md#aws-managed-key)의 AWS KMS [고객 관리형 키 또는에 대한 키](concepts.md#customer-mgn-key) 정책을 볼 수 있습니다. 이러한 기법을 사용하여 다른 AWS 계정에서 KMS 키의 키 정책을 볼 수 없습니다.

 AWS KMS 키 정책에 대한 자세한 내용은 섹션을 참조하세요[의 키 정책 AWS KMS](key-policies.md). KMS 키에 액세스할 수 있는 사용자 및 역할을 확인하는 방법은 [에 대한 액세스 결정 AWS KMS keys](determining-access.md) 단원을 참조하십시오.

## AWS KMS 콘솔 사용
<a name="key-policy-viewing-console"></a>

권한이 부여된 사용자는 AWS Management Console의 **키 정책(Key policy)** 탭에서 [AWS 관리형 키](concepts.md#aws-managed-key) 또는 [고객 관리형 키](concepts.md#customer-mgn-key)에 대한 키 정책을 볼 수 있습니다.

에서 KMS 키에 대한 키 정책을 보려면 [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html), [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 및 [kms:GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 권한이 있어야 AWS Management Console합니다.

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) AWS Key Management Service (AWS KMS) 콘솔을 엽니다.

1. 를 변경하려면 페이지 오른쪽 상단에 있는 리전 선택기를 AWS 리전사용합니다.

1. 

   가 AWS 자동으로 생성하고 관리하는 계정의 키를 보려면 탐색 창에서 **AWS 관리형 키를** 선택합니다. 해당 계정에서 직접 생성하고 관리하는 키를 보려면 탐색 창에서 **고객 관리형 키**를 선택합니다.

1. KMS 키 목록에서 검사하려는 KMS 키의 별칭 또는 키 ID를 선택합니다.

1. **키 정책(Key policy)** 탭을 선택합니다.

   **키 정책(Key policy)** 탭에서 키 정책 문서를 볼 수 있습니다. 다음은 *정책 보기*입니다. 키 정책 문에서 키 정책을 통해 KMS 키에 대한 액세스 권한이 부여된 보안 주체를 볼 수 있고, 이러한 보안 주체가 수행할 수 있는 작업을 볼 수 있습니다.

   다음 예제에서는 [기본 키 정책](key-policy-default.md)에 대한 정책 보기를 보여 줍니다.  
![\[AWS KMS 콘솔의 정책 보기에서 기본 키 정책 보기\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/console-key-policy-view.png)

   또는에서 KMS 키를 생성한 경우 키 관리자 AWS Management Console, 키 **삭제** 및 **키 사용자** 섹션이 포함된 *기본 보기*가 표시됩니다. **** 키 정책 문서를 보려면 **정책 보기로 전환(Switch to policy view)**을 선택합니다.

   다음 예제에서는 [기본 키 정책](key-policy-default.md)에 대한 기본 보기를 보여 줍니다.  
![\[AWS KMS 콘솔의 기본 보기에서 기본 키 정책 보기\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/console-key-policy-full-vsm.png)

## AWS KMS API 사용
<a name="key-policy-viewing-api"></a>

에서 KMS 키에 대한 키 정책을 가져오려면 API에서 AWS KMS [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 작업을 AWS 계정사용합니다. 이 작업을 사용하여 다른 계정의 키 정책은 볼 수 없습니다.

다음 예제에서는 AWS Command Line Interface (AWS CLI)에서 [get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) 명령을 사용하지만 SDK를 AWS 사용하여이 요청을 할 수 있습니다.

`default`가 유일하게 유효한 값이더라도 `PolicyName` 파라미터가 필요합니다. 또한 이 명령은 더 쉽게 볼 수 있도록 JSON이 아닌 텍스트로 출력을 요청합니다.

이 명령을 실행하기 앞서 예제 키 ID를 유효한 키 ID로 바꿉니다.

```
$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text
```

응답은 다음과 같이 [기본 키 정책](key-policy-default.md)을 반환합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "key-consolepolicy-3",
  "Statement" : [ {
  "Sid" : "EnableIAMUserPermissions",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : "kms:*",
    "Resource" : "*"
  } ]
}
```

------

# 키 정책 변경
<a name="key-policy-modifying"></a>

 AWS Management Console 또는 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 작업을 AWS 계정 사용하여에서 KMS 키에 대한 키 정책을 변경할 수 있습니다. 이러한 기법을 사용하여 다른 AWS 계정에서 KMS 키의 키 정책을 변경할 수 없습니다.

키 정책을 변경하는 경우 다음 사항을 주의해야 합니다.
+ [AWS 관리형 키](concepts.md#aws-managed-key) 또는 [고객 관리형 키](concepts.md#customer-mgn-key)의 키 정책은 볼 수 있지만 고객 관리형 키의 키 정책만 변경할 수 있습니다. 의 AWS 관리형 키 정책은 계정에서 KMS 키를 생성한 AWS 서비스에 의해 생성되고 관리됩니다. [AWS 소유 키](concepts.md#aws-owned-key)의 키 정책은 변경할 수 없습니다.
+ 키 정책 AWS 계정 에서 IAM 사용자, IAM 역할 및를 추가하거나 제거하고 해당 보안 주체에 대해 허용되거나 거부되는 작업을 변경할 수 있습니다. 키 정책에서 보안 주체와 권한을 지정하는 방법에 대한 자세한 내용은 [키 정책](key-policies.md) 단원을 참조하십시오.
+ 키 정책에 IAM 그룹을 추가할 수 없지만 여러 명의 IAM 사용자 및 IAM 역할을 추가할 수 있습니다. 자세한 내용은 [여러 IAM 보안 주체가 KMS 키에 액세스하도록 허용](iam-policies.md#key-policy-modifying-multiple-iam-users) 단원을 참조하십시오.
+ 키 정책에 외부 AWS 계정 를 추가하는 경우 외부 계정의 IAM 정책도 사용하여 해당 계정의 IAM 사용자, 그룹 또는 역할에 권한을 부여해야 합니다. 자세한 내용은 [다른 계정의 사용자가 KMS를 사용하도록 허용](key-policy-modifying-external-accounts.md) 단원을 참조하십시오.
+ 결과 키 정책 문서는 32KB(32,768바이트)를 초과할 수 없습니다.

## 키 정책 변경 방법
<a name="key-policy-modifying-how-to"></a>

세 가지 다른 방법을 이용해 키 정책을 변경할 수 있으며 이들 방법에 대해서는 다음 섹션에서 설명합니다.

**Topics**
+ [AWS Management Console 기본 보기 사용](#key-policy-modifying-how-to-console-default-view)
+ [AWS Management Console 정책 보기 사용](#key-policy-modifying-how-to-console-policy-view)
+ [AWS KMS API 사용](#key-policy-modifying-how-to-api)

### AWS Management Console 기본 보기 사용
<a name="key-policy-modifying-how-to-console-default-view"></a>

콘솔을 이용해 *기본 보기*라는 그래픽 인터페이스로 키 정책을 변경할 수 있습니다.

다음 절차가 콘솔에서 본 것과 일치하지 않는 경우, 이 키 정책이 콘솔에서 생성되지 않았거나 키 정책이 콘솔의 기본 보기가 지원하지 않는 방식으로 수정되었음을 뜻합니다. 이 경우 [AWS Management Console 정책 보기 사용](#key-policy-modifying-how-to-console-policy-view) 또는 [AWS KMS API 사용](#key-policy-modifying-how-to-api)에 설명된 단계를 따릅니다.

1. [AWS KMS 콘솔 사용](key-policy-viewing.md#key-policy-viewing-console)에서 설명한 대로 고객 관리형 키 정책을 확인합니다. (의 키 정책은 변경할 수 없습니다 AWS 관리형 키.)

1. 변경하려는 내용을 결정합니다.
   + [키 관리자](key-policy-default.md#key-policy-default-allow-administrators)를 추가하거나 제거하고, 키 관리자에게 [KMS 키 삭제](deleting-keys.md)를 허용하거나 금지하려면, 페이지의 **키 관리자** 섹션에 있는 컨트롤을 사용합니다. 키 관리자는 활성화 및 비활성화, 키 정책 설정 및 [키 교체 활성화](rotate-keys.md)를 포함해 KMS 키를 관리합니다.
   + [키 사용자를](key-policy-default.md#key-policy-default-allow-users) 추가 또는 제거하고 외부에서 KMS 키를 AWS 계정 사용하도록 허용하거나 허용하지 않으려면 페이지의 **키 사용자** 섹션에 있는 컨트롤을 사용합니다. 키 사용자는 암호화, 암호 해독, 재암호화 및 데이터 키 생성 같은 [암호화 작업](kms-cryptography.md#cryptographic-operations)에서 KMS 키를 사용할 수 있습니다.

### AWS Management Console 정책 보기 사용
<a name="key-policy-modifying-how-to-console-policy-view"></a>

콘솔을 이용해 콘솔의 *정책 보기*에서 키 정책 문서를 변경할 수 있습니다.

1. [AWS KMS 콘솔 사용](key-policy-viewing.md#key-policy-viewing-console)에서 설명한 대로 고객 관리형 키 정책을 확인합니다. (의 키 정책은 변경할 수 없습니다 AWS 관리형 키.)

1. **키 정책** 섹션에서 **정책 보기로 전환**을 선택합니다.

1. **편집**을 선택합니다.

1. 변경하려는 내용을 결정합니다.
   + 새 문을 추가하려면 **새 문 추가**를 선택하세요. 그런 다음 새 키 정책 문에 대해 문 작성 도구 패널에 나열된 옵션에서 작업, 위탁자, 조건을 선택하거나 정책 문 요소를 직접 입력할 수 있습니다.
   + 키 정책에서 문을 제거하려면 해당 문을 선택한 다음 **제거**를 선택하세요. 선택한 정책 문을 검토하고 삭제할 것인지 확인하세요. 해당 문을 제거하는 작업을 진행하지 않으려면 **취소**를 선택하세요.
   + 기존 키 정책 문을 수정하려면 해당 문을 선택하세요. 그런 다음 문 빌더 패널을 사용하여 수정하려는 특정 요소를 선택하거나 문을 수동으로 편집할 수 있습니다.

1. **변경 사항 저장**을 선택합니다.

### AWS KMS API 사용
<a name="key-policy-modifying-how-to-api"></a>

[PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 작업을 사용하여에서 KMS 키의 키 정책을 변경할 수 있습니다 AWS 계정. 다른 AWS 계정의 KMS 키에는 이 API를 사용할 수 없습니다.

1. [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 작업을 이용해 기존 키 정책 문서를 검색한 다음 이 정책 문서를 파일에 저장합니다. 다중 프로그래밍 언어로 작성된 샘플 코드는 [AWS SDK 또는 CLI와 `GetKeyPolicy` 함께 사용](example_kms_GetKeyPolicy_section.md) 단원을 참조하십시오.

1. 원하는 텍스트 편집기에서 키 정책 문서를 열고 편집한 후 파일을 저장합니다.

1. [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 작업을 이용해 KMS 키에 업데이트된 키 정책 문서를 적용합니다. 다중 프로그래밍 언어로 작성된 샘플 코드는 [AWS SDK 또는 CLI와 `PutKeyPolicy` 함께 사용](example_kms_PutKeyPolicy_section.md) 단원을 참조하십시오.

한 KMS 키에서 다른 KMS 키로 키 정책을 복사하는 예는 AWS CLI 명령 참조의 [GetKeyPolicy 예제](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html#examples)를 참조하십시오.

# 키 정책의 AWS 서비스에 대한 권한
<a name="key-policy-services"></a>

많은 AWS 서비스는 AWS KMS keys 를 사용하여 관리하는 리소스를 보호합니다. 서비스가 [AWS 소유 키](concepts.md#aws-owned-key) 또는 [AWS 관리형 키](concepts.md#aws-managed-key)를 사용하는 경우, 서비스가 이러한 KMS 키에 대한 키 정책을 설정하고 유지 관리합니다.

그러나 [고객 관리형 키](concepts.md#customer-mgn-key)와 함께 AWS 서비스를 사용하는 경우, 사용자가 키 정책을 설정하고 유지 관리합니다. 이 키 정책은 사용자를 대신하여 리소스를 보호하는 데 필요한 최소 권한을 서비스에 허용해야 합니다. 서비스에 필요한 권한만 제공하는 최소 권한의 원칙을 따르는 것이 좋습니다. 서비스에 필요한 권한이 무엇인지 파악하고 [AWS 전역 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) 및 [AWS KMS 조건 키](policy-conditions.md)를 사용하여 권한을 구체화하면 이 작업을 효과적으로 수행할 수 있습니다.

고객 관리형 키에서 서비스에 필요한 권한을 찾으려면 서비스에 대한 암호화 문서를 참조하세요. 다음 목록에는 일부 서비스 문서에 대한 링크가 포함되어 있습니다.
+ **AWS CloudTrail** 권한 - [ CloudTrail에 대한 AWS KMS 키 정책 구성](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-kms-key-policy-for-cloudtrail.html#create-kms-key-policy-for-cloudtrail-decrypt)
+ **Amazon Elastic Block Store** 권한 - [Amazon EC2 사용 설명서](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#ebs-encryption-permissions) 및 [Amazon EC2 사용 설명서](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EBSEncryption.html#ebs-encryption-permissions)
+ **AWS Lambda** 권한 - [Lambda의 저장 데이터 암호화](https://docs.aws.amazon.com/lambda/latest/dg/security-encryption-at-rest.html)
+ **Amazon Q** 권한 - [Amazon Q의 데이터 암호화](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/data-encryption.html)
+ **Amazon Relational Database Service** 권한 - [AWS KMS 키 관리](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.Keys.html)
+ **AWS Secrets Manager** 권한 - [KMS 키 사용 권한 허용](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-authz)
+ **Amazon Simple Queue Service** 권한 - [Amazon SQS 키 관리](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)

# 에서 IAM 정책 사용 AWS KMS
<a name="iam-policies"></a>

IAM 정책을 [키](key-policies.md) 정책, [권한 부여](grants.md) 및 [VPC 엔드포인트 정책과](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy) 함께 사용하여 AWS KMS keys 에 대한 액세스를 제어할 수 있습니다 AWS KMS.

**참고**  
IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하려면 KMS 키의 키 정책에서 계정에 IAM 정책 사용 권한을 부여해야 합니다. 특히 키 정책에는 [IAM 정책을 활성화하는 정책 설명](key-policy-default.md#key-policy-default-allow-root-enable-iam)이 포함되어야 합니다.  
이 섹션에서는 IAM 정책을 사용하여 AWS KMS 작업에 대한 액세스를 제어하는 방법을 설명합니다. IAM에 대한 일반적인 내용은 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/)를 참조하십시오.

모든 KMS 키에는 키 정책이 있어야 합니다. IAM 정책은 선택 사항입니다. IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하려면 KMS 키의 키 정책에서 계정에 IAM 정책 사용 권한을 부여해야 합니다. 특히 키 정책에는 [IAM 정책을 활성화하는 정책 설명](key-policy-default.md#key-policy-default-allow-root-enable-iam)이 포함되어야 합니다.

IAM 정책은 모든 AWS KMS 작업에 대한 액세스를 제어할 수 있습니다. 키 정책과 달리 IAM 정책은 여러 KMS 키에 대한 액세스를 제어하고 여러 관련 AWS 서비스의 작업에 대한 권한을 제공할 수 있습니다. 그러나 IAM 정책은 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)와 같은 작업에 대한 액세스를 제어하는 데 특히 유용합니다. 여기에는 특정 KMS 키가 포함되어 있지 않기 때문에 키 정책으로는 제어할 수 없습니다.

Amazon Virtual Private Cloud(VPC) 엔드포인트를 AWS KMS 통해에 액세스하는 경우 VPC 엔드포인트 정책을 사용하여 엔드포인트를 사용할 때 AWS KMS 리소스에 대한 액세스를 제한할 수도 있습니다. 예를 들어 VPC 엔드포인트를 사용하는 경우의 보안 주체만 고객 관리형 키에 액세스 AWS 계정 하도록 허용할 수 있습니다. 자세한 내용은 [VPC 엔드포인트 정책](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)을 참조하세요.

JSON 정책 문서 작성 및 형식 지정에 대한 도움말은 *IAM 사용 설명서*의 [IAM JSON 정책 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html) 섹션을 확인하세요.

IAM 정책을 다음과 같이 사용할 수 있습니다.
+ **페더레이션 또는 크로스 계정 권한의 역할에 권한 정책 연결** – IAM 역할에 IAM 정책을 연결하여 자격 증명 연동을 활성화하거나, 크로스 계정 권한을 허용하거나, EC2 인스턴스에서 실행되는 애플리케이션에 권한을 부여할 수 있습니다. IAM 역할의 다양한 사용 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하십시오.
+ **사용자 또는 그룹에 권한 정책 연결** – 사용자 또는 사용자 그룹이 AWS KMS 작업을 호출하도록 허용하는 정책을 연결할 수 있습니다. 그러나 IAM 모범 사례에서는 가능한 경우 IAM 역할과 같은 임시 보안 인증 정보가 있는 ID를 사용할 것을 권장합니다.

다음 예제에서는 AWS KMS 권한이 있는 IAM 정책을 보여줍니다. 이 정책은 연결되는 IAM 자격 증명이 모든 KMS 키와 별칭을 나열하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:ListKeys",
      "kms:ListAliases"
    ],
    "Resource": "*"
  }
}
```

------

모든 IAM 정책처럼 이 정책에는`Principal` 요소가 없습니다. IAM 정책을 IAM ID에 연결할 경우 해당 ID는 정책에 지정된 권한을 얻습니다.

모든 AWS KMS API 작업과 해당 작업이 적용되는 리소스를 보여주는 표는 섹션을 참조하세요[권한 참조](kms-api-permissions-reference.md).

## 여러 IAM 보안 주체가 KMS 키에 액세스하도록 허용
<a name="key-policy-modifying-multiple-iam-users"></a>

키 정책에서 IAM 그룹은 유효한 보안 주체가 아닙니다. 여러 사용자 및 역할이 KMS 키에 액세스하도록 허용하려면 다음 중 한 방법을 사용합니다.
+ IAM 역할을 키 정책의 보안 주체로 사용하세요. 필요한 경우 여러 명의 권한 있는 사용자가 해당 역할을 맡을 수 있습니다. 자세한 내용은 **IAM 사용 설명서에서 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.

  키 정책에 여러 IAM 사용자를 나열할 수 있지만 이 방법을 따르는 경우에는 인증된 사용자 목록이 변경될 때마다 키 정책을 업데이트하기 때문에 권장되지 않습니다. 또한 IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.
+ IAM 정책을 사용하여 IAM 그룹에 권한을 부여하세요. 이 작업을 수행하기 위해서는 키 정책에 [IAM 정책이 KMS 키에 대한 액세스를 허용하도록 하는](key-policy-default.md#key-policy-default-allow-root-enable-iam) 문이 포함되어 있는지 확인하고, KMS 키에 대한 액세스를 허용하는 [IAM 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console)한 다음, [해당 정책을 권한이 있는 IAM 사용자가 포함된 IAM 그룹에 연결](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)합니다. 이 방법을 사용하면 권한있는 사용자 목록이 변경되어도 정책을 변경할 필요가 없습니다. 해당 IAM 그룹에서 사용자를 제거하거나 추가하기만 하면 됩니다. 자세한 내용은 **IAM 사용 설명서의 [IAM 사용자 그룹](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)을 참조하세요.

 AWS KMS 키 정책과 IAM 정책이 함께 작동하는 방식에 대한 자세한 내용은 섹션을 참조하세요[AWS KMS 권한 문제 해결](policy-evaluation.md).

# IAM 정책 모범 사례
<a name="iam-policies-best-practices"></a>

에 대한 액세스를 보호하는 AWS KMS keys 것은 모든 AWS 리소스의 보안에 매우 중요합니다. KMS 키는 AWS 계정에서 가장 중요한 리소스를 보호하는 데 사용됩니다. 따라서 KMS 키에 대한 액세스를 제어하는 [키 정책](key-policies.md),​​ IAM 정책, [권한 부여](grants.md) 및 VPC 엔드포인트 정책을 설계하는 데 시간을 할애하세요.

KMS 키에 대한 액세스를 제어하는 IAM 정책 설명에서 [최소 권한 원칙](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 사용합니다. IAM 보안 주체에 사용하거나 관리해야 하는 KMS 키에만 필요한 권한만 부여합니다.

다음 모범 사례는 AWS KMS 키 및 별칭에 대한 액세스를 제어하는 IAM 정책에 적용됩니다. 일반적인 IAM 정책 모범 사례 지침은 **IAM 사용 설명서의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

**키 정책 사용**  
가능하면 다른 AWS 계정에 있는 키를 포함해 여러 KMS 키에 적용할 수 있는 IAM 정책보다는 하나의 KMS 키에 영향을 주는 키 정책에 권한을 제공합니다. 이는 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 및 [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html)과 같은 민감한 권한뿐만 아니라 데이터 보호 방법을 결정하는 암호화 작업에도 특히 중요합니다.

**CreateKey 권한 제한**  
필요한 보안 주체에게만 키 생성 권한([kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html))을 부여합니다. KMS 키를 만드는 보안 주체도 키 정책을 설정하므로 자신이 만든 KMS 키를 사용하고 관리할 수 있는 권한을 자신과 다른 사용자에게 부여할 수 있습니다. 이 사용 권한을 할 때 [정책 조건](policy-conditions.md)을 사용하여 제한하는 것이 좋습니다. 예를 들어, [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec) 조건을 사용하여 대칭 암호화 KMS 키에 대한 권한을 제한할 수 있습니다.

**IAM 정책에서 KMS 키 지정**  
가장 좋은 방법은 정책 설명의 `Resource` 요소에 권한이 적용되는 각 KMS 키의 [키 ARN](concepts.md#key-id-key-ARN)을 지정하는 것입니다. 이 방법은 보안 주체에 필요한 KMS 키에 대한 사용 권한을 제한합니다. 예를 들어 이 `Resource` 요소는 보안 주체가 사용해야 하는 KMS 키만 나열합니다.  

```
"Resource": [
    "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"
]
```
KMS 키를 지정하는 것이 실용적이지 않은 경우와 같이 신뢰할 수 있는 AWS 계정 및 리전의 KMS 키에 대한 액세스를 제한하는 `Resource` 값을 사용합니다`arn:aws:kms:region:account:key/*`. 또는 AWS 계정와 같이 신뢰할 수 있는의 모든 리전(\$1)에서 KMS 키에 대한 액세스를 제한합니다`arn:aws:kms:*:account:key/*`.  
[키 ID](concepts.md#key-id-key-id), [별칭 이름](concepts.md#key-id-alias-name) 또는 [별칭 ARN](concepts.md#key-id-alias-ARN)을 사용하여 IAM 정책의 `Resource` 필드에서 KMS 키를 나타낼 수 없습니다. 별칭 ARN을 지정하면 정책이 KMS 키가 아닌 별칭에 적용됩니다. 별칭에 대한 IAM 정책에 대한 자세한 내용은 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하십시오.

**IAM 정책에서 "Resource": "\$1" 사용 안 함**  <a name="avoid-resource-star"></a>
와일드카드 문자 (\$1)를 신중하게 사용하십시오. 키 정책에서 `Resource` 요소의 와일드카드 문자는 키 정책이 연결된 KMS 키를 나타냅니다. 그러나 IAM 정책에서는 `Resource` 요소(`"Resource": "*"`)의 와일드카드 문자만 보안 주체의 계정에 사용 권한이 AWS 계정 있는 모든의 모든 KMS 키에 권한을 적용합니다. 여기에는 [다른의 KMS 키 AWS 계정](key-policy-modifying-external-accounts.md)와 보안 주체 계정의 KMS 키가 포함될 수 있습니다.  
예를 들어 다른에서 KMS 키를 사용하려면 보안 주체 AWS 계정는 외부 계정에 있는 KMS 키의 키 정책 및 자체 계정에 있는 IAM 정책의 권한이 필요합니다. 임의의 계정이 KMS 키에 대한 AWS 계정 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 권한을 부여했다고 가정합니다. 이 경우 역할에 모든 KMS 키(`"Resource": "*"`)에 대한 `kms:Decrypt` 권한을 부여하는 계정의 IAM 정책은 요구 사항의 IAM 부분을 충족합니다. 따라서 해당 역할을 수임할 수 있는 보안 주체는 이제 신뢰할 수 없는 계정의 KMS 키를 사용하여 암호문을 해독할 수 있습니다. 두 계정의 CloudTrail 로그에 해당 작업에 대한 항목이 표시됩니다.  
특히 다음 API 작업을 허용하는 정책 설명에서 `"Resource": "*"`를 사용하지 마십시오. 이러한 작업은 다른의 KMS 키에서 호출할 수 있습니다 AWS 계정.  
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [암호화 작업](kms-cryptography.md#cryptographic-operations)([Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html), [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html), [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html), [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html), [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html), [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html), [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html))
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html), [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html), [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html), [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html), [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)

**"Resource": "\$1"를 사용하는 경우**  <a name="require-resource-star"></a>
IAM 정책에서 필요한 권한에 대해서만 `Resource` 요소의 와일드카드 문자를 사용하십시오. 다음 권한에만 `"Resource": "*"` 요소가 필요합니다.  
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)
+ [kms:GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html)
+ [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)
+ [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)
+ 사용자 지정 키 스토어 권한(예: [kms:CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 및 [kms:ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html))
별칭 작업에 대한 권한([kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html), [kms:UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateAlias.html), [kms:DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html))은 별칭과 KMS 키에 연결되어야 합니다. IAM 정책에서 `"Resource": "*"`를 사용하여 별칭과 KMS 키를 나타내거나 `Resource` 요소에서 별칭과 KMS 키를 지정할 수 있습니다. 예제는 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하십시오.

 

이 항목의 예에서는 KMS 키에 대한 IAM 정책을 설계하기 위한 추가 정보와 지침을 제공합니다. 모든 AWS 리소스에 대한 IAM 모범 사례는 [IAM 사용 설명서의 IAM의 보안 모범 사례를](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) 참조하세요. ** 

# IAM 정책 설명에서 KMS 키 지정
<a name="cmks-in-iam-policies"></a>

IAM 정책을 사용하여 보안 주체가 KMS 키를 사용하거나 관리하도록 허용할 수 있습니다. KMS 키는 정책 설명의 `Resource` 요소에 지정됩니다.
+ IAM 정책 설명에서 KMS 키를 지정하려면[키 ARN](concepts.md#key-id-key-ARN)을 사용해야 합니다. [키 ID](concepts.md#key-id-key-id), [별칭 이름](concepts.md#key-id-alias-name) 또는 [별칭 ARN](concepts.md#key-id-alias-ARN)을 사용하여 IAM 정책 설명에서 KMS 키를 식별할 수 없습니다.

  예: "`Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`"

  별칭을 기반으로 KMS 키에 대한 액세스를 제어하려면[kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 또는 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 조건 키를 사용합니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md) 섹션을 참조하십시오.

  [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/CreateAlias.html), [UpdateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/UpdateAlias.html) 또는 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/DeleteAlias.html)와 같은 별칭 작업에 대한 액세스를 제어하는 ​​정책 설명에서만 별칭 ARN을 리소스로 사용합니다. 자세한 내용은 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하세요.
+ 계정 및 리전에서 여러 KMS 키를 지정하려면 키 ARN의 리전 또는 리소스 ID 위치에 와일드카드 문자(\$1)를 사용합니다.

  예를 들어 계정의 미국 서부(오레곤) 리전에 있는 모든 KMS 키를 지정하려면 "`Resource": "arn:aws:kms:us-west-2:111122223333:key/*`"를 사용합니다. 계정의 모든 리전에서 모든 KMS 키를 지정하려면 "`Resource": "arn:aws:kms:*:111122223333:key/*`"를 사용합니다.
+ 모든 KMS 키를 표시하려면 와일드카드 문자(`"*"`)만 사용합니다. 특정 KMS 키, 즉 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html), [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html), [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 및 [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)를 사용하지 않는 작업에 이 형식을 사용합니다.

정책 설명을 작성할 때 모든 KMS 키에 대한 액세스 권한을 부여하는 대신 보안 주체가 사용해야 하는 KMS 키만 지정하는 것이 [모범 사례](iam-policies-best-practices.md)입니다.

예를 들어 다음 IAM 정책 문은 위탁자가 정책 문의 `Resource` 요소에 나열된 KMS 키에 대해서만 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html), [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 직접적으로 호출하도록 허용합니다. 키 ARN으로 KMS 키를 지정하면 사용 권한이 지정된 KMS 키로만 제한됩니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": [
     "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
     "arn:aws:kms:us-west-2:111122223333:key/01234abcd-12ab-34cd-56ef-1234567890ab"
    ]
  }
}
```

------

신뢰할 수 있는 특정의 모든 KMS 키에 권한을 적용하려면 리전 및 키 ID 위치에 와일드카드 문자(\$1)를 사용할 AWS 계정수 있습니다. 예를 들어 다음 정책 설명은 보안 주체가 두 개의 신뢰할 수 있는 예제 계정의 모든 KMS 키에 대해 지정된 작업을 호출하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:DescribeKey",
      "kms:GenerateDataKey",
      "kms:GenerateDataKeyPair"
    ],
    "Resource": [
      "arn:aws:kms:*:111122223333:key/*",
      "arn:aws:kms:*:444455556666:key/*"
    ]
  }
}
```

------

`Resource` 요소에서 와일드카드 문자(`"*"`)만 사용할 수도 있습니다. 계정에 사용 권한이 있는 모든 KMS 키에 대한 액세스를 허용하므로 특정 KMS 키가 없는 작업 및 `Deny` 문에 주로 권장됩니다. 덜 민감한 읽기 전용 작업만 허용하는 정책 설명에서도 이 기능을 사용할 수 있습니다. AWS KMS 작업에 특정 KMS 키가 포함되어 있는지 확인하려면에 있는 테이블의 **리소스** 열에서 **KMS 키** 값을 찾습니다[AWS KMS 권한](kms-api-permissions-reference.md).

예를 들어 다음 정책 설명은`Deny` 효과를 사용하여 보안 주체가 모든 KMS 키에 대해 지정된 작업을 사용하지 못하도록 합니다. `Resource` 요소에 와일드카드 문자를 사용하여 모든 KMS 키를 나타냅니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:CreateKey",
      "kms:PutKeyPolicy",
      "kms:CreateGrant",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

다음 정책 설명에서는 와일드카드 문자만 사용하여 모든 KMS 키를 나타냅니다. 그러나 덜 민감한 읽기 전용 작업과 특정 KMS 키에 적용되지 않는 작업만 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:CreateKey",
      "kms:ListKeys",
      "kms:ListAliases",
      "kms:ListResourceTags"
    ],
    "Resource": "*"
  }
}
```

------

# IAM 정책 예시
<a name="customer-managed-policies"></a>

이 섹션에서는 다양한 AWS KMS 작업에 대한 권한을 허용하는 IAM 정책의 예를 제공합니다.

**중요**  
다음 정책에 포함된 권한 중 일부는 KMS 키의 키 정책에서도 허용하는 경우에만 허용됩니다. 자세한 내용은 [권한 참조](kms-api-permissions-reference.md) 단원을 참조하십시오.

JSON 정책 문서 작성 및 형식 지정에 대한 도움말은 *IAM 사용 설명서*의 [IAM JSON 정책 참조](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)를 참조하십시오.

**Topics**
+ [사용자가 AWS KMS 콘솔에서 KMS 키를 볼 수 있도록 허용](#iam-policy-example-read-only-console)
+ [사용자가 KMS 키를 생성할 수 있도록 허용](#iam-policy-example-create-key)
+ [사용자가 특정의 KMS 키를 사용하여 암호화 및 복호화하도록 허용 AWS 계정](#iam-policy-example-encrypt-decrypt-one-account)
+ [사용자가 특정 및 리전의 모든 KMS 키를 사용하여 암호화 AWS 계정 및 복호화할 수 있도록 허용](#iam-policy-example-encrypt-decrypt-one-account-one-region)
+ [사용자가 특정 KMS 키로 암호화와 해독을 수행하도록 허용](#iam-policy-example-encrypt-decrypt-specific-cmks)
+ [사용자가 KMS 키를 비활성화하거나 삭제하지 못하도록 차단](#iam-policy-example-deny-disable-delete)

## 사용자가 AWS KMS 콘솔에서 KMS 키를 볼 수 있도록 허용
<a name="iam-policy-example-read-only-console"></a>

다음 IAM 정책은 사용자가 AWS KMS 콘솔에 대한 읽기 전용 액세스를 허용합니다. 이러한 권한이 있는 사용자는의 모든 KMS 키를 볼 수 AWS 계정있지만 KMS 키를 생성하거나 변경할 수는 없습니다.

**AWS 관리형 키** 및 **고객 관리형 키** 페이지에서 KMS 키를 보려면, 키에 태그나 별칭이 없더라도 위탁자에게 [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html), [kms:ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 및 [tag:GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html) 권한이 필요합니다. 나머지 사용 권한, 특히 [kms:DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)는 KMS 키 세부 정보 페이지에서 선택적 KMS 키 테이블 열 및 데이터를 보는 데 필요합니다. [iam:ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 및 [iam:ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) 권한은 오류 없이 기본 보기에 키 정책을 표시하는 데 필요합니다. **사용자 지정 키 스토어** 페이지의 데이터와 사용자 지정 키 저장소의 KMS 키에 대한 세부 정보를 보려면 보안 주체에 [kms:DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 권한도 필요합니다.

사용자의 콜솔 액세스를 특정 KMS 키로 제한하면 콘솔에서 보이지 않는 각 KMS 키에 대한 오류를 표시합니다.

이 정책에는 두 가지 정책 설명이 포함됩니다. 첫 번째 정책 설명의 `Resource` 요소는 예제 AWS 계정의 모든 리전에 있는 모든 KMS 키에 대해 지정된 권한을 허용합니다. 콘솔 뷰어는 AWS KMS 콘솔이 보안 주체의 계정에 KMS 키만 표시하므로 추가 액세스가 필요하지 않습니다. 다른에서 KMS 키를 볼 수 있는 권한이 있는 경우에도 마찬가지입니다 AWS 계정. 나머지 AWS KMS 및 IAM 권한은 특정 KMS 키에 적용되지 않으므로 `"Resource": "*"` 요소가 필요합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ReadOnlyAccessForAllKMSKeysInAccount",
      "Effect": "Allow",
      "Action": [
        "kms:GetPublicKey",        
        "kms:GetKeyRotationStatus",
        "kms:GetKeyPolicy",
        "kms:DescribeKey",
        "kms:ListKeyPolicies",
        "kms:ListResourceTags",
        "tag:GetResources"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "ReadOnlyAccessForOperationsWithNoKMSKey",
      "Effect": "Allow",
      "Action": [
        "kms:ListKeys",
        "kms:ListAliases",
        "iam:ListRoles",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 사용자가 KMS 키를 생성할 수 있도록 허용
<a name="iam-policy-example-create-key"></a>

다음 IAM 정책은 사용자가 모든 유형의 KMS 키를 만들 수 있도록 허용합니다. `CreateKey` 작업에서 특정 AWS KMS 리소스(KMS 키 또는 별칭)를 사용하지 않기 `*` 때문에 `Resource` 요소의 값은 입니다.

사용자를 특정 유형의 KMS 키로 제한하려면 [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec), [kms:KeyUsage](conditions-kms.md#conditions-kms-key-usage), [kms:KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 조건 키를 사용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "kms:CreateKey",
    "Resource": "*"
  }
}
```

------

키를 만드는 보안 주체에게는 몇 가지 관련 사용 권한이 필요할 수 있습니다.
+ **kms:PutKeyPolicy** — `kms:CreateKey` 권한이 있는 보안 주체는 KMS 키에 대한 초기 키 정책을 설정할 수 있습니다. 그러나, `CreateKey` 호출자는 KMS 키 정책을 변경할 수 있는 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 권한이 있어야 하고, 권장되지 않는 `CreateKey`의 `BypassPolicyLockoutSafetyCheck` 파라미터를 지정해야 합니다. `CreateKey` 호출자는 IAM 정책에서 KMS 키에 대한 `kms:PutKeyPolicy` 권한을 가져오거나 생성 중인 KMS 키의 키 정책에 이 권한을 포함할 수 있습니다.
+ **kms:TagResource** — `CreateKey` 작업 중에 KMS 키에 태그를 추가하려면 `CreateKey` 호출자는 IAM 정책에서 [kms:TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 권한이 있어야 합니다. 새 KMS 키의 키 정책에 이 권한을 포함시키는 것만으로는 충분하지 않습니다. 그러나, `CreateKey` 호출자가 초기 키 정책에 `kms:TagResource`를 포함하는 경우 KMS 키가 생성된 후 별도의 호출에서 태그를 추가할 수 있습니다.
+ **kms:CreateAlias** - AWS KMS 콘솔에서 KMS 키를 생성하는 보안 주체는 KMS 키 및 별칭에 대해 [kms:CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 권한이 있어야 합니다. (콘솔은 `CreateKey`, `CreateAlias`를 각각 한 번씩, 두 번 호출합니다.) IAM 정책에서 별칭 권한을 제공해야 합니다. 키 정책 또는 IAM 정책에서 KMS 키 권한을 제공할 수 있습니다. 자세한 내용은 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하세요.

외에도 다음 IAM 정책은 `kms:CreateKey`의 모든 KMS 키에 대한 `kms:TagResource` 권한 AWS 계정 과 계정의 모든 별칭에 대한 `kms:CreateAlias` 권한을 제공합니다. 또한 IAM 정책에서만 제공할 수 있는 몇 가지 유용한 읽기 전용 권한도 포함되어 있습니다.

이 IAM 정책에는 키 정책에서 설정할 수 있는 권한 또는 기타 `kms:PutKeyPolicy` 권한이 포함되어 있지 않습니다. 하나의 KMS 키에만 적용되는 키 정책에 이러한 권한을 설정하는 것이 [모범 사례](iam-policies-best-practices.md)입니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPermissionsForParticularKMSKeys",
      "Effect": "Allow",
      "Action": "kms:TagResource",
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMPermissionsForParticularAliases",
      "Effect": "Allow",
      "Action": "kms:CreateAlias",
      "Resource": "arn:aws:kms:*:111122223333:alias/*"
    },
    {
      "Sid": "IAMPermissionsForAllKMSKeys",
      "Effect": "Allow",
      "Action": [
        "kms:CreateKey",
        "kms:ListKeys",
        "kms:ListAliases"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 사용자가 특정의 KMS 키를 사용하여 암호화 및 복호화하도록 허용 AWS 계정
<a name="iam-policy-example-encrypt-decrypt-one-account"></a>

다음 IAM 정책은 사용자가 AWS 계정 111122223333의 모든 KMS 키로 데이터를 암호화하고 복호화할 수 있도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:*:111122223333:key/*"
  }
}
```

------

## 사용자가 특정 및 리전의 모든 KMS 키를 사용하여 암호화 AWS 계정 및 복호화할 수 있도록 허용
<a name="iam-policy-example-encrypt-decrypt-one-account-one-region"></a>

다음 IAM 정책은 사용자가 미국 서부(오레곤) 리전의에 있는 AWS 계정 `111122223333` 모든 KMS 키로 데이터를 암호화하고 복호화할 수 있도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/*"
    ]
  }
}
```

------

## 사용자가 특정 KMS 키로 암호화와 해독을 수행하도록 허용
<a name="iam-policy-example-encrypt-decrypt-specific-cmks"></a>

다음 IAM 정책은 사용자가 `Resource` 요소에 지정된 두 개의 KMS 키를 사용하여 데이터를 암호화하고 해독할 수 있도록 허용합니다. IAM 정책 설명에서 KMS 키를 지정할 때 KMS 키의 [키 ARN](concepts.md#key-id-key-ARN)을 사용해야 합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt"
    ],
    "Resource": [
      "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "arn:aws:kms:us-west-2:111122223333:key/01234abc-d12a-b34c-d56e-f1234567890a'"
    ]
  }
}
```

------

## 사용자가 KMS 키를 비활성화하거나 삭제하지 못하도록 차단
<a name="iam-policy-example-deny-disable-delete"></a>

다음 IAM 정책은 다른 IAM 정책이나 키 정책에 관련 권한이 있더라도 사용자가 KMS 키를 비활성화하거나 삭제하는 것을 금지합니다. 권한을 명시적으로 거부하는 정책이 동일한 권한을 명시적으로 허용하는 정책을 비롯한 다른 모든 정책을 무시합니다. 자세한 내용은 [AWS KMS 권한 문제 해결](policy-evaluation.md) 단원을 참조하십시오.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Deny",
    "Action": [
      "kms:DisableKey",
      "kms:ScheduleKeyDeletion"
    ],
    "Resource": "*"
  }
}
```

------

# 의 리소스 제어 정책 AWS KMS
<a name="resource-control-policies"></a>

리소스 제어 정책(RCPs)은 조직의 AWS 리소스에 대한 예방 제어를 적용하는 데 사용할 수 있는 조직 정책의 한 유형입니다. RCPs 사용하면 AWS 리소스에 대한 외부 액세스를 대규모로 중앙에서 제한할 수 있습니다. RCP는 서비스 제어 정책(SCP)을 보완합니다. SCPs를 사용하여 조직의 IAM 역할 및 사용자에 대한 최대 권한을 중앙에서 설정할 수 있지만, RCPs를 사용하여 조직의 AWS 리소스에 대한 최대 권한을 중앙에서 설정할 수 있습니다.

조직의 고객 관리형 KMS 키에 대한 권한을 관리하기 위해 RCP를 사용할 수 있습니다. RCP만으로는 고객 관리형 KMS 키에 대한 권한을 부여하기에 충분하지 않습니다. RCP는 어떤 권한도 부여하지 않습니다. RCP는 권한 가드레일을 정의하거나 영향을 받는 계정의 리소스에 대해 주체가 수행할 수 있는 작업에 제한을 설정합니다. 관리자는 실제로 권한을 부여하기 위해 IAM 역할 또는 사용자에게 자격 증명 기반 정책을 연결하거나 키 정책을 연결해야 합니다.

**참고**  
조직의 리소스 제어 정책은 [AWS 관리형 키](concepts.md#aws-managed-key)에 적용되지 않습니다.  
AWS 관리형 키 는 AWS 서비스에서 사용자를 대신하여 생성, 관리 및 사용되므로 해당 권한을 변경하거나 관리할 수 없습니다.

**자세히 알아보기**
+ RCP에 대한 일반적인 정보를 더 알아보려면 *AWS Organizations 사용 설명서*의 [리소스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ RCP를 정의하는 방법(예제 포함)에 대한 자세한 내용은 *AWS Organizations 사용 설명서*의 [RCP 구문](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps_syntax.html)을 참조하세요.

다음 예시는 조직 내에서 고객 관리형 키에 대한 외부 위탁자의 액세스를 방지하기 위해 RCP를 사용하는 방법을 보여줍니다. 이 정책은 예시일 뿐이며 고유한 비즈니스 및 보안 요구 사항에 맞게 조정해야 합니다. 예를 들어 비즈니스 파트너의 액세스를 허용하도록 정책을 사용자 지정해야 할 수 있습니다. 자세한 내용은 [데이터 경계 정책 예제 리포지토리](https://github.com/aws-samples/data-perimeter-policy-examples/tree/main/resource_control_policies)를 참조하세요.

**참고**  
`Action` 권한은 `kms:RetireGrant` 요소가 와일드카드(\$1)로 지정된 경우에도 RCP에서 유효하지 않습니다.  
`kms:RetireGrant` 권한을 결정하는 방법에 대한 자세한 내용은 [권한 부여 사용 중지 및 취소](grant-delete.md) 페이지를 참조하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceIdentityPerimeter",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:PrincipalOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        }
    ]
}
```

------

다음 예제 RCP에서는 요청이 조직에서 시작된 경우에만 AWS 서비스 보안 주체가 고객 관리형 KMS 키에 액세스할 수 있도록 요구합니다. 이 정책은 `aws:SourceAccount`이 있는 요청에만 해당 통제를 적용합니다. 이렇게 하면 `aws:SourceAccount`를 사용할 필요가 없는 서비스 통합이 영향을 받지 않습니다. 요청 컨텍스트에 `aws:SourceAccount`가 있는 경우 `Null` 조건이 `true`로 평가되어 `aws:SourceOrgID` 키가 적용됩니다.

혼동된 대리자 문제에 관한 자세한 내용은 *IAM 사용 설명서*의 [혼동된 대리자 문제](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 참조하세요.

```
```

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RCPEnforceConfusedDeputyProtection",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "kms:*",
            "Resource": "*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "aws:SourceOrgID": "my-org-id"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "true"
                },
                "Null": {
                    "aws:SourceAccount": "false"
                }
            }
        }
    ]
}
```

------

# 의 권한 부여 AWS KMS
<a name="grants"></a>

*권한 부여*는 [AWS 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal)가 암호화 작업에서 KMS 키를 사용할 수 있도록 하는 정책 도구입니다. 또한 KMS 키(`DescribeKey`)를 보고 권한 부여를 생성 및 관리할 수 있습니다. KMS 키에 대한 액세스 권한을 부여할 때 [키 정책](key-policies.md) 및 [IAM 정책](iam-policies.md)과 함께 권한 부여가 고려됩니다. 권한 부여는 키 정책이나 IAM 정책을 변경하지 않고 권한을 생성하고 삭제할 수 있기 때문에 임시 권한에 자주 사용됩니다.

권한 부여는 저장 데이터를 암호화 AWS KMS 하기 위해와 통합되는 AWS 서비스에서 일반적으로 사용됩니다. 서비스는 계정의 사용자를 대신하여 권한 부여를 만들고, 권한을 사용하고, 작업이 완료되는 즉시 권한 부여를 폐기합니다. AWS 서비스에서 권한 부여를 사용하는 방법에 대한 자세한 내용은 서비스 사용 설명서 또는 개발자 안내서의 *저장 시 암호화* 주제를 참조하세요.

권한 부여는 매우 유연하고 유용한 액세스 제어 메커니즘입니다. KMS 키에 대한 권한 부여를 생성하면 권한 부여에 지정된 모든 조건이 충족되는 경우 권한 부여를 통해 피부여자 보안 주체가 KMS 키에 대해 지정된 권한 부여 작업을 호출할 수 있습니다.
+ 각 권한 부여를 통해 정확히 하나의 KMS 키에 액세스할 수 있습니다. 다른 AWS 계정에서 KMS 키에 대한 권한 부여를 생성할 수 있습니다.
+ 권한 부여는 KMS 키에 대한 액세스를 허용할 수 있지만 액세스를 거부할 수는 없습니다.
+ 각 권한 부여에는 하나의 [피부여자 보안 주체](#terms-grantee-principal)가 있습니다. 피부여자 보안 주체는 KMS 키 AWS 계정 와 동일한 또는 다른 계정에서 하나 이상의 자격 증명을 나타낼 수 있습니다.
+ 권한 부여는 [권한 부여 작업](#terms-grant-operations)만 허용할 수 있습니다. 권한 부여 작업은 권한 부여의 KMS 키로 지원되어야 합니다. 지원되지 않는 작업을 지정하면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 요청이 `ValidationError` 예외와 함께 실패합니다.
+ 피부여자 보안 주체는 권한이 키 정책 또는 IAM 정책에서 제공되는 경우와 마찬가지로 권한 부여를 지정하지 않고 권한 부여가 부여하는 권한을 사용할 수 있습니다. 그러나 AWS KMS API는 [최종 일관성](#terms-eventual-consistency) 모델을 따르기 때문에 권한 부여를 생성, 사용 중지 또는 취소할 때 변경 사항이 전체에 적용되기 전에 잠시 지연될 수 있습니다 AWS KMS. 권한 부여에서 권한을 즉시 사용하려면 [권한 부여 토큰](using-grant-token.md)을 사용하십시오.
+ 권한이 부여된 보안 주체는 권한 부여를 삭제([사용 중지](#terms-retire-grant) 또는 [취소](#terms-revoke-grant))할 수 있습니다. 권한 부여를 삭제하면 권한 부여가 허용한 모든 권한이 제거됩니다. 권한 부여를 실행 취소하기 위해 추가하거나 제거할 정책을 파악할 필요가 없습니다.
+ AWS KMS 는 각 KMS 키에 대한 권한 부여 수를 제한합니다. 자세한 내용은 [KMS 키당 권한 부여: 50,000](resource-limits.md#grants-per-key)을 참조하세요.

권한 부여를 생성할 때와 다른 사람에게 권한 부여 생성 권한을 부여할 때는 주의해야 합니다. 권한 부여를 생성할 수 있는 권한은 정책을 설정할 수 있는 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 권한을 사용하여 정책을 설정할 수 있습니다.
+ KMS 키(`kms:CreateGrant`)에 대한 권한 부여를 생성할 권한이 있는 사용자는 권한 부여를 사용하여 AWS 서비스를 포함한 사용자 및 역할이 KMS 키를 사용하도록 허용할 수 있습니다. 보안 주체는 자신의 자격 증명 AWS 계정 이거나 다른 계정 또는 조직의 자격 증명일 수 있습니다.
+ 권한 부여는 AWS KMS 작업의 하위 집합만 허용할 수 있습니다. 권한 부여를 사용하여 보안 주체가 KMS 키를 보고, 암호화 작업에 사용하고, 권한 부여를 만들고 사용 중지하도록 허용할 수 있습니다. 자세한 내용은 [권한 부여 작업](#terms-grant-operations) 섹션을 참조하세요. [권한 부여 제약 조건](create-grant-overview.md#grant-constraints)을 사용하여 대칭 암호화 키에 대한 권한 부여의 사용 권한을 제한할 수 있습니다.
+ 보안 주체는 키 정책 또는 IAM 정책에서 권한 부여를 생성할 수 있는 권한을 가질 수 있습니다. 정책에서 `kms:CreateGrant` 권한을 받은 보안 주체는 KMS 키에 대한 [권한 부여 작업](#terms-grant-operations)에 대한 권한을 생성할 수 있습니다. 이러한 보안 주체는 키에 대해 부여한 권한이 필요하지 않습니다. 정책에서 `kms:CreateGrant` 권한을 허용하면 [정책 조건](grant-authorization.md)을 사용하여 이 권한을 제한할 수 있습니다.
+ 보안 주체는 권한 부여에서 권한 부여를 만들 수 있는 권한을 가져올 수도 있습니다. 이러한 위탁자는 정책에서 다른 권한이 있더라도 부여된 권한만 위임할 수 있습니다. 자세한 내용은 [CreateGrant 권한 부여](create-grant-overview.md#grant-creategrant)을 참조하세요.

## 권한 부여 개념
<a name="grant-concepts"></a>

권한 부여를 효과적으로 사용하려면 AWS KMS 가 사용하는 용어와 개념을 이해해야 합니다.

**권한 부여 제약**  <a name="terms-grant-constraint"></a>
권한 부여의 권한을 제한하는 조건입니다. 현재는 암호화 작업 요청의 암호화 [컨텍스트](encrypt_context.md)를 기반으로 하는 권한 부여 제약 조건을 AWS KMS 지원합니다. 자세한 내용은 [권한 부여 제약 사용](create-grant-overview.md#grant-constraints)을 참조하세요.

**권한 부여 ID**  <a name="terms-grant-id"></a>
KMS 키에 대한 권한 부여의 고유 식별자입니다. [키 식별자](concepts.md#key-id)와 함께 권한 부여 ID를 사용하여 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 또는 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 요청에서 권한 부여를 식별할 수 있습니다.

**권한 부여 작업**  <a name="terms-grant-operations"></a>
권한 부여에서 허용할 수 있는 AWS KMS 작업입니다. 다른 작업을 지정하면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 요청이 `ValidationError` 예외와 함께 실패합니다. [권한 부여 토큰](#grant_token)을 수락하는 작업이기도 합니다. 이러한 권한에 대한 자세한 내용은 [AWS KMS 권한](kms-api-permissions-reference.md) 섹션을 참조하세요.  
이러한 권한 부여 작업은 실제로 작업을 사용할 수 있는 권한을 나타냅니다. 따라서 `ReEncrypt` 작업의 경우 `ReEncryptFrom`, `ReEncryptTo` 또는 둘 다 `ReEncrypt*`를 지정할 수 있습니다.  
권한 부여 작업은 다음과 같습니다.  
+ 암호화 작업
  + [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
  + [암호화](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
  + [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
  + [ReEncryptFrom](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [ReEncryptTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
  + [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
  + [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
  + [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)
+ 기타 작업
  + [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
  + [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
  + [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
  + [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
허용한 권한 부여 작업은 권한 부여의 KMS 키로 지원되어야 합니다. 지원되지 않는 작업을 지정하면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 요청이 `ValidationError` 예외와 함께 실패합니다. 예를 들어 대칭 암호화 KMS 키에 대한 권한 부여는 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html), [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html), [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 또는 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 작업을 허용하지 않습니다. 비대칭 KMS 키에 대한 권한 부여는 데이터 키 또는 데이터 키 페어를 생성하는 작업을 허용하지 않습니다.

**권한 부여 토큰**  <a name="grant_token"></a>
 AWS KMS API는 [최종 일관성](#terms-eventual-consistency) 모델을 따릅니다. 권한 부여를 생성할 때, 변경 사항이 AWS KMS전체에 적용되기까지 잠깐의 지연이 있을 수 있습니다. 변경 사항이 시스템 전체에 전파되는 데에는 일반적으로 몇 초도 걸리지 않지만 경우에 따라 몇 분 정도 걸릴 수도 있습니다. 시스템에 전체에 완전히 전파하기 전에 권한 부여를 사용하려고 하면 액세스 거부 오류가 발생할 수 있습니다. 권한 부여 토큰을 사용하면 권한 부여를 참조하고 즉시 권한 부여 권한을 사용할 수 있습니다.  
*권한 부여 토큰*은 권한 부여를 나타내는 고유하고 암호화되지 않은 가변 길이 base64 인코딩 문자열입니다. 권한 부여 토큰을 사용하여 [권한 부여 작업](#terms-grant-operations)에서 권한 부여를 식별할 수 있습니다. 그러나 토큰 값은 해시 다이제스트이므로 권한 부여에 대한 세부 정보는 공개되지 않습니다.  
권한 부여 토큰은 권한 부여가 AWS KMS전체에 완전히 전파될 때까지만 사용하도록 설계되었습니다. 그 후, [피부여자 보안 주체](#terms-grantee-principal)는 권한 부여 토큰이나 권한 부여에 대한 다른 증거를 제공하지 않고 권한 부여의 권한을 사용할 수 있습니다. 권한 부여 토큰은 언제든지 사용할 수 있지만 권한 부여가 최종적으로 일관되면는 권한 부여 토큰이 아닌 권한을 결정하는 데 권한 부여를 AWS KMS 사용합니다.  
예를 들어 다음 명령은 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 작업을 사용합니다. 권한 부여 토큰을 사용하여 지정된 KMS 키에서 `GenerateDataKey`를 호출할 수 있는 권한을 호출자(피부여자 보안 주체)에게 부여하는 권한 부여를 나타냅니다.  

```
$ aws kms generate-data-key \
        --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
        --key-spec AES_256 \
        --grant-token $token
```
권한 부여 토큰을 사용하여 권한 부여를 관리하는 작업에서 권한 부여를 식별할 수도 있습니다. 예를 들어, [사용 중지 보안 주체](#terms-retiring-principal)는 [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 작업을 호출할 때 권한 부여 토큰을 사용할 수 있습니다.  

```
$ aws kms retire-grant \
        --grant-token $token
```
`CreateGrant`는 권한 부여 토큰을 반환하는 유일한 작업입니다. 다른 AWS KMS 작업이나 CreateGrant 작업에 대한 [CloudTrail 로그 이벤트](ct-creategrant.md)에서는 권한 부여 토큰을 가져올 수 없습니다. [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 및 [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html) 작업은 [권한 부여 ID](#terms-grant-id)를 반환하지만 권한 부여 토큰은 아닙니다.  
자세한 내용은 [권한 부여 토큰 사용](using-grant-token.md) 섹션을 참조하세요.

**피부여자 보안 주체**  <a name="terms-grantee-principal"></a>
권한 부여에 지정된 권한을 가져오는 ID입니다. 각 권한 부여에는 하나의 피부여자 보안 주체가 있지만 피부여자 보안 주체는 여러 ID를 나타낼 수 있습니다.  
피부여자 보안 주체는 AWS 계정 (루트), [IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html), [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html), [페더레이션 역할 또는 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) 또는 수임된 역할 사용자를 포함한 모든 보안 AWS 주체일 수 있습니다. 피부여자 보안 주체는 KMS 키와 동일한 계정 또는 다른 계정에 있을 수 있습니다. 그러나 피부여자 보안 주체는 [서비스 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services), [IAM 그룹](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) 또는 [AWS 조직](https://docs.aws.amazon.com/organizations/latest/userguide/)일 수 없습니다.  
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

**권한 부여 사용 중지**  <a name="terms-retire-grant"></a>
권한 부여를 종료합니다. 권한 사용을 마치면 권한 부여를 사용 중지합니다.  
권한 부여를 취소하거나 사용 중지하면 권한 부여가 삭제됩니다. 그러나 사용 중지는 권한 부여에 지정된 보안 주체에 의해 수행됩니다. 취소는 일반적으로 키 관리자가 수행합니다. 자세한 내용은 [권한 부여 사용 중지 및 취소](grant-delete.md) 섹션을 참조하세요.

**사용 중지 보안 주체**  <a name="terms-retiring-principal"></a>
[권한 부여를 사용 중지](#terms-retire-grant)할 수 있는 보안 주체입니다. 권한 부여에서 사용 중지 보안 주체를 지정할 수 있지만 필수는 아닙니다. 사용 중지 보안 주체는 IAM 사용자, IAM 역할 AWS 계정, 페더레이션 사용자, 수임된 역할 사용자를 포함한 모든 보안 AWS 주체일 수 있습니다. 사용 중지 보안 주체는 KMS 키와 동일한 계정에 있거나 다른 계정에 있을 수 있습니다.  
IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.
권한 부여에 지정된 보안 주체를 사용 중지하는 것 외에도 권한 부여가 생성된 AWS 계정 에서 권한 부여를 사용 중지할 수 있습니다. 권한 부여가 `RetireGrant` 작업을 허용하는 경우 [피부여자 보안 주체](#terms-grantee-principal) 권한 부여를 사용 중지할 수 있습니다. 또한 사용 중지된 보안 주체 AWS 계정 인 AWS 계정 또는는 동일한의 IAM 보안 주체에 권한 부여 사용 중지 권한을 위임할 수 있습니다 AWS 계정. 자세한 내용은 [권한 부여 사용 중지 및 취소](grant-delete.md)을 참조하세요.

**권한 부여 취소**  <a name="terms-revoke-grant"></a>
권한 부여를 종료합니다. 권한 부여를 취소하면 권한 부여가 허용하는 권한을 적극적으로 거부할 수 있습니다.  
권한 부여를 취소하거나 사용 중지하면 권한 부여가 삭제됩니다. 그러나 사용 중지는 권한 부여에 지정된 보안 주체에 의해 수행됩니다. 취소는 일반적으로 키 관리자가 수행합니다. 자세한 내용은 [권한 부여 사용 중지 및 취소](grant-delete.md) 섹션을 참조하세요.

**(권한 부여의) 최종 일관성**  <a name="terms-eventual-consistency"></a>
 AWS KMS API는 [최종 일관성](https://en.wikipedia.org/wiki/Eventual_consistency) 모델을 따릅니다. 권한 부여를 생성, 사용 중지 또는 철회할 때, 변경 사항이 AWS KMS전체에 적용되기까지 잠깐의 지연이 있을 수 있습니다. 변경 사항이 시스템 전체에 전파되는 데에는 일반적으로 몇 초도 걸리지 않지만 경우에 따라 몇 분 정도 걸릴 수도 있습니다.  
예기치 않은 오류가 발생하는 경우 이 짧은 지연을 의식하게 됩니다. 예를 들어 권한 부여가 전체적으로 알려지기 전에 새 권한 부여를 관리하거나 새 권한 부여에서 권한을 사용하려고 AWS KMS하면 액세스 거부 오류가 발생할 수 있습니다. 권한 부여를 사용 중지하거나 취소하는 경우 권한 부여가 완전히 삭제될 때까지 피부여자 보안 주체가 잠시 동안 해당 권한을 계속 사용할 수 있습니다. 일반적인 전략은 요청을 재시도하는 것이며, 일부 AWS SDKs 포함됩니다.  
AWS KMS 에는 이러한 짧은 지연을 완화하는 기능이 있습니다.  
+ 새 권한 부여에서 권한을 즉시 사용하려면 [권한 부여 토큰](using-grant-token.md)을 사용하십시오. 권한 부여 토큰을 사용하여 모든 [권한 부여 작업](#terms-grant-operations)에서 권한 부여를 권한 부여를 참조할 수 있습니다. 지침은 [권한 부여 토큰 사용](using-grant-token.md) 섹션을 참조하세요.
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에는 재시도 작업이 중복 부여를 생성하지 못하도록 하는 `Name` 파라미터가 있습니다.
권한 부여 토큰은 서비스의 모든 엔드포인트가 새 권한 부여 상태로 업데이트될 때까지 권한 부여의 유효성을 대체합니다. 대부분의 경우 최종 일관성은 5분 이내에 달성됩니다.
자세한 내용은 [AWS KMS 결과적 일관성](accessing-kms.md#programming-eventual-consistency)을 참조하세요.

# AWS KMS 권한 부여 모범 사례
<a name="grant-best-practices"></a>

AWS KMS 에서는 권한 부여를 생성, 사용 및 관리할 때 다음 모범 사례를 권장합니다.
+ 권한 부여의 권한을 피부여자 보안 주체에게 필요한 권한으로 제한합니다. [최소 권한 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) 원칙을 사용합니다.
+ IAM 역할과 같은 특정 피부여자 보안 주체를 사용하고 피부여자에게 필요한 API 작업만 사용할 수 있는 권한을 부여합니다.
+ 암호화 컨텍스트 [권한 부여 제약 조건](grants.md#terms-grant-constraint) 을 사용하여 호출자가 의도한 목적으로 KMS 키를 사용하고 있는지 확인합니다. 요청에서 암호화 컨텍스트를 사용하여 데이터를 보호하는 방법에 대한 자세한 내용은 *AWS 보안 블로그*[의 AWS Key Management Service 및 EncryptionContext를 사용하여 암호화된 데이터의 무결성을 보호하는 방법을 참조하세요](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/).
**작은 정보**  
가능할 때마다 [EncryptionContextEqual](create-grant-overview.md#grant-constraints) 제약 조건을 사용하십시오. [EncryptionContextSubset](create-grant-overview.md#grant-constraints) 권한 부여 제약 조건은 올바르게 사용하기가 더 어렵습니다. 그것을 사용해야 하는 경우 문서를 주의 깊게 읽고 권한 부여 제약 조건을 테스트해 의도한대로 작동하는지 확인하십시오.
+ 중복 권한 부여를 삭제합니다. 중복 권한 부여는 동일한 키 ARN, API 작업, 피부여자 보안 주체, 암호화 컨텍스트 및 이름을 갖습니다. 원래 권한 부여를 사용 중지 또는 취소하지만 중복된 권한 부여를 그대로 두는 경우 남은 중복 권한 부여가 의도하지 않은 권한 에스컬레이션을 구성합니다. `CreateGrant` 요청을 재시도할 때 중복 권한 부여를 방지하려면 [`Name` 파라미터](create-grant-overview.md#grant-create)를 사용하십시오. 중복 권한 부여를 검색하려면 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 작업을 사용합니다. 실수로 중복 권한 부여를 생성한 경우 가능한 한 빨리 사용을 중지하거나 취소합니다.
**참고**  
[AWS 관리형 키](concepts.md#aws-managed-key)에 대한 권한 부여는 중복처럼 보일 수 있지만 피부여자 보안 주체가 다릅니다.  
`ListGrants` 응답의 `GranteePrincipal` 필드에는 일반적으로 권한 부여의 피부여자 보안 주체가 포함됩니다. 그러나 권한 부여의 피부여자 보안 주체가 AWS 서비스인 경우 `GranteePrincipal` 필드에는 여러 피부여자 [보안 주체를 나타낼 수 있는 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services) 보안 주체가 포함됩니다.
+ 권한 부여는 자동으로 만료되지 않습니다. 권한이 더 이상 필요하지 않으면 즉시 [권한 부여 사용을 중지 또는 취소](grant-delete.md)합니다. 삭제되지 않은 권한 부여는 암호화된 리소스에 대한 보안 위험을 초래할 수 있습니다.

# 권한 부여에 대한 액세스 제어
<a name="grant-authorization"></a>

주요 정책, IAM 정책 및 권한부여에서 권한 부여를 생성하고 관리하는 작업에 대한 액세스를 제어할 수 있습니다. 권한 부여에서 `CreateGrant` 권한을 받은 보안 주체는 [더 제한된 권한 부여 권한](create-grant-overview.md#grant-creategrant)을 갖습니다.


| API 작업 | 키 정책 또는 IAM 정책 | 권한 부여 | 
| --- | --- | --- | 
| CreateGrant | ✓ | ✓ | 
| ListGrants | ✓ | - | 
| ListRetirableGrants | ✓ | - | 
| 권한 부여 사용 중지 | (제한됨. [권한 부여 사용 중지 및 취소](grant-delete.md) 참조) | ✓ | 
| RevokeGrant | ✓ | - | 

키 정책 또는 IAM 정책을 사용하여 권한 부여를 생성하고 관리하는 작업에 대한 액세스를 제어하는 경우 다음 정책 조건 중 하나 이상을 사용하여 권한을 제한할 수 있습니다.는 다음 권한 부여 관련 조건 키를 모두 AWS KMS 지원합니다. 자세한 정보와 예제는 [AWS KMS 조건 키](conditions-kms.md) 섹션을 참조하세요.

[ kms:GrantConstraintType](conditions-kms.md#conditions-kms-grant-constraint-type)  
권한 부여에 지정된 권한 [부여 제약 조건](create-grant-overview.md#grant-constraints)이 포함된 경우에만 보안 주체가 권한 부여를 생성할 수 있습니다.

[kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource)  
[와 통합된 AWS 서비스가 보안 주체를 대신하여 요청을 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration) 보내는 `RevokeGrant` 경우에만 보안 주체가 `ListGrants`, 또는 `CreateGrant`를 호출하도록 허용합니다.

[kms:GrantOperations](conditions-kms.md#conditions-kms-grant-operations)  
보안 주체가 권한 부여를 생성할 수 있도록 허용하지만 권한 부여를 지정된 작업으로 제한합니다.

[kms:GranteePrincipal](conditions-kms.md#conditions-kms-grantee-principal)  
보안 주체가 지정된 [피부여자 보안 주체](grants.md#terms-grantee-principal)에 대해서만 권한 부여를 생성하도록 허용합니다.

[kms:RetiringPrincipal](conditions-kms.md#conditions-kms-retiring-principal)  
권한 부여가 특정 [사용 중지 보안 주체](grants.md#terms-retiring-principal)를 지정하는 경우에만 보안 주체가 권한 부여를 생성하도록 허용합니다.

# 권한 부여 생성
<a name="create-grant-overview"></a>

권한 부여를 생성하기 전에 권한 부여 사용자 정의 옵션에 대해 알아봅니다. *권한 부여 제약 조건*을 사용하여 권한 부여의 사용 권한을 제한할 수 있습니다. 또한 `CreateGrant` 권한 부여에 대해 알아보십시오. 권한 부여에서 권한 부여를 생성할 수 있는 권한을 받은 보안 주체는 생성할 수 있는 권한이 제한됩니다.

**Topics**
+ [권한 부여 생성](#grant-create)
+ [CreateGrant 권한 부여](#grant-creategrant)

## 권한 부여 생성
<a name="grant-create"></a>

권한 부여를 생성하려면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업을 호출합니다. KMS 키, [피부여자 보안 주체](grants.md#terms-grantee-principal) 및 허용된 [권한 부여 작업](grants.md#terms-grant-operations) 목록을 지정합니다. [사용 중지 보안 주체](grants.md#terms-retiring-principal)를 선택적으로 지정할 수도 있습니다. 권한 부여를 사용자 지정하려면 선택적 `Constraints` 매개 변수를 사용하여 [권한 부여 제약](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)을 정의합니다.

권한 부여를 생성, 폐기 또는 취소할 때 AWS KMS전체에서 변경 내용을 사용할 수 있을 때까지 짧은 지연(보통 5분 미만)이 있을 수 있습니다. 자세한 내용은 [결과적 일관성(권한 부여용)](grants.md#terms-eventual-consistency)을 참조하세요.

예를 들어 다음 `CreateGrant` 명령은 `keyUserRole` 역할을 수임할 권한이 있는 사용자가 지정된 [대칭 KMS 키](symm-asymm-choose-key-spec.md#symmetric-cmks)에서 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 호출할 수 있도록 허용하는 권한 부여를 생성합니다. 이 권한 부여는 `RetiringPrincipal` 파라미터를 사용하여 권한 부여를 중단시킬 수 있는 보안 주체를 지정합니다. 또한 요청의 [암호화 컨텍스트](encrypt_context.md)가 `"Department": "IT"`를 포함하는 경우에만 권한을 허용하는 권한 부여 제약 조건이 포함되어 있습니다.

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

코드가 `CreateGrant` 작업을 다시 시도하거나 [요청을 자동으로 다시 시도하는AWS SDK](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)를 사용하는 경우 [이름](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-Name) 파라미터 옵션을 사용하여 중복 권한 부여의 생성을 방지합니다. 가 이름을 포함하여 기존 권한 부여와 동일한 속성의 권한 부여 `CreateGrant` 요청을 AWS KMS 받으면 요청을 재시도로 인식하고 새 권한 부여를 생성하지 않습니다. `Name` 값을 사용하여 AWS KMS 작업에서 권한 부여를 식별할 수 없습니다.

**중요**  
권한 부여 이름에 기밀 또는 민감한 정보를 포함하지 마십시오. CloudTrail 로그 및 기타 출력에 일반 텍스트로 표시될 수 있습니다.

```
$ aws kms create-grant \
    --name IT-1234abcd-keyUserRole-decrypt \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextSubset={Department=IT}
```

여러 프로그래밍 언어로 권한 부여를 생성하는 방법을 보여주는 코드 예제는 [AWS SDK 또는 CLI와 `CreateGrant` 함께 사용](example_kms_CreateGrant_section.md) 단원을 참조하세요.

### 권한 부여 제약 사용
<a name="grant-constraints"></a>

[권한 부여 제약](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)은 권한 부여를 통해 피부여자 보안 주체에게 부여하는 권한에 대한 조건을 설정합니다. 권한 부여 제약 조건은 [키 정책](key-policies.md) 또는 [IAM 정책](iam-policies.md)에서 [조건 키](policy-conditions.md)를 대신합니다. 각 권한 부여 제약 조건 값은 암호화 컨텍스트 페어를 8개까지 포함할 수 있습니다. 각 권한 부여 제약 조건의 암호화 컨텍스트 값은 384자를 초과할 수 없습니다.

**중요**  
이 필드에 기밀 또는 민감한 정보를 포함하지 마십시오. 이 필드는 CloudTrail 로그 및 기타 출력에 일반 텍스트로 표시될 수 있습니다.

AWS KMS 는 두 가지 권한 부여 제약 조건인 `EncryptionContextEquals` 및를 지원하며`EncryptionContextSubset`, 둘 다 암호화 작업에 대한 요청에서 암호화 [컨텍스트](encrypt_context.md)에 대한 요구 사항을 설정합니다.

암호화 컨텍스트 권한 부여 제약 조건은 암호화 컨텍스트 파라미터가 있는 [권한 부여 작업](grants.md#terms-grant-operations)과 함께 사용하도록 설계되었습니다.
+ 암호화 컨텍스트 제약 조건은 대칭 암호화 KMS 키에 대한 권한 부여에서만 유효합니다. 다른 KMS 키를 사용한 암호화 작업은 암호화 컨텍스트를 지원하지 않습니다.
+ 암호화 컨텍스트 제약 조건은 `DescribeKey` 및 `RetireGrant` 작업에 대해 무시됩니다. `DescribeKey` 및 `RetireGrant`에는 암호화 컨텍스트 파라미터가 없지만 암호화 컨텍스트 제약 조건이 있는 권한 부여에 이러한 작업을 포함할 수 있습니다.
+ `CreateGrant` 작업에 대한 권한 부여에서 암호화 컨텍스트 제약 조건을 사용할 수 있습니다. 암호화 컨텍스트 제약 조건에서는 `CreateGrant` 권한으로 생성된 모든 권한 부여에 동등하게 엄격하거나 더 엄격한 암호화 컨텍스트 제약 조건이 있어야 합니다.

AWS KMS 는 다음과 같은 암호화 컨텍스트 권한 부여 제약 조건을 지원합니다.

**EncryptionContextEquals**  
`EncryptionContextEquals`를 사용하여 허용된 요청에 대한 정확한 암호화 컨텍스트를 지정합니다.  
`EncryptionContextEquals`는 요청의 암호화 컨텍스트 페어가 권한 부여 제약 조건의 암호화 컨텍스트 페어에 대해 정확히 대소문자가 일치해야 합니다. 쌍은 순서에 관계없이 나타날 수 있지만 각 쌍의 키와 값은 다를 수 없습니다.  
예를 들어, `EncryptionContextEquals` 권한 부여 제약 조건에 `"Department": "IT"` 암호화 컨텍스트 페어가 필요한 경우 권한 부여는 요청의 암호화 컨텍스트가 정확히 `"Department": "IT"`인 경우에만 지정된 유형의 요청을 허용합니다.

**EncryptionContextSubset**  
`EncryptionContextSubset`을 사용하여 요청에 특정 암호화 컨텍스트 페어가 포함되도록 요구합니다.  
`EncryptionContextSubset`는 요청에 권한 부여 제약 조건의 모든 암호화 컨텍스트 페어(정확한 대소문자 구분 일치)을 포함해야 하지만 요청에 추가 암호화 컨텍스트 페어가 있을 수도 있습니다. 쌍은 순서에 관계없이 나타날 수 있지만 각 쌍의 키와 값은 다를 수 없습니다.  
예를 들어, `EncryptionContextSubset` 권한 부여 제약 조건에 `Department=IT` 암호화 컨텍스트 페어가 필요한 경우 권한 부여는 요청의 암호화 컨텍스트가 정확히 `"Department": "IT"`인 경우에 지정된 유형의 요청을 허용하거나 다른 암호화 컨텍스트 페어(예: `"Department": "IT","Purpose": "Test"`)와 함께 `"Department": "IT"`를 포함합니다.

대칭 암호화 KMS 키에 대한 권한 부여에서 암호화 컨텍스트 제약 조건을 지정하려면 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업의 `Constraints` 파라미터를 사용합니다. 이 명령이 생성하는 권한 부여는 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 호출할 수 있는 `keyUserRole` 역할 권한을 맡을 권한이 있는 사용자에게 부여합니다. 그러나 이 권한은 `Decrypt` 요청의 암호화 컨텍스트가 `"Department": "IT"` 암호화 컨텍스트 페어인 경우에만 유효합니다.

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --constraints EncryptionContextEquals={Department=IT}
```

결과 권한 부여는 다음과 같습니다. `keyUserRole` 역할에 부여된 권한은 `Decrypt` 요청이 권한 부여 제약 조건에 지정된 동일한 암호화 컨텍스트 페어를 사용하는 경우에만 유효합니다. KMS 키에 대한 권한 부여를 확인하려면 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 작업을 사용합니다.

```
$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "Decrypt"
            ],
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
            "CreationDate": 1568565290.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole"
        }
    ]
}
```

`EncryptionContextEquals` 권한 부여 제약 조건을 충족하려면 `Decrypt` 작업에 대한 요청의 암호화 컨텍스트가 `"Department": "IT"` 페어여야 합니다. 피부여자 보안 주체의 다음과 같은 요청은 `EncryptionContextEquals` 권한 부여 제약 조건을 충족합니다.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

권한 부여 제약 조건이 `EncryptionContextSubset`인 경우 요청의 암호화 컨텍스트 페어는 권한 부여 제약 조건의 암호화 컨텍스트 페어를 포함해야 하지만 요청은 다른 암호화 컨텍스트 페어도 포함할 수 있습니다. 다음 권한 부여 제약 조건에서는 요청의 암호화 컨텍스트 페어 중 하나가 `"Deparment": "IT"`여야 합니다.

```
"Constraints": {
   "EncryptionContextSubset": {
       "Department": "IT"
   }
}
```

피부여자 보안 주체의 다음 요청은 이 예에서 `EncryptionContextEqual` 및 `EncryptionContextSubset` 권한 부여 제약 조건을 모두 충족합니다.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT
```

그러나 피부여자 주체의 다음과 같은 요청은 `EncryptionContextSubset` 권한 부여 제약 조건을 만족하지만 `EncryptionContextEquals` 권한 부여 제약 조건에는 실패합니다.

```
$ aws kms decrypt \
    --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \
    --ciphertext-blob fileb://encrypted_msg \
    --encryption-context Department=IT,Purpose=Test
```

AWS 서비스는에서 KMS 키를 사용할 수 있는 권한을 부여하는 권한 부여에 암호화 컨텍스트 제약 조건을 사용하는 경우가 많습니다 AWS 계정. 예를 들어 Amazon DynamoDB는 다음과 같은 권한 부여를 사용하여 계정에서 DynamoDB용 [AWS 관리형 키](concepts.md#aws-managed-key)를 사용할 수 있는 권한을 얻습니다. 이 권한 부여의 `EncryptionContextSubset` 권한 부여 제약 조건은 권한 부여에 지정된 권한이 요청의 암호화 컨텍스트가 `"subscriberID": "111122223333"` 및 `"tableName": "Services"` 쌍을 포함하는 경우에만 유효하게 만듭니다. 이 권한 부여 제약 조건은 이 권한 부여는 DynamoDB가 AWS 계정에서 특정 테이블에 대해서만 지정된 KMS 키를 사용할 수 있게 허용함을 의미입니다.

이 출력을 가져오려면 계정의 DynamoDB AWS 관리형 키 용에서 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 작업을 실행합니다.

```
$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{
    "Grants": [
        {
            "Operations": [
                "Decrypt",
                "Encrypt",
                "GenerateDataKey",
                "ReEncryptFrom",
                "ReEncryptTo",
                "RetireGrant",
                "DescribeKey"
            ],
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "Constraints": {
                "EncryptionContextSubset": {
                    "aws:dynamodb:tableName": "Services",
                    "aws:dynamodb:subscriberId": "111122223333"
                }
            },
            "CreationDate": 1518567315.0,
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
            "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com",
            "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com",
            "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a",
            "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59"
        }
    ]
}
```

## CreateGrant 권한 부여
<a name="grant-creategrant"></a>

권한 부여에는 `CreateGrant` 호출할 수 있는 권한이 포함될 수 있습니다. 그러나 [피부여자 보안 주체](grants.md#terms-grantee-principal)가 정책이 아닌 부여에서 `CreateGrant`를 호출할 수 있는 권한을 얻으면 해당 권한이 제한됩니다.
+ 피부여자 보안 주체는 상위 권한 부여의 일부 또는 모든 작업을 허용하는 부여만 생성할 수 있습니다.
+ 생성하는 권한 부여의 [권한 부여 제약 조건](#grant-constraints)은 최소한 상위 권한 부여의 제약 조건만큼 엄격해야 합니다.

[정책 조건](grant-authorization.md)에 따라 권한이 제한될 수 있지만 이러한 제한은 정책에서 `CreateGrant` 권한을 받는 보안 주체에게는 적용되지 않습니다.

예를 들면, `GenerateDataKey`, `Decrypt` 및 `CreateGrant` 작업을 호출할 수 있게 하는 권한 부여를 고려하십시오. `CreateGrant` 권한을 허용하는 권한을 *상위 권한 부여*라고 합니다.

```
# The original grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Operations": [
                "GenerateDataKey",
                "Decrypt",
                "CreateGrant
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

피부여자 보안 주체인 exampleUser는 이 권한을 사용하여 `CreateGrant` 및 `Decrypt`와 같이 원래 권한 부여에 지정된 작업의 하위 집합을 포함하는 권한 부여를 생성할 수 있습니다. *하위 권한 부여*는 다른 다른 작업(예: `ScheduleKeyDeletion` 또는 `ReEncrypt`)을 포함할 수 없습니다.

또한, 하위 권한 부여에 대한 [권한 부여 제약 조건 ](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)은 상위 권한 부여만큼 제한적이거나 더 제한적이어야 합니다. 예를 들어, 하위 권한 부여는 상위 권한 부여의 `EncryptionContextSubset` 제한 조건에 쌍을 추가 할 수 있지만 이를 제거 할 수는 없습니다. 하위 권한 부여는 `EncryptionContextSubset` 제약 조건을 `EncryptionContextEquals` 제약 조건으로 변경할 수 있지만 그 반대는 아닙니다.

IAM 모범 사례는 장기 보안 인증 정보가 있는 IAM 사용자의 사용을 장려하지 않습니다. 가능할 경우, 임시 보안 인증 정보를 제공하는 IAM 역할을 사용하세요. 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

예를 들어 피부여자 보안 주체는 상위 권한 부여에서 얻은 `CreateGrant` 권한을 사용하여 다음 하위 권한 부여를 생성할 수 있습니다. 하위 권한 부여의 작업은 상위 권한 부여 작업의 하위 집합이며 권한 부여 제약 조건은 더 제한적입니다.

```
# The child grant in a ListGrants response.
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572249600.0,
            "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f",
            "Operations": [
                "CreateGrant"
                "Decrypt"
            ]
            "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser",
            "Constraints": {
                "EncryptionContextEquals": {
                    "Department": "IT"
                }
            },
        }
    ]
}
```

하위 권한 부여 `anotherUser`의 피부여자 보안 주체는 `CreateGrant` 권한을 사용하여 권한 부여를 생성할 수 있습니다. 그러나, `anotherUser`가 생성하는 권한 부여는 상위 권한 부여 또는 하위 집합의 작업을 포함해야 하며 권한 부여 제약 조건은 동일하거나 더 엄격해야 합니다.

# 권한 부여 보기
<a name="grant-view"></a>

권한 부여를 보려면 [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 작업을 사용합니다. 권한 부여가 적용되는 KMS 키를 지정해야 합니다. 권한 부여 ID 또는 피부여자 보안 주체별로 권한 부여 목록을 필터링할 수도 있습니다. 더 많은 예시는 [AWS SDK 또는 CLI와 `ListGrants` 함께 사용](example_kms_ListGrants_section.md)를 참조합니다.

특정 [사용 중지 보안 주체](grants.md#terms-retiring-principal)가 있는 AWS 계정 및 리전의 모든 권한 부여를 보려면 [ListRetirableGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListRetirableGrants.html)를 사용합니다. 응답에는 각 권한 부여에 대한 세부 정보가 포함됩니다.

**참고**  
`ListGrants` 응답의 `GranteePrincipal` 필드에는 일반적으로 권한 부여의 피부여자 보안 주체가 포함됩니다. 그러나 권한 부여의 피부여자 보안 주체가 AWS 서비스인 경우 `GranteePrincipal` 필드에는 여러 피부여자 [보안 주체를 나타낼 수 있는 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services) 보안 주체가 포함됩니다.

예를 들어 다음 명령은 KMS 키에 대한 모든 권한 부여를 나열합니다.

```
$  aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
{
    "Grants": [
        {
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1572216195.0,
            "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a",
            "Constraints": {
                "EncryptionContextSubset": {
                    "Department": "IT"
                }
            },
            "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole",
            "Name": "",
            "IssuingAccount": "arn:aws:iam::111122223333:root",
            "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser",
            "Operations": [
                "Decrypt"
            ]
        }
    ]
}
```

# 권한 부여 토큰 사용
<a name="using-grant-token"></a>

 AWS KMS API는 [최종 일관성](grants.md#terms-eventual-consistency) 모델을 따릅니다. 권한 부여를 생성할 때 권한 부여가 즉시 유효하지 않을 수 있습니다. 변경 사항이 AWS KMS전체에 적용되기까지 잠깐의 지연이 있을 수 있습니다. 변경 사항이 시스템 전체에 전파되는 데에는 일반적으로 몇 초도 걸리지 않지만 경우에 따라 몇 분 정도 걸릴 수도 있습니다. 변경 사항이 시스템 전체에 완전히 전파되면 피부여자 보안 주체는 권한 부여 토큰이나 권한 부여에 대한 증거를 지정하지 않고 권한 부여의 권한을 사용할 수 있습니다. 그러나 너무 새 권한 부여로 인해 아직 모든 사람에게 알려지지 않은 경우 `AccessDeniedException` 오류와 함께 AWS KMS요청이 실패할 수 있습니다.

새 권한 부여에서 권한을 즉시 사용하려면 권한 부여에 대한 [권한 부여 토큰](grants.md#grant_token)을 사용하십시오. [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업으로 반환되는 권한 부여 토큰을 저장합니다. 그런 다음 AWS KMS 작업 요청에 권한 부여 토큰을 제출합니다. 권한 부여 토큰을 모든 AWS KMS [권한 부여 작업에](grants.md#terms-grant-operations) 제출하고 동일한 요청에서 여러 권한 부여 토큰을 제출할 수 있습니다.



다음 예에서는 `CreateGrant` 작업을 사용하여 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 및 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 허용하는 권한 부여를 생성합니다. `CreateGrant`에서 반환되는 권한 부여 토큰을 `token` 변수에 저장합니다. 그런 다음 `GenerateDataKey` 작업에 대한 호출에서 `token` 변수의 권한 부여 토큰을 사용합니다.

```
# Create a grant; save the grant token 
$ token=$(aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/appUser \
    --retiring-principal arn:aws:iam::111122223333:user/acctAdmin \
    --operations GenerateDataKey Decrypt \
    --query GrantToken \
    --output text)

# Use the grant token in a request
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    –-key-spec AES_256 \
    --grant-tokens $token
```

권한이 있는 위탁자는 권한 부여가 AWS KMS를 통해 제공되기 전에도 권한 부여 토큰을 사용하여 새로운 권한 부여를 사용 중지할 수도 있습니다. (`RevokeGrant` 작업은 권한 부여 토큰을 허용하지 않습니다.) 자세한 내용은 [권한 부여 사용 중지 및 취소](grant-delete.md) 섹션을 참조하세요.

```
# Retire the grant
$ aws kms retire-grant --grant-token $token
```

# 권한 부여 사용 중지 및 취소
<a name="grant-delete"></a>

권한 부여를 삭제하려면 부여를 사용 중지하거나 취소합니다.

[RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html) 및 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 작업은 서로 매우 유사합니다. 두 작업 모두 권한부여를 삭제하므로 권한 부여로 허용하는 권한이 제거됩니다. 이러한 작업의 주요 차이점은 권한이 부여되는 방식입니다.

**RevokeGrant**  
대부분의 AWS KMS 작업과 마찬가지로 `RevokeGrant` 작업에 대한 액세스는 [키 정책](key-policies.md) 및 [IAM 정책을](iam-policies.md) 통해 제어됩니다. [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) API는 `kms:RevokeGrant` 권한이 있는 모든 보안 주체가 호출할 수 있습니다. 이 권한은 키 관리자에게 부여된 표준 권한에 포함됩니다. 일반적으로 관리자는 권한 부여로 허용되는 권한을 거부하기 위해 권한 부여를 취소합니다.

**RetireGrant**  
권한 부여는 누가 권한 부여를 사용 중지할 수 있는지 결정합니다. 이 설계를 통해 키 정책 또는 IAM 정책을 변경하지 않고 권한 부여의 수명 주기를 제어할 수 있습니다. 일반적으로 권한 사용을 마치면 권한 부여를 사용 중지합니다.  
권한 부여는 권한 부여에 지정된 선택적 [사용 중지 보안 주체](grants.md#terms-retiring-principal)에 의해 사용 중지될 수 있습니다. [피부여자 보안 주체](grants.md#terms-grantee-principal)도 권한 부여를 사용 중지할 수 있지만, 사용 중지 보안 주체이거나 권한 부여에 `RetireGrant` 작업이 포함된 경우에만 가능합니다. 백업으로서 권한 부여가 생성된 AWS 계정 는 권한 부여를 사용 중지할 수 있습니다.  
IAM 정책에서 사용할 수 있는 `kms:RetireGrant` 권한이 있지만 유틸리티가 제한되어 있습니다. 권한 부여에 지정된 보안 주체는 `kms:RetireGrant` 권한 없이 권한 부여를 취소할 수 있습니다. `kms:RetireGrant` 권한만으로는 보안 주체가 권한 부여를 사용 중지할 수 없습니다. `kms:RetireGrant` 권한은 [키 정책](key-policies.md) 또는 [리소스 제어 정책](resource-control-policies.md)에서 유효하지 않습니다.  
+ 권한 부여 사용 중지 권한을 거부하려면 IAM 정책에서 `kms:RetireGrant` 권한과 함께 `Deny` 작업을 사용할 수 있습니다.
+ KMS 키를 소유 AWS 계정 한는 계정의 IAM 보안 주체에게 `kms:RetireGrant` 권한을 위임할 수 있습니다.
+ 사용 중지된 보안 주체가 다른 경우 다른 계정의 AWS 계정관리자는 `kms:RetireGrant`를 사용하여 해당 계정의 IAM 보안 주체에게 권한 부여 사용 중지 권한을 위임할 수 있습니다.

 AWS KMS API는 [최종 일관성](grants.md#terms-eventual-consistency) 모델을 따릅니다. 권한 부여를 생성, 사용 중지 또는 철회할 때, 변경 사항이 AWS KMS전체에 적용되기까지 잠깐의 지연이 있을 수 있습니다. 변경 사항이 시스템 전체에 전파되는 데에는 일반적으로 몇 초도 걸리지 않지만 경우에 따라 몇 분 정도 걸릴 수도 있습니다. 새 권한 부여를 즉시 삭제해야 하는 경우 권한 부여 토큰을 AWS KMS사용하여 권한 부여를 사용 중지합니다. [권한 부여 토큰 사용](using-grant-token.md) 권한 부여 토큰을 사용하여 권한 부여를 취소할 수는 없습니다.

# 에 대한 조건 키 AWS KMS
<a name="policy-conditions"></a>

[키 정책](key-policies.md) 및 [IAM 정책](iam-policies.md)에서 AWS KMS 리소스에 대한 액세스를 제어하는 조건을 지정할 수 있습니다. 이 정책문은 조건이 true일 때만 유효합니다. 예를 들어, 특정 날짜 이후에만 정책문이 적용되기를 원할 수 있습니다. 또는 API 요청에 특정 값이 있는 경우에만 정책문이 액세스를 제어하기를 원할 수 있습니다.

조건을 지정하려면 [IAM 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)와 함께 정책문의 [`Condition` 요소](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)에서 *조건 키*를 사용합니다. 일부 조건 키는 일반적으로에 적용되며 AWS, 다른 조건 키는에 고유합니다 AWS KMS.

조건 키 값은 AWS KMS 키 정책 및 IAM 정책에 대한 문자 및 인코딩 규칙을 준수해야 합니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요. IAM 정책 문서 규칙에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 이름 요구 사항](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names) 섹션을 참조하세요.

**Topics**
+ [AWS 전역 조건 키](conditions-aws.md)
+ [AWS KMS 조건 키](conditions-kms.md)
+ [AWS KMS 증명된 플랫폼의 조건 키](conditions-attestation.md)

# AWS 전역 조건 키
<a name="conditions-aws"></a>

AWS 는 액세스 제어에 IAM을 사용하는 모든 AWS 서비스에 대한 정책 조건 키 세트인 [전역](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys) 조건 키를 정의합니다.는 모든 전역 조건 키를 AWS KMS 지원합니다. AWS KMS 키 정책 및 IAM 정책에서 사용할 수 있습니다.

예를 들어 요청의 보안 주체가 조건 키 값에 Amazon 리소스 이름(ARN)으로 표시되는 경우에만 [aws:PrincipalArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalarn) 전역 조건 키를 사용하여 AWS KMS key (KMS 키)에 대한 액세스를 허용할 수 있습니다. 에서 [속성 기반 액세스 제어](abac.md)(ABAC)를 지원하려면 IAM 정책의 [aws:ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 전역 조건 키를 사용하여 특정 태그가 있는 KMS 키에 대한 액세스를 허용할 AWS KMS수 있습니다.

보안 주체가 AWS 서비스 보안 주체인 정책에서 [AWS 서비스가](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services) 혼동된 대리자로 사용되지 않도록 또는 [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) [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 전역 조건 키를 사용할 수 있습니다. 자세한 내용은 [`aws:SourceArn` 또는 `aws:SourceAccount` 조건 키 사용](least-privilege.md#least-privilege-source-arn)을 참조하세요.

사용 가능한 요청 유형을 포함한 AWS 전역 조건 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키를 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html). IAM 정책에서 전역 조건 키를 사용하는 예는 *IAM 사용 설명서*의 [요청에 대한 액세스 제어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests) 및 [태그 키 제어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)를 참조하세요.

다음 주제에서는 IP 주소 및 VPC 엔드포인트를 기반으로 조건 키를 사용하기 위한 특별한 지침을 제공합니다.

**Topics**
+ [AWS KMS 권한이 있는 정책에서 IP 주소 조건 사용](#conditions-aws-ip-address)
+ [AWS KMS 권한이 있는 정책에서 VPC 엔드포인트 조건 사용](#conditions-aws-vpce)
+ [IAM 및 AWS KMS 키 정책에서 IPv6 주소 사용](#KMS-IPv6-policies)

## AWS KMS 권한이 있는 정책에서 IP 주소 조건 사용
<a name="conditions-aws-ip-address"></a>

 AWS KMS 를 사용하여 [통합 AWS 서비스](service-integration.md)에서 데이터를 보호할 수 있습니다. 그러나 액세스를 허용하거나 거부하는 동일한 정책 설명에서 [IP 주소 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_IPAddress) 또는 `aws:SourceIp` 조건 키를 지정할 때는 주의해야 합니다 AWS KMS. 예를 들어 [AWS의 정책은 소스 IP를 AWS 기반으로에 대한 액세스 거부](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html) AWS 작업을 지정된 IP 범위의 요청으로 제한합니다.

다음 시나리오를 고려하십시오.

1. [AWS: 소스 IP를 AWS 기반으로에 대한 액세스 거부](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_aws_deny-ip.html)에 표시된 것과 같은 정책을 IAM 자격 증명에 연결합니다. `aws:SourceIp` 조건 키의 값을 사용자 회사의 IP 주소 범위로 설정합니다. 이 IAM ID에게는 Amazon EBS, Amazon EC2 및 AWS KMS사용을 허용하는 다른 정책이 연결되어 있습니다.

1. ID가 암호화된 EBS 볼륨을 EC2 인스턴스에 연결하려고 합니다. 사용자가 모든 관련 서비스를 이용할 권한을 가지고 있음에도 인증 오류로 인해 이 작업은 실패합니다.

볼륨의 암호화된 데이터 키 복호화 AWS KMS 요청이 Amazon EC2 인프라와 연결된 IP 주소에서 오기 때문에 2단계는 실패합니다. 요청이 성공하려면 원래 사용자의 IP 주소에서 이루어져야 합니다. 1단계의 정책은 지정된 IP 주소 이외에서 이루어진 모든 요청을 명시적으로 거부하기 때문에, EBS 볼륨의 암호화된 데이터 키를 해독할 수 있는 권한이 Amazon EC2에 부여되지 않습니다.

또한 요청이 [Amazon VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)에서 이루어지는 경우 `aws:SourceIP` 조건 키는 유효하지 않습니다. [AWS KMS VPC 엔드포인트](kms-vpc-endpoint.md)를 포함해 VPC 엔드포인트로 요청을 제한하려면 `aws:SourceVpce` 또는 `aws:SourceVpc` 조건 키를 사용합니다. 자세한 정보는 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트 - 엔드포인트 사용 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html#vpc-endpoints-iam-access)를 참조하세요.

## AWS KMS 권한이 있는 정책에서 VPC 엔드포인트 조건 사용
<a name="conditions-aws-vpce"></a>

는 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Introduction.html#what-is-privatelink)로 구동되는[AWS KMS Amazon Virtual Private Cloud(VPC) 엔드포인트를 지원합니다](kms-vpc-endpoint.md). 요청이 VPC에서 왔거나 VPC 엔드포인트를 사용하는 경우 키 정책 및 IAM 정책에서 다음 [전역 조건 키를](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#AvailableKeys) 사용하여 AWS KMS 리소스에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 [VPC 엔드포인트를 사용하여 AWS KMS 리소스에 대한 액세스 제어](vpce-policy-condition.md)을 참조하세요.
+ `aws:SourceVpc`는 지정된 VPC의 요청으로 액세스를 제한합니다.
+ `aws:SourceVpce`는 지정된 VPC 엔드포인트의 요청으로 액세스를 제한합니다.

이러한 조건 키를 사용하여 KMS 키에 대한 액세스를 제어하는 경우가 사용자를 대신하여 사용하는 AWS 서비스에 AWS KMS 대한 액세스를 실수로 거부할 수 있습니다.

[IP 주소 조건 키](#conditions-aws-ip-address) 예제와 같은 상황을 피하도록 주의하십시오. KMS 키에 대한 요청을 VPC 또는 VPC 엔드포인트로 제한하면 Amazon S3 또는 Amazon EBS와 같은 통합 서비스 AWS KMS 에서에 대한 호출이 실패할 수 있습니다. 원본 요청이 궁극적으로 VPC 또는 VPC 엔드포인트에서 시작된 경우에도 이러한 상황이 발생할 수 있습니다.

## IAM 및 AWS KMS 키 정책에서 IPv6 주소 사용
<a name="KMS-IPv6-policies"></a>

IPv6를 AWS KMS 통해에 액세스하기 전에 IP 주소 제한이 포함된 키 및 IAM 정책이 IPv6 주소 범위를 포함하도록 업데이트되었는지 확인합니다. IP 기반 정책이 IPv6 주소를 처리하도록 업데이트되지 않은 경우, 클라이언트가 IPv6을 사용할 때 액세스 권한을 잘못 잃거나 얻을 수 있습니다. KMS 액세스 제어에 대한 일반적인 지침은 [KMS 키 액세스 및 권한](control-access.md) 페이지를 참조하세요. KMS 및 듀얼 스택 지원에 대해 알아보려면 [듀얼 스택 엔드포인트 지원](ipv6-kms.md) 페이지를 참조하세요.

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

다음 문은 `192.0.2.*`의 IPv4 주소 범위에서 발생한 요청에 대해 모든 KMS 권한에 대한 액세스를 명시적으로 거부합니다. 이 범위 밖의 IP 주소는 KMS 권한이 명시적으로 거부되지 않습니다. 모든 IPv6 주소는 거부 범위 밖에 있으므로, 이 문은 IPv6 주소에 대해 KMS 권한을 명시적으로 거부하지 않습니다.

```
{
     "Sid": "DenyKMSPermissions",
     "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24"
            ]
        }
    }
}
```

다음 예제와 같이 IPv4(`Condition`) 및 IPv6(`192.0.2.0/24`) 주소 범위를 모두 거부하도록 `2001:db8:1234::/32` 요소를 수정할 수 있습니다.

```
{
    "Sid": "DenyKMSPermissions",
    "Effect": "Deny",
    "Action": [
        "kms:*"
    ],
    "Resource": "*",
    "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [ 
                "192.0.2.0/24",
                "2001:db8:1234::/32"
            ]
        }
    }
}
```

# AWS KMS 조건 키
<a name="conditions-kms"></a>

AWS KMS 는 키 정책 및 IAM 정책에 사용할 수 있는 조건 키 세트를 제공합니다. 이러한 조건 키는에 고유합니다 AWS KMS. 예를 들어 대칭 암호화 KMS 키에 대한 액세스를 제어할 때 `kms:EncryptionContext:context-key` 조건 키를 사용해 특정한 [암호화 컨텍스트](encrypt_context.md)를 요구할 수 있습니다.

**API 작업 요청에 대한 조건**

많은 AWS KMS 조건 키는 AWS KMS 작업 요청의 파라미터 값을 기반으로 KMS 키에 대한 액세스를 제어합니다. 예를 들어 IAM 정책에서 [kms:KeySpec](#conditions-kms-key-spec) 조건 키를 사용하여 `CreateKey` 요청의 `KeySpec` 파라미터 값이 `RSA_4096`인 경우에만 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업의 사용을 허용할 수 있습니다.

이 유형의 조건은 파라미터의 기본값을 사용하는 경우와 같이 요청에 파라미터가 나타나지 않는 경우에도 작동합니다. 예를 들어 [kms:KeySpec](#conditions-kms-key-spec) 조건 키를 사용하여 사용자가 `KeySpec` 파라미터 값이 기본값 `SYMMETRIC_DEFAULT`인 경우에만 `CreateKey` 작업을 사용하도록 허용할 수 있습니다. 이 조건은 `KeySpec` 파라미터 값이 `SYMMETRIC_DEFAULT`인 요청과 `KeySpec` 파라미터가 없는 요청을 허용합니다.

**API 작업에 사용되는 KMS 키에 대한 조건**

일부 AWS KMS 조건 키는 작업에 사용되는 KMS 키의 속성을 기반으로 작업에 대한 액세스를 제어할 수 있습니다. 예를 들어 [kms:KeyOrigin](#conditions-kms-key-origin) 조건을 사용하여 KMS 키의 `Origin`이 `AWS_KMS`인 경우에만 보안 주체가 KMS 키에서 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)를 호출하도록 할 수 있습니다. 이러한 방식으로 조건 키를 사용할 수 있는지 확인하려면 조건 키의 설명을 참조하십시오.

작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대한 `Resources` 열에서 `KMS key` 값을 찾습니다. [ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)와 같이 특정 KMS 키 리소스에 대해 권한이 부여되지 않은 작업과 함께 이 유형의 조건 키를 사용하면 조건을 만족시킬 수 없으므로 권한이 적용되지 않습니다. `ListKeys` 작업 권한 부여와 관련된 KMS 키 리소스가 없고 `KeySpec` 속성이 없기 때문입니다.

다음 주제에서는 각 AWS KMS 조건 키를 설명하고 정책 구문을 보여주는 예제 정책 문을 포함합니다.

**조건 키와 함께 집합 연산자 사용**

정책 조건이 요청의 태그 세트와 정책의 태그 세트와 같은 두 값 세트를 비교하는 경우 세트를 비교하는 AWS 방법을 알려주어야 합니다. IAM은 이를 위해 두 개의 세트 연산자 `ForAnyValue`와 `ForAllValues`를 정의합니다. 세트 연산자는 세트 연산자를 필요로 하는 *다중값 조건 키(multi-valued condition keys)*에만 사용합니다. *단일 값 조건 키(single-valued condition keys)*에는 집합 연산자를 사용하지 마세요. 항상 정책문을 프로덕션 환경에서 사용하기 전에 철저히 테스트합니다.

조건 키는 단일 값이거나 다중 값입니다. AWS KMS 조건 키가 단일 값인지 다중 값인지 확인하려면 조건 키 설명의 **값 유형** 열을 참조하세요.
+ *단일 값* 조건 키는 권한 부여 컨텍스트(요청 또는 리소스)에서 최대 하나의 값을 갖습니다. 예를 들어 각 API 호출은 하나에서만 시작될 수 있으므로 AWS 계정[kms:CallerAccount](#conditions-kms-caller-account)는 단일 값 조건 키입니다. 단일 값 조건 키(single-valued condition keys)에는 집합 연산자를 사용하지 마세요.
+ *다중 값* 조건 키는 권한 부여 컨텍스트(요청 또는 리소스)에서 여러 값을 갖습니다. 예를 들어, 각 KMS 키에는 여러 개의 별칭이 있을 수 있으므로 [kms:ResourceAliases](#conditions-kms-resource-aliases)에는 여러 개의 값이 있을 수 있습니다. 다중값 조건 키에는 집합 연산자가 필요합니다.

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

**주의**  
단일 값 조건 키와 함께 집합 연산자를 사용하면 지나치게 허용 (또는 지나치게 제한적인) 정책문을 만들 수 있습니다. 집합 연산자는 다중값 조건 키(multi-valued condition keys)에만 사용합니다.  
kms:EncryptionContext:*context-key* 또는 `aws:RequestTag/tag-key` 조건 키가 있는 `ForAllValues` 세트 연산자를 포함하는 정책을 생성하거나 업데이트하면가 다음 오류 메시지를 AWS KMS 반환합니다.  
`OverlyPermissiveCondition: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified [encryption context or tag] or with an unspecified [encryption context or tag]. To fix, remove ForAllValues.`

`ForAnyValue` 및 `ForAllValues` 집합 연산자에 대한 자세한 내용은 *IAM 사용 설명서*의 [여러 키 및 값 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)을 참조하세요. 단일 값 조건에서 `ForAllValues` 집합 연산자를 사용할 때의 위험에 대한 자세한 내용은 *IAM 사용 설명서*의 [보안 경고 – 단일 값 키가 있는 ForAllValues](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-reference-policy-checks.html#access-analyzer-reference-policy-checks-security-warning-forallvalues-with-single-valued-key) 섹션을 참조하세요.

**Topics**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CallerAccount](#conditions-kms-caller-account)
+ [kms:CustomerMasterKeySpec(사용되지 않음)](#conditions-kms-key-spec-replaced)
+ [kms:CustomerMasterKeyUsage(사용되지 않음)](#conditions-kms-key-usage-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:KeyAgreementAlgorithm](#conditions-kms-key-agreement-algorithm)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)
+ [kms:MultiRegion](#conditions-kms-multiregion)
+ [kms:MultiRegionKeyType](#conditions-kms-multiregion-key-type)
+ [kms:PrimaryRegion](#conditions-kms-primary-region)
+ [kms:ReEncryptOnSameKey](#conditions-kms-reencrypt-on-same-key)
+ [kms:RequestAlias](#conditions-kms-request-alias)
+ [kms:ResourceAliases](#conditions-kms-resource-aliases)
+ [kms:ReplicaRegion](#conditions-kms-replica-region)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)
+ [kms:RotationPeriodInDays](#conditions-kms-rotation-period-in-days)
+ [kms:ScheduleKeyDeletionPendingWindowInDays](#conditions-kms-schedule-key-deletion-pending-window-in-days)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:ViaService](#conditions-kms-via-service)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:BypassPolicyLockoutSafetyCheck
<a name="conditions-kms-bypass-policy-lockout-safety-check"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:BypassPolicyLockoutSafetyCheck`  |  부울  | 단일 값 |  `CreateKey` `PutKeyPolicy`  |  IAM 정책만 키 정책 및 IAM 정책  | 

`kms:BypassPolicyLockoutSafetyCheck` 조건 키는 요청의 `BypassPolicyLockoutSafetyCheck` 파라미터 값을 기반으로 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 및 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 작업에 대한 액세스를 제어합니다.

다음 예제 IAM 정책문은 `CreateKey` 요청의 `BypassPolicyLockoutSafetyCheck` 파라미터 값이 `true.`일 때 사용자의 KMS 키 생성 권한을 거부하여 사용자가 정책 잠금 안전 점검을 우회하지 못하도록 합니다.

```
{
  "Effect": "Deny",
  "Action": [
    "kms:CreateKey",
    "kms:PutKeyPolicy"
  ],
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

또한 IAM 정책 또는 키 정책의 `kms:BypassPolicyLockoutSafetyCheck` 조건 키를 사용하여 `PutKeyPolicy` 작업에 대한 액세스를 제어할 수도 있습니다. 키 정책에 들어 있는 다음 예제 정책문은 KMS 키의 정책을 변경할 때 사용자가 정책 잠금 안전 점검을 우회하지 못하도록 합니다.

명시적 `Deny`를 사용하는 대신에, 이 정책문에서는 [Null 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)와 `Allow`를 함께 사용하여 요청에 `BypassPolicyLockoutSafetyCheck` 파라미터가 포함되지 않을 때만 액세스를 허용합니다. 이 파라미터를 사용하지 않는 경우 기본값은 `false`입니다. 이와 같이 강도가 조금 낮은 정책문은 극히 드문 경우지만 우회가 필요할 경우 재정의할 수 있습니다.

```
{
  "Effect": "Allow",
  "Action": "kms:PutKeyPolicy",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:BypassPolicyLockoutSafetyCheck": true
    }
  }
}
```

**참고 항목**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:CallerAccount
<a name="conditions-kms-caller-account"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:CallerAccount`  |  문자열  | 단일 값 |  KMS 키 리소스 작업 사용자 지정 키 스토어 작업  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용해 AWS 계정의 모든 ID(사용자와 역할)에 대한 액세스를 허용하거나 거부할 수 있습니다. 키 정책에서 `Principal` 요소를 이용해 정책문이 적용될 자격 증명을 지정합니다. `Principal` 요소에 대한 구문은 AWS 계정의 모든 자격 증명을 지정하는 방법을 제공하지 않지만, 그러나이 조건 키를 모든 AWS 자격 증명을 지정하는 `Principal` 요소와 결합하여이 효과를 달성할 수 있습니다.

이를 사용하여 모든 *KMS 키 리소스 작업*, 즉 특정 KMS 키를 사용하는 모든 AWS KMS 작업에 대한 액세스를 제어할 수 있습니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대해 `Resources` 열에서 `KMS key` 값을 찾습니다. [사용자 지정 키 스토어](key-store-overview.md#custom-key-store-overview)를 관리하는 작업에도 유효합니다.

예를 들어 다음 키 정책문은 `kms:CallerAccount` 조건 키를 사용하는 방법을 보여줍니다. 이 정책 설명은 AWS 관리형 키 Amazon EBS용의 키 정책에 있습니다. 모든 자격 AWS 증명을 지정하는 `Principal` 요소를 `kms:CallerAccount` 조건 키와 결합하여 AWS 계정 111122223333의 모든 자격 증명에 대한 액세스를 효과적으로 허용합니다. 여기에는 Amazon EBS를 통해 들어오는 요청만 허용하여 권한을 추가로 제한하는 추가 AWS KMS 조건 키(`kms:ViaService`)가 포함되어 있습니다. 자세한 내용은 [kms:ViaService](#conditions-kms-via-service) 단원을 참조하십시오.

```
{
  "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
  "Effect": "Allow",
  "Principal": {"AWS": "*"},
  "Condition": {
    "StringEquals": {
      "kms:CallerAccount": "111122223333",
      "kms:ViaService": "ec2.us-west-2.amazonaws.com"
    }
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}
```

## kms:CustomerMasterKeySpec(사용되지 않음)
<a name="conditions-kms-key-spec-replaced"></a>

`kms:CustomerMasterKeySpec` 조건 키는 더 이상 사용되지 않습니다. 대신 [kms:KeySpec](#conditions-kms-key-spec) 조건 키를 사용합니다.

`kms:CustomerMasterKeySpec` 및 `kms:KeySpec` 조건 키는 같은 방식으로 작동하며, 이름만 다릅니다. `kms:KeySpec`을 사용할 것을 권장합니다. 그러나 변경 사항을 방지하기 위해는 두 조건 키를 모두 AWS KMS 지원합니다.

## kms:CustomerMasterKeyUsage(사용되지 않음)
<a name="conditions-kms-key-usage-replaced"></a>

`kms:CustomerMasterKeyUsage` 조건 키는 더 이상 사용되지 않습니다. 대신 [kms:KeyUsage](#conditions-kms-key-usage) 조건 키를 사용합니다.

`kms:CustomerMasterKeyUsage` 및 `kms:KeyUsage` 조건 키는 같은 방식으로 작동하며, 이름만 다릅니다. `kms:KeyUsage`을 사용할 것을 권장합니다. 그러나 변경 사항을 방지하기 위해는 두 조건 키를 모두 AWS KMS 지원합니다.

## kms:DataKeyPairSpec
<a name="conditions-kms-data-key-spec"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:DataKeyPairSpec`  |  문자열  | 단일 값 |  `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 요청의 `KeyPairSpec` 파라미터 값을 기반으로 [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 및 [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html) 작업에 대한 액세스를 제어할 수 있습니다. 예를 들어 사용자가 특정 유형의 데이터 키 페어만 생성하도록 허용할 수 있습니다.

다음 예제 키 정책 문은 `kms:DataKeyPairSpec` 조건 키를 사용하여 사용자가 KMS 키를 사용하여 RSA 데이터 키 페어만 생성하도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext"
  ],
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:DataKeyPairSpec": "RSA*"
    }
  }
}
```

**참고 항목**
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)

## kms:EncryptionAlgorithm
<a name="conditions-kms-encryption-algorithm"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionAlgorithm`  |  문자열  | 단일 값 |  `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt`  |  키 정책 및 IAM 정책  | 

`kms:EncryptionAlgorithm` 조건 키를 사용하여 작업에 사용되는 암호화 알고리즘을 기반으로 암호화 작업에 대한 액세스를 제어할 수 있습니다. [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html), [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 및 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 작업의 경우 요청의 [EncryptionAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html#KMS-Decrypt-request-EncryptionAlgorithm) 파라미터의 값에 따라 액세스를 제어합니다. 데이터 키 및 데이터 키 페어를 생성하는 작업의 경우 데이터 키를 암호화하는 데 사용되는 암호화 알고리즘을 기반으로 액세스를 제어합니다.

이 조건 키는 외부의 비대칭 KMS 키 페어에서 퍼블릭 키로 암호화하는 AWS KMS등 외부에서 수행되는 작업에 영향을 주지 않습니다 AWS KMS.

**요청의 EncryptionAlgorithm 파라미터**

사용자가 KMS 키에 특정 암호화 알고리즘만 사용하도록 하려면 `Deny` 효과 및 `StringNotEquals` 조건 연산자가 포함된 정책문을 사용합니다. 예를 들어, 다음 예제 키 정책문에서는 요청의 암호화 알고리즘이 `RSAES_OAEP_SHA_256`(RSA KMS 키와 함께 사용되는 비대칭 암호화 알고리즘)이 아닐 경우 `ExampleRole` 역할을 수임할 수 있는 보안 주체가 지정된 암호화 작업에서 이 KMS 키를 사용할 수 없습니다.

사용자가 특정 암호화 알고리즘을 사용하도록 허용하는 정책 문과 달리, 이와 같은 이중 부정을 가진 정책 문은 이 KMS 키의 다른 정책 및 권한 부여가 이 역할이 다른 암호화 알고리즘을 사용하도록 허용하는 것을 금지합니다. 이 키 정책문의 `Deny`는 `Allow` 효과가 있는 모든 키 정책 또는 IAM 정책에 우선하며 KMS 키 및 해당 보안 주체에 대한 모든 권한 부여에 우선합니다.

```
{
  "Sid": "Allow only one encryption algorithm with this asymmetric KMS key",
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*"
  ],
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256"
    }
  }
}
```

**작업에 사용되는 암호화 알고리즘**

또한 `kms:EncryptionAlgorithm` 조건 키를 사용하여 알고리즘이 요청에 지정되지 않은 경우에도 작업에 사용된 암호화 알고리즘을 기반으로 작업에 대한 액세스를 제어할 수 있습니다. 이를 통해 `SYMMETRIC_DEFAULT` 알고리즘을 요구하거나 금지할 수 있습니다. 이 알고리즘은 기본값이기 때문에 요청에 지정되지 않을 수 있습니다.

`kms:EncryptionAlgorithm` 조건 키를 사용하여 데이터 키 및 데이터 키 페어를 생성하는 작업에 대한 액세스도 제어할 수 있습니다. 이러한 작업은 대칭 암호화 KMS 키와 `SYMMETRIC_DEFAULT` 알고리즘만 사용합니다.

예를 들어 다음 IAM 정책은 보안 주체를 대칭 암호화로 제한합니다. 요청에 지정되거나 작업에 사용된 암호화 알고리즘이 SYMMETRIC\$1DEFAULT가 아닐 경우 예제 계정에서 암호화 작업을 위한 KMS 키에 대한 액세스를 모두 거부합니다. `GenerateDataKey*`를 포함하면 권한에 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 및 [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)가 추가됩니다. 조건은 항상 대칭 암호화 알고리즘을 사용하기 때문에 이러한 작업에 영향을 주지 않습니다.

```
{
  "Sid": "AllowOnlySymmetricAlgorithm",
  "Effect": "Deny",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringNotEquals": {
      "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**참고 항목**
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:EncryptionContext:*context-key*
<a name="conditions-kms-encryption-context"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContext:context-key`  |  문자열  | 단일 값 |  `CreateGrant` `Encrypt` `Decrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  키 정책 및 IAM 정책  | 

`kms:EncryptionContext:context-key` 조건 키를 사용하여 [암호화 작업](kms-cryptography.md#cryptographic-operations) 요청의 [암호화 컨텍스트](encrypt_context.md)를 기반으로 [대칭 암호화 KMS 키](symm-asymm-choose-key-spec.md#symmetric-cmks)에 대한 액세스를 제어할 수 있습니다. 이 조건 키를 사용하여 암호화 컨텍스트 페어의 키와 값을 평가합니다. 키 또는 값에 관계없이 암호화 컨텍스트 키만 평가하거나 암호화 컨텍스트를 요구하려면 [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys) 조건 키를 사용합니다.

**참고**  
조건 키 값은 키 정책 및 IAM 정책에 대한 문자 규칙을 준수해야 합니다. 암호화 컨텍스트에서 유효한 일부 문자는 정책에서 유효하지 않습니다. 이 조건 키를 사용하여 유효한 암호화 컨텍스트 값을 모두 표현하지 못할 수 있습니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요. IAM 정책 문서 규칙에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 이름 요구 사항](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names) 섹션을 참조하세요.

[비대칭 KMS 키](symmetric-asymmetric.md) 또는 [HMAC KMS 키](hmac.md)를 사용하여 암호화 작업에서 암호화 컨텍스트를 지정할 수 없습니다. 비대칭 알고리즘 및 MAC 알고리즘은 암호화 컨텍스트를 지원하지 않습니다.

kms:EncryptionContext:*context-key* 조건 키를 사용하려면 *context-key* 자리 표시자를 암호화 컨텍스트 키로 바꿉니다. *context-value* 자리 표시자를 암호화 컨텍스트 값으로 바꿉니다.

```
"kms:EncryptionContext:context-key": "context-value"
```

예를 들어, 다음 조건 키는 키가 `AppName`이고 값이 `ExampleApp` (`AppName = ExampleApp`)인 암호화 컨텍스트를 지정합니다.

```
"kms:EncryptionContext:AppName": "ExampleApp"
```

이것은 [단일 값 조건 키](#set-operators)입니다. 조건 키의 키는 특정 암호화 컨텍스트 키(*context-key*)입니다. 각 API 요청에 여러 암호화 컨텍스트 페어를 포함할 수 있지만 지정된 *context-key*가 있는 암호화 컨텍스트 쌍은 하나의 값만 가질 수 있습니다. 예를 들어, `kms:EncryptionContext:Department` 조건 키는 `Department` 키가 있는 암호화 컨텍스트 페어에만 적용되며 `Department` 키가 있는 지정된 암호화 컨텍스트 페어에는 하나의 값만 있을 수 있습니다.

`kms:EncryptionContext:context-key` 조건 키와 함께 집합 연산자를 사용하지 마십시오. `Allow` 작업, `kms:EncryptionContext:context-key` 조건 키 및 `ForAllValues` 집합 연산자를 사용하여 정책문을 생성하는 경우 조건은 암호화 컨텍스트가 없는 요청과 정책 조건에 지정되지 않은 암호화 컨텍스트 페어가 있는 요청을 허용합니다.

**주의**  
단일 값 조건 키(single-valued condition keys)에는 `ForAnyValue` 또는 `ForAllValues` 집합 연산자를 사용하지 마세요. 이러한 집합 연산자는 필요한 값을 요구하지 않고 금지하려는 값을 허용하는 정책 조건을 만들 수 있습니다.  
kms:EncryptionContext:*context-key*를 사용하여 `ForAllValues` 세트 연산자를 포함하는 정책을 생성하거나 업데이트하면가 다음 오류 메시지를 AWS KMS 반환합니다.  
`OverlyPermissiveCondition:EncryptionContext: Using the ForAllValues set operator with a single-valued condition key matches requests without the specified encryption context or with an unspecified encryption context. To fix, remove ForAllValues.`

특정 암호화 컨텍스트 페어를 요구하려면 `StringEquals` 연산자와 함께 `kms:EncryptionContext:context-key` 조건 키를 사용하세요.

다음 예제 키 정책문은 요청의 암호화 컨텍스트에 `AppName:ExampleApp` 페어가 포함된 경우에만 역할을 맡을 수 있는 보안 주체가 `GenerateDataKey` 요청에서 KMS 키를 사용할 수 있도록 허용합니다. 다른 암호화 컨텍스트 페어가 허용됩니다.

키 이름은 대/소문자를 구분하지 않습니다. 값의 대소문자 구분은 `StringEquals`와 같은 조건 연산자에 의해 결정됩니다. 자세한 내용은 [암호화 컨텍스트 조건의 대/소문자 구분](#conditions-kms-encryption-context-case) 섹션을 참조하세요.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

암호화 컨텍스트 페어를 요구하고 다른 모든 암호화 컨텍스트 페어를 금지하려면 정책문에서 kms:EncryptionContext:*context-key*와 [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys)를 모두 사용하세요. 다음 키 정책문은 `kms:EncryptionContext:AppName` 조건을 사용하여 요청에 `AppName=ExampleApp` 암호화 컨텍스트 페어를 요구합니다. 또한 `ForAllValues` 집합 연산자와 함께 `kms:EncryptionContextKeys` 조건 키를 사용하여 `AppName` 암호화 컨텍스트 키만 허용합니다.

`ForAllValues` 집합 연산자는 요청의 암호화 컨텍스트 키를 `AppName`으로 제한합니다. `ForAllValues` 집합 연산자가 있는 `kms:EncryptionContextKeys` 조건이 정책문에서 단독으로 사용된 경우 이 집합 연산자는 암호화 컨텍스트가 없는 요청을 허용합니다. 그러나 요청에 암호화 컨텍스트가 없으면 `kms:EncryptionContext:AppName` 조건이 실패합니다. `ForAllValues` 집합 연산자에 대한 자세한 내용은 *IAM 사용 설명서*의 [여러 키 및 값 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)을 참조하세요.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KeyUsers"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "AppName"
      ]
    }
  }
}
```

이 조건 키를 사용하여 특정 작업에 대한 KMS 키에 대한 액세스를 거부할 수도 있습니다. 다음 예제 키 정책문은 `Deny` 효과를 사용하여 요청의 암호화 컨텍스트에 `Stage=Restricted` 암호화 컨텍스트 페어가 포함된 경우 보안 주체가 KMS 키를 사용하는 것을 금지합니다. 이 조건은 `Stage` 키 및 `Stage=Test`와 같은 기타 값이 있는 암호화 컨텍스트 페어를 포함하여 다른 암호화 컨텍스트 페어로 요청을 허용합니다.

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": "Restricted"
    }
  }
}
```

### 여러 암호화 컨텍스트 페어 사용
<a name="conditions-kms-encryption-context-many"></a>

여러 암호화 컨텍스트 페어를 요구하거나 금지할 수 있습니다. 여러 암호화 컨텍스트 페어 중 하나를 요구할 수도 있습니다. 이러한 조건을 해석하는 데 사용되는 논리에 대한 자세한 내용은 IAM 사용 설명서의 [여러 키 또는 값으로 조건 만들기](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html) 섹션을 참조하세요.

**참고**  
이 항목의 이전 버전에서는 kms:EncryptionContext:*context-key* 조건 키와 함께 `ForAnyValue` 및 `ForAllValues` 집합 연산자를 사용한 정책문을 표시했습니다. [단일 값 조건 키](#set-operators)와 함께 집합 연산자를 사용하면 암호화 컨텍스트가 없고 지정되지 않은 암호화 컨텍스트 페어가 없는 요청을 허용하는 정책이 생성될 수 있습니다.  
예를 들어, `Allow` 효과가 있는 정책 조건, `ForAllValues` 집합 연산자 및 `"kms:EncryptionContext:Department": "IT"` 조건 키가 암호화 컨텍스트를 "Department=IT" 페어로 제한하지 않습니다. 암호화 컨텍스트가없는 요청과 지정되지 않은 암호화 컨텍스트 쌍을 사용하는 요청(예: `Stage=Restricted`)을 허용합니다.  
정책을 검토하고 kms:EncryptionContext:*context-key*를 사용하여 모든 조건에서 집합 연산자를 제거하십시오. 이 형식의 정책을 생성하거나 업데이트하려는 시도는 `OverlyPermissiveCondition` 예외와 함께 실패합니다. 오류를 해결하려면 집합 연산자를 삭제합니다.

여러 암호화 컨텍스트 쌍을 요구하려면 동일한 조건의 쌍을 나열합니다. 다음 예제 키 정책문에는 두 개의 암호화 컨텍스트 쌍인 `Department=IT`와 `Project=Alpha`가 필요합니다. 조건이 다른 키(`kms:EncryptionContext:Department` 및 `kms:EncryptionContext:Project`)를 가지고 있기 때문에 AND 연산자에 의해 암시적으로 연결됩니다. 다른 암호화 컨텍스트 쌍은 허용되지만 필수는 아닙니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    }
  }
}
```

하나의 암호화 컨텍스트 쌍 또는 다른 쌍을 요구하려면 각 조건 키를 별도의 정책문에 배치합니다. 다음 예제 키 정책은 `Department=IT` *또는* `Project=Alpha` 쌍이나 둘 다 사용할 수 있습니다. 다른 암호화 컨텍스트 쌍은 허용되지만 필수는 아닙니다.

```
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Department": "IT"
  }
 }
},
{
 "Effect": "Allow",
 "Principal": {
  "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
 },
 "Action": "kms:GenerateDataKey",
 "Resource": "*",
 "Condition": {
  "StringEquals": {
   "kms:EncryptionContext:Project": "Alpha"
  }
 }
}
```

특정 암호화 쌍을 요구하고 다른 모든 암호화 컨텍스트 쌍을 실행하려면 정책문에서 kms:EncryptionContext:*context-key*와 [`kms:EncryptionContextKeys`](#conditions-kms-encryption-context-keys)를 모두 사용하십시오. 다음 키 정책문은 kms:EncryptionContext:*context-key* 컨디션을 사용하여 `Department=IT` *및* `Project=Alpha` 페어 모두가 있는 암호화 컨텍스트를 요구합니다. `ForAllValues` 집합 연산자와 함께 `kms:EncryptionContextKeys` 조건 키를 사용하여 `Department` 및 `Project` 암호화 컨텍스트 키만 허용합니다.

`ForAllValues` 집합 연산자는 요청의 암호화 컨텍스트 키를 `Department` 및 `Project`으로 제한합니다. 조건에 단독으로 사용된 경우 이 집합 연산자는 암호화 컨텍스트가 없는 요청을 허용하지만 이 구성에서는 이 조건의 kms:EncryptionContext:*context-key*가 실패합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Department": "IT",
      "kms:EncryptionContext:Project": "Alpha"
    },
    "ForAllValues:StringEquals": {
      "kms:EncryptionContextKeys": [
        "Department",
        "Project"
      ]
    }
  }
}
```

여러 암호화 컨텍스트 쌍을 금지할 수도 있습니다. 다음 예제 키 정책문은 `Deny` 효과를 사용하여 요청의 암호화 컨텍스트에 `Stage=Restricted` 또는 `Stage=Production` 페어가 포함된 경우 보안 주체가 KMS 키를 사용하는 것을 금지합니다.

동일한 키(`kms:EncryptionContext:Stage`)에 대한 여러 값(`Restricted` 및 `Production`)은 암시적으로 OR에 의해 연결됩니다. 자세한 내용은 *IAM 사용 설명서*의 [여러 키 또는 값이 있는 조건에 대한 평가 논리](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multiple-conditions-eval) 섹션을 참조하세요.

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Stage": [
         "Restricted",
         "Production"
      ] 
    }
  }
}
```

### 암호화 컨텍스트 조건의 대/소문자 구분
<a name="conditions-kms-encryption-context-case"></a>

해독 작업에 지정된 암호화 컨텍스트는 암호화 작업에 지정된 암호화 컨텍스트에 대해 대소문자가 정확히 일치해야 합니다. 여러 쌍이 있는 암호화 컨텍스트에서 쌍의 순서만 다를 수 있습니다.

그러나 정책 조건에서 조건 키는 대소문자를 구분하지 않습니다. 조건 값의 대소문자 구분은 `StringEquals` 또는 `StringEqualsIgnoreCase`와 같이 사용하는 [정책 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)에 의해 결정됩니다.

이와 같이 `kms:EncryptionContext:` 접두사와 *`context-key`* 대체로 구성된 조건 키는 대소문자를 구분하지 않습니다. 이 조건을 사용하는 정책은 조건 키의 두 요소의 대소문자를 검사하지 않습니다. 대소문자 구분, 즉 * `context-value` *대체는 정책 조건 연산자에 의해 결정됩니다.

예를 들어 다음 정책 명령문은 대문자 사용에 관계없이 암호화 컨텍스트에 `Appname`키가 포함 된 경우 작업을 허용합니다. 예를 들어 다음 정책 명령문은 대문자 사용에 관계없이 암호화 컨텍스트에 `StringEquals` 키가 포함 된 경우 작업을 허용합니다`ExampleApp`.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:Appname": "ExampleApp"
    }
  }
}
```

대소문자를 구분하는 암호화 컨텍스트 키를 요구하려면 [kms: EncryptionContextKeys ](#conditions-kms-encryption-context-keys) 정책 조건을 대소문자를 구분하는 조건 연산자 (예: `StringEquals`)와 함께 사용하십시오. 이 정책 조건에서는 암호화 컨텍스트 키가 이 정책 조건의 값이기 때문에 대소문자 구분은 조건 연산자에 의해 결정됩니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

암호화 컨텍스트 키와 값 모두에 대해 대소문자가 구분된 평가가 필요하면 `kms:EncryptionContextKeys` 및 kms:EncryptionContext:*context-key* 정책 조건을 동일한 정책문에 함께 사용하십시오. 대소문자를 구분하는 조건 연산자(예: `StringEquals`)는 항상 조건의 값에 적용됩니다. 암호화 컨텍스트 키(예: `AppName`)는 `kms:EncryptionContextKeys` 조건의 값입니다. 암호화 컨텍스트 값(예: `ExampleApp`)은 kms:EncryptionContext:*context-key* 조건의 의 값입니다.

예를 들어, `StringEquals` 연산자는 대소문자를 구분하기 때문에 다음 예제 키 정책문에서는 암호화 컨텍스트 키와 암호화 컨텍스트 값 모두 대소문자를 구분합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    },
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

### 암호화 컨텍스트 조건에 변수 사용
<a name="conditions-kms-encryption-context-variables"></a>

암호화 컨텍스트 쌍의 키와 값은 단순 리터럴 문자열이어야 합니다. 정수나 객체, 또는 완전히 해결되지 않는 어떤 형식도 사용할 수 없습니다. 정수 또는 부동 소수점과 같은 다른 유형을 사용하는 경우는 이를 리터럴 문자열로 AWS KMS 해석합니다.

```
"encryptionContext": {
    "department": "10103.0"
}
```

그러나 `kms:EncryptionContext:context-key` 조건 키의 값은 [IAM 정책 변수](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)일 수 있습니다. 이러한 정책 변수는 런타임에 요청에 포함된 값을 기반으로 확인됩니다. 예를 들어 `aws:CurrentTime `은 요청의 시간으로 확인되고 `aws:username`은 호출자의 표시 이름으로 확인됩니다.

이러한 정책 변수를 사용하여 암호화 컨텍스트에서 매우 구체적인 정보(예: 호출자의 사용자 이름)를 요구하는 조건을 포함하는 정책 문을 생성할 수 있습니다. 변수를 포함하기 때문에 특정 역할을 수임할 수 있는 모든 사용자에 동일한 정책 문을 사용할 수 있습니다. 사용자마다 따로 정책 문을 작성할 필요가 없습니다.

예를 들어 모든 사용자가 동일한 KMS 키를 사용하여 데이터를 암호화 및 해독하는 역할을 수임할 수 있게 하려고 합니다. 그러나 모든 사용자가 직접 암호화한 데이터만 암호화를 해제하도록 허용하려고 합니다. 먼저 모든 요청에 키가 `user`이고 값이 다음과 같은 호출자의 AWS 사용자 이름인 암호화 컨텍스트를 AWS KMS 포함하도록 요구합니다.

```
"encryptionContext": {
    "user": "bob"
}
```

그런 다음 이 요구 사항을 시행하려면 다음 예제와 같은 정책 문을 사용할 수 있습니다. 이 정책문은 `TestTeam` 역할에 KMS 키를 사용하여 데이터를 암호화 및 해독할 권한을 부여합니다. 그러나 이 권한은 요청의 암호화 컨텍스트가 `"user": "<username>"` 쌍을 포함하는 경우에만 유효합니다. 사용자 이름을 표현하기 위해 조건이 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#policy-vars-infotouse) 정책 변수를 사용합니다.

요청이 평가될 때 호출자의 사용자 이름이 조건의 변수를 대체합니다. 따라서 조건은 "bob"에 대해서는 암호화 컨텍스트 `"user": "bob"`을 요구하고 "alice"에 대해서는 `"user": "alice"`를 요구합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:user": "${aws:username}"
    }
  }
}
```

IAM 정책 변수는 `kms:EncryptionContext:context-key` 조건 키의 값에만 사용할 수 있습니다. 키에는 변수를 사용할 수 없습니다.

또한 변수에 [공급자별 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_user-id.html)를 사용할 수도 있습니다. 이러한 컨텍스트 키는 웹 자격 증명 페더레이션을 사용하여 AWS 에 로그인한 사용자를 고유하게 식별합니다.

다른 모든 변수와 마찬가지로 이러한 변수도 실제 암호화 컨텍스트가 아니라 `kms:EncryptionContext:context-key` 정책 조건에서만 사용할 수 있습니다. 또한 키가 아니라 조건의 값에만 사용할 수 있습니다.

예를 들어 다음 키 정책 문은 이전 것과 비슷합니다. 그러나 조건은 키가 `sub`이고 값이 Amazon Cognito 사용자 풀에 로그인한 사용자를 고유하게 식별하는 암호화 컨텍스트를 요구합니다. Amazon Cognito에서 사용자 및 역할을 식별하는 방법에 대한 자세한 내용은 [Amazon Cognito 개발자 안내서](https://docs.aws.amazon.com/cognito/latest/developerguide/)의 [IAM 역할](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html)을 참조하세요.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/TestTeam"
  },
  "Action": [
    "kms:Decrypt",
    "kms:Encrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
       "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}"
    }
  }
}
```

**참고 항목**
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:EncryptionContextKeys
<a name="conditions-kms-encryption-context-keys"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:EncryptionContextKeys`  |  문자열(목록)  | 다중 값 |  `CreateGrant` `Decrypt` `Encrypt` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext` `ReEncrypt` `RetireGrant`  |  키 정책 및 IAM 정책  | 

`kms:EncryptionContextKeys` 조건 키를 사용하여 암호화 작업 요청의 [암호화 컨텍스트](encrypt_context.md)를 기반으로 [대칭 암호화 KMS 키](symm-asymm-choose-key-spec.md#symmetric-cmks)에 대한 액세스를 제어할 수 있습니다. 이 조건 키를 사용하여 각 암호화 컨텍스트 페어의 키만 평가하십시오. 암호화 컨텍스트의 키와 값을 평가하려면 이 `kms:EncryptionContext:context-key` 조건 키를 사용합니다.

[비대칭 KMS 키](symmetric-asymmetric.md) 또는 [HMAC KMS 키](hmac.md)를 사용하여 암호화 작업에서 암호화 컨텍스트를 지정할 수 없습니다. 비대칭 알고리즘 및 MAC 알고리즘은 암호화 컨텍스트를 지원하지 않습니다.

**참고**  
암호화 컨텍스트 키를 포함한 조건 키 값은 AWS KMS 키 정책에 대한 문자 및 인코딩 규칙을 준수해야 합니다. 이 조건 키를 사용하여 유효한 암호화 컨텍스트 키를 모두 표현하지 못할 수 있습니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요. IAM 정책 문서 규칙에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 이름 요구 사항](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names) 섹션을 참조하세요.

이는 [다중 값 조건 키](#set-operators)입니다. 각 API 요청에서 여러 암호화 컨텍스트 페어를 지정할 수 있습니다. `kms:EncryptionContextKeys`는 요청의 암호화 컨텍스트 키를 정책의 암호화 컨텍스트 키 집합과 비교합니다. 이러한 집합이 비교되는 방법을 확인하려면 정책 조건에서 `ForAnyValue` 또는 `ForAllValues` 연산자를 제공해야 합니다. 집합 연산자에 대한 자세한 내용은 IAM 사용 설명서의 [여러 키 및 값 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)을 참조하세요.
+ `ForAnyValue`: 요청에 있는 하나 이상의 암호화 컨텍스트 키가 정책 조건의 암호화 컨텍스트 키와 일치해야 합니다. 다른 암호화 컨텍스트 키가 허용됩니다. 요청에 암호화 컨텍스트가 없는 경우 조건이 충족되지 않습니다.
+ `ForAllValues`: 요청의 모든 암호화 컨텍스트 키는 정책 조건의 암호화 컨텍스트 키와 일치해야 합니다. 이 집합 연산자는 암호화 컨텍스트 키를 정책 조건의 컨텍스트 키로 제한합니다. 암호화 컨텍스트 키는 필요하지 않지만 지정되지 않은 암호화 컨텍스트 키는 금지됩니다.

다음 예제 키 정책 명령문에서 `kms:EncryptionContextKeys` 조건 키를 `ForAnyValue` 집합 연산자와 함께 사용합니다. 이 정책문은 지정된 작업에 대해 KMS 키를 사용할 수 있도록 허용하지만 값에 관계없이 요청의 암호화 컨텍스트 페어 중 하나 이상이 `AppName` 키를 포함하는 경우에만 가능합니다.

예를 들어, 이 키 정책문은 첫 번째 암호화 컨텍스트 페어가 조건을 충족하기 때문에 두 개의 암호화 컨텍스트 페어(`AppName=Helper` 및 `Project=Alpha`)가 있는 `GenerateDataKey` 요청을 허용합니다. `Project=Alpha`만 있거나 암호화 컨텍스트가 없는 요청은 실패합니다.

[StringEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html) 조건 연산은 대소문자를 구별하므로 정책문에는 암호화 컨텍스트 키의 철자와 대소 문자가 필요합니다. 그러나 `StringEqualsIgnoreCase`과 같은 키 대소문자를 무시하는 조건 연산자를 사용할 수 있습니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:EncryptionContextKeys": "AppName"
    }
  }
}
```

또한 `kms:EncryptionContextKeys` 조건 키를 사용하여 KMS 키를 사용하는 암호화 작업에서 암호화 컨텍스트(모든 암호화 컨텍스트)를 요구할 수도 있습니다.

다음의 키 정책문 예제는 `kms:EncryptionContextKeys` 조건 키와 함께 [를 사용하여 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null) 조건 키에서 API 요청에 존재할 때만(null 아님) CMK에 대한 액세스를 허용합니다. 이 조건은 암호화 컨텍스트의 키나 값을 확인하지 않습니다. 암호화 컨텍스트가 존재하는지 확인합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": [
    "kms:Encrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:EncryptionContextKeys": false
    }
  }
}
```

**다음 사항도 참조하세요.**
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)

## kms:ExpirationModel
<a name="conditions-kms-expiration-model"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ExpirationModel`  |  문자열  | 단일 값 |  `ImportKeyMaterial`  |  키 정책 및 IAM 정책  | 

`kms:ExpirationModel` 조건 키는 요청의 [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) 파라미터 값을 기반으로 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 작업에 대한 액세스를 제어합니다.

`ExpirationModel`은 가져온 키 자료가 만료되는지 여부를 결정하는 선택적 파라미터입니다. 유효한 값은 `KEY_MATERIAL_EXPIRES` 및 `KEY_MATERIAL_DOES_NOT_EXPIRE`이며, 기본값은 `KEY_MATERIAL_EXPIRES`입니다.

만료 날짜 및 시간은 [ValidTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) 파라미터의 값에 따라 결정됩니다. `ValidTo` 파라미터의 값이 `ExpirationModel`가 아닌 경우에는 `KEY_MATERIAL_DOES_NOT_EXPIRE` 파라미터가 필요합니다. 또한 [kms:ValidTo](#conditions-kms-valid-to) 조건 키를 사용하여 특정 만료 날짜를 액세스 조건으로 요구할 수도 있습니다.

다음 예제 정책 문은 `kms:ExpirationModel` 조건 키를 사용하여 요청에 `ExpirationModel` 파라미터가 포함되고 해당 값이 `KEY_MATERIAL_DOES_NOT_EXPIRE`일 때만 사용자가 키 구성 요소를 KMS 키로 가져올 수 있도록 합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE"
    }
  }
}
```

또한 `kms:ExpirationModel` 조건 키를 사용하여 사용자가 키 구성 요소가 만료된 경우에만 키 구성 요소를 가져오도록 할 수 있습니다. 다음다음 예제 키 정책 문은 [Null 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)와 함께 `kms:ExpirationModel` 조건 키를 사용하여 요청에 `ExpirationModel` 파라미터가 없는 경우에만 사용자가 키 구성 요소를 가져올 수 있도록 합니다. ExpirationModel의 기본값은 `KEY_MATERIAL_EXPIRES`입니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "Null": {
      "kms:ExpirationModel": true
    }
  }
}
```

**참고 항목**
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:GrantConstraintType
<a name="conditions-kms-grant-constraint-type"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantConstraintType`  |  문자열  | 단일 값 |  `CreateGrant` `RetireGrant`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 요청의 [권한 부여 제약 조건](create-grant-overview.md#grant-constraints) 유형에 따라 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에 대한 액세스를 제어할 수 있습니다.

권한 부여를 생성하면 선택적으로 권한 부여 제약을 지정해 특정 [암호화 컨텍스트](encrypt_context.md)가 있는 경우에만 권한 부여에 의해 허용된 작업을 허용할 수 있습니다. 권한 부여 제약은 `EncryptionContextEquals` 또는 `EncryptionContextSubset`, 두 유형 중 하나일 수 있습니다. 이 조건 키를 사용해 요청 제약에 어떤 유형이 포함되었는지 확인할 수 있습니다.

**중요**  
이 필드에 기밀 또는 민감한 정보를 포함하지 마십시오. 이 필드는 CloudTrail 로그 및 기타 출력에 일반 텍스트로 표시될 수 있습니다.

다음 예제 키 정책 문은 `kms:GrantConstraintType` 조건 키를 사용해 요청에 `EncryptionContextEquals` 권한 부여 제약이 포함된 경우에만 사용자가 권한 부여를 생성하도록 허용합니다. 이 예제는 키 정책의 정책 설명을 보여줍니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GrantConstraintType": "EncryptionContextEquals"
    }
  }
}
```

**참고 항목**
+ [kms:EncryptionContext:*context-key*](#conditions-kms-encryption-context)
+ [kms:EncryptionContextKeys](#conditions-kms-encryption-context-keys)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantIsForAWSResource
<a name="conditions-kms-grant-is-for-aws-resource"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantIsForAWSResource`  |  부울  | 단일 값 |  `CreateGrant` `ListGrants` `RevokeGrant`  |  키 정책 및 IAM 정책  | 

[AWS KMS와 통합된AWS 서비스](https://aws.amazon.com/kms/features/#AWS_Service_Integration)가 사용자를 대신하여 작업을 직접적으로 호출하는 경우에만 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html), [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 또는 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) 작업에 대한 권한을 허용하거나 거부합니다. 이 정책 조건은 사용자가 이러한 권한 부여 작업을 직접 호출하도록 허용하지 않습니다.

다음 예제 키 정책 문은 `kms:GrantIsForAWSResource` 조건 키를 사용합니다. Amazon EBS AWS KMS와 같이와 통합된 AWS 서비스는 지정된 보안 주체를 대신하여이 KMS 키에 대한 권한 부여를 생성할 수 있습니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:GrantIsForAWSResource": true
    }
  }
}
```

**참고 항목**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GrantOperations
<a name="conditions-kms-grant-operations"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:GrantOperations`  |  문자열  | 다중 값 |  `CreateGrant`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용해 요청에서 [권한 부여 작업](grants.md#terms-grant-operations)을 기반으로 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에 대한 액세스를 제어할 수 있습니다. 예를 들어, 사용자가 암호화할 권한은 위임하지만 해독할 권한은 위임하지 않는 권한 부여를 생성하도록 허용할 수 있습니다. 권한 부여에 대한 자세한 내용은 [권한 부여 사용](grants.md)을 참조하세요.

이는 [다중 값 조건 키](#set-operators)입니다. `kms:GrantOperations`는 `CreateGrant` 요청의 승인 작업 세트를 정책의 승인 작업 세트와 비교합니다. 이러한 집합이 비교되는 방법을 확인하려면 정책 조건에서 `ForAnyValue` 또는 `ForAllValues` 연산자를 제공해야 합니다. 집합 연산자에 대한 자세한 내용은 IAM 사용 설명서의 [여러 키 및 값 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)을 참조하세요.
+ `ForAnyValue`: 요청의 모든 권한 부여 작업은 정책 조건의 부여 작업과 일치해야 합니다. 기타 권한 부여 작업이 허용됩니다.
+ ForAllValues: 요청의 모든 권한 부여 작업은 정책 조건의 부여 작업과 일치해야 합니다. 이 집합 연산자는 권한 부여 작업을 정책 조건에 지정된 작업으로 제한합니다. 어떠한 권한 부여 작업도 필요하지 않지만 지정되지 않은 권한 부여 작업은 금지합니다.

  ForAllValues는 요청에 권한 부여 작업이 없을 때 true를 반환하지만 `CreateGrant`는 허용하지 않습니다. 만약 `Operations` 파라미터가 없거나 null 값을 갖는 경우 `CreateGrant` 요청이 실패합니다.

다음 예제 키 정책 문은 `kms:GrantOperations` 조건 키를 사용하여 권한 부여 작업이 `Encrypt`, `ReEncryptTo` 또는 둘 다인 경우에만 사용자가 권한 부여를 생성할 수 있도록 합니다. 권한 부여에 다른 작업이 포함된 경우 `CreateGrant` 요청이 실패합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "ForAllValues:StringEquals": {
      "kms:GrantOperations": [
        "Encrypt",
        "ReEncryptTo"
      ]
    }
  }
}
```

정책 조건의 집합 연산자를 `ForAnyValue`로 변경하면 정책문에서 권한 부여의 권한 부여 작업 중 하나 이상이 `Encrypt` 또는 `ReEncryptTo`여야 하지만 `Decrypt` 또는 `ReEncryptFrom`과 같은 다른 권한 부여 작업은 허용합니다.

**참고 항목**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:GranteePrincipal
<a name="conditions-kms-grantee-principal"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:GranteePrincipal`  |  문자열  | 단일 값 |  `CreateGrant`  |  IAM 및 키 정책  | 

이 조건 키를 사용하여 요청의 [GranteePrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-GranteePrincipal) 파라미터 값을 기반으로 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에 대한 액세스를 제어할 수 있습니다. 예를 들면 `CreateGrant` 요청의 피부여자 보안 주체가 조건문에 지정된 보안 주체와 일치할 때만 사용자에게 KMS 키 사용 권한을 생성하도록 허용할 수 있습니다.

권한 부여자 위탁자를 지정하려면 AWS 위탁자의 Amazon 리소스 이름(ARN)을 사용합니다. 유효한 보안 주체에는 IAM 사용자 AWS 계정, IAM 역할, 페더레이션 사용자 및 수임된 역할 사용자가 포함됩니다. 위탁자의 ARN 구문에 대한 도움말은 *IAM 사용 설명서*의 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 참조하세요.

다음 예제 키 정책 문은 `kms:GranteePrincipal` 조건 키를 사용하여 권한의 피부여자 보안 주체가 `LimitedAdminRole`일 때만 KMS 키 권한 부여를 생성합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**참고 항목**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:RetiringPrincipal](#conditions-kms-retiring-principal)

## kms:KeyAgreementAlgorithm
<a name="conditions-kms-key-agreement-algorithm"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyAgreementAlgorithm`  |  문자열  | 단일 값 | `DeriveSharedSecret` |  키 정책 및 IAM 정책  | 

`kms:KeyAgreementAlgorithm` 조건 키를 사용하면 요청의 `KeyAgreementAlgorithm` 파라미터 값을 기반으로 [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html) 작업에 대한 액세스를 제어할 수 있습니다. `KeyAgreementAlgorithm`의 유일한 유효 값은 `ECDH`입니다.

예를 들어 다음 키 정책 문은 `kms:KeyAgreementAlgorithm` 조건 키를 사용하여 `KeyAgreementAlgorithm`이 `ECDH`가 아닌 한 DeriveSharedSecret에 대한 모든 액세스를 거부합니다.

```
{
       "Effect": "Deny",
       "Principal": {
         "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
       },
       "Action": "kms:DeriveSharedSecret",
       "Resource": "*",
       "Condition": {
            "StringNotEquals": {
               "kms:KeyAgreementAlgorithm": "ECDH"
         }
       }
}
```

**참고 항목**
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyOrigin
<a name="conditions-kms-key-origin"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyOrigin`  |  문자열  | 단일 값 |  `CreateKey` KMS 키 리소스 작업  |  IAM 정책 키 정책 및 IAM 정책  | 

`kms:KeyOrigin` 조건 키는 작업에 의해 작성되거나 작업에 사용된 KMS 키의 `Origin` 속성 값에 따라 작업에 대한 액세스를 제어합니다. 그것은 리소스 조건 또는 요청 조건으로 작동합니다.

이 조건 키를 사용하여 요청의 [Origin](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-Origin) 파라미터 값을 기반으로 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업에 대한 액세스를 제어할 수 있습니다. `Origin`의 유효한 값은 `AWS_KMS`, `AWS_CLOUDHSM`, `EXTERNAL_KEY_STORE` 및 `EXTERNAL`입니다.

예를 들어 키 구성 요소가 AWS KMS (`AWS_KMS`)에서 생성되는 경우에만, [CloudHSM 사용자 지정 키 스토어](key-store-overview.md#custom-key-store-overview)()와 연결된 AWS CloudHSM 클러스터에서 키 구성 요소가 생성되는 경우에만`AWS_CLOUDHSM`, [외부 키 스토어()에서 키 구성 요소가 생성되는 경우에만 또는 외부 소스](key-store-overview.md#custom-key-store-overview)(`EXTERNAL_KEY_STORE`)에서 [키 구성 요소를 가져오는](importing-keys.md) 경우에만 KMS 키를 생성할 수 있습니다`EXTERNAL`.

다음 예제 키 정책 문은 `kms:KeyOrigin` 조건 키를 사용하여가 키 구성 요소를 생성할 때만 KMS 키를 AWS KMS 생성합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": "kms:CreateKey",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_KMS"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:GenerateDataKeyPair",
        "kms:GenerateDataKeyPairWithoutPlaintext",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "AWS_CLOUDHSM"
        }
      }
    }
  ]
}
```

------

또한 `kms:KeyOrigin` 조건 키를 사용하여 작업에 사용되는 KMS 키의 `Origin` 속성을 기반으로 KMS 키를 사용 또는 관리하는 작업에 대한 액세스를 제어할 수도 있습니다. 작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대해 `Resources` 열에서 `KMS key` 값을 찾습니다.

예를 들어 다음 IAM 정책에서는 보안 주체가 지정된 KMS 키 리소스 작업을 수행하도록 허용하지만 계정의 사용자 지정 키 스토어에서 생성된 KMS 키에 대해서만 허용합니다.

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyWithoutPlaintext",
    "kms:GenerateDataKeyPair",
    "kms:GenerateDataKeyPairWithoutPlaintext",
    "kms:ReEncrypt*"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "AWS_CLOUDHSM"
    }
  }
}
```

**참고 항목**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:KeySpec](#conditions-kms-key-spec)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeySpec
<a name="conditions-kms-key-spec"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:KeySpec`  |  문자열  | 단일 값 |  `CreateKey` KMS 키 리소스 작업 |  IAM 정책 키 정책 및 IAM 정책  | 

`kms:KeySpec` 조건 키는 작업에 의해 작성되거나 작업에 사용된 KMS 키의 `KeySpec` 속성 값에 따라 작업에 대한 액세스를 제어합니다.

IAM 정책에서 이 조건 키를 사용하여 `CreateKey` 요청의 [KeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeySpec) 파라미터 값을 기반으로 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업에 대한 액세스를 제어할 수 있습니다. 예를 들어 이 조건을 사용하여 사용자가 대칭 암호화 KMS 키만 생성하거나 HMAC KMS 키만 생성하도록 허용할 수 있습니다.

다음 예제 IAM 정책문은 `kms:KeySpec` 조건 키를 사용하여 보안 주체가 RSA 비대칭 KMS 키만을 생성하도록 허용합니다. 이 권한은 요청의 `KeySpec`이 `RSA_`로 시작하는 경우에만 유효합니다.

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:KeySpec": "RSA_*"
    }
  }
}
```

또한 `kms:KeySpec` 조건 키를 사용하여 작업에 사용되는 KMS 키의 `KeySpec` 속성을 기반으로 KMS 키를 사용 또는 관리하는 작업에 대한 액세스를 제어할 수도 있습니다. 작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대한 `Resources` 열에서 `KMS key` 값을 찾습니다.

예를 들어 다음 IAM 정책에서는 보안 주체가 지정된 KMS 키 리소스 작업을 수행하도록 허용하지만 계정의 대칭 암호화 KMS 키에 대해서만 허용합니다.

```
{
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeySpec": "SYMMETRIC_DEFAULT"
    }
  }
}
```

**참고 항목**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CustomerMasterKeySpec(사용되지 않음)](#conditions-kms-key-spec-replaced)
+ [kms:DataKeyPairSpec](#conditions-kms-data-key-spec)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeyUsage](#conditions-kms-key-usage)

## kms:KeyUsage
<a name="conditions-kms-key-usage"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:KeyUsage`  |  문자열  | 단일 값 |  `CreateKey` KMS 키 리소스 작업  |  IAM 정책 키 정책 및 IAM 정책  | 

`kms:KeyUsage` 조건 키는 작업에 의해 작성되거나 작업에 사용된 KMS 키의 `KeyUsage` 속성 값에 따라 작업에 대한 액세스를 제어합니다.

이 조건 키를 사용하여 요청의 [KeyUsage](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-KeyUsage) 파라미터 값을 기반으로 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업에 대한 액세스를 제어할 수 있습니다. `KeyUsage`의 유효한 값은 `ENCRYPT_DECRYPT`, `SIGN_VERIFY`, `GENERATE_VERIFY_MAC` 및 `KEY_AGREEMENT`입니다.

예를 들어, `KeyUsage`가 `ENCRYPT_DECRYPT`인 경우에만 사용자가 KMS 키를 생성하도록 허용하고 `KeyUsage`가 `SIGN_VERIFY`인 경우에는 사용자 권한을 거부할 수 있습니다.

다음 예제 IAM 정책 문은 `kms:KeyUsage` 조건 키를 사용하여 `KeyUsage`가 `ENCRYPT_DECRYPT`인 경우에만 사용자가 KMS 키를 생성하도록 허용합니다.

```
{
  "Effect": "Allow",  
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "ENCRYPT_DECRYPT"
    }
  }
}
```

또한 `kms:KeyUsage` 조건 키를 사용하여 작업에 사용되는 KMS 키의 `KeyUsage` 속성을 기반으로 KMS 키를 사용 또는 관리하는 작업에 대한 액세스를 제어할 수도 있습니다. 작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대해 `Resources` 열에서 `KMS key` 값을 찾습니다.

예를 들어 다음 IAM 정책에서는 보안 주체가 지정된 KMS 키 리소스 작업을 수행하도록 허용하지만 계정에서 서명 및 확인에 사용되는 KMS 키에 대해서만 허용합니다.

```
{
  "Effect": "Allow",
  "Action": [
    "kms:CreateGrant",
    "kms:DescribeKey",
    "kms:GetPublicKey",
    "kms:ScheduleKeyDeletion"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyUsage": "SIGN_VERIFY"
    }
  }
}
```

**참고 항목**
+ [kms:BypassPolicyLockoutSafetyCheck](#conditions-kms-bypass-policy-lockout-safety-check)
+ [kms:CustomerMasterKeyUsage(사용되지 않음)](#conditions-kms-key-usage-replaced)
+ [kms:KeyOrigin](#conditions-kms-key-origin)
+ [kms:KeySpec](#conditions-kms-key-spec)

## kms:MacAlgorithm
<a name="conditions-kms-mac-algorithm"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:MacAlgorithm`  |  문자열  | 단일 값 | `GenerateMac``VerifyMac` |  키 정책 및 IAM 정책  | 

`kms:MacAlgorithm` 조건 키를 사용해 요청의 `MacAlgorithm` 파라미터 값을 기반으로 [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 및 [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 작업에 대한 액세스를 제어할 수 있습니다.

다음 예제 키 정책은 요청의 MAC 알고리즘이 `HMAC_SHA_384` 또는 `HMAC_SHA_512`인 경우에만 `testers` 역할을 수임할 수 있는 사용자가 HMAC KMS 키를 사용하여 HMAC 태그를 생성하고 확인하도록 허용합니다. 이 정책은 각각 고유한 조건을 가진 두 개의 별도의 정책 문을 사용합니다. 단일 조건문에 MAC 알고리즘을 두 개 이상 지정하는 경우 조건에는 둘 중 하나가 아니라 두 알고리즘이 모두 필요합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_384"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/testers"
      },
      "Action": [
        "kms:GenerateMac",
        "kms:VerifyMac"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:MacAlgorithm": "HMAC_SHA_512"
        }
      }
    }
  ]
}
```

------

**참고 항목**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MessageType
<a name="conditions-kms-message-type"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:MessageType`  |  문자열  | 단일 값 |  `Sign` `Verify`  | 키 정책 및 IAM 정책 | 

`kms:MessageType` 조건 키는 요청의 `MessageType` 파라미터 값을 기반으로 [서명](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) 및 [확인](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) 작업에 대한 액세스를 제어합니다. `MessageType` 유효값은 `RAW` 및 `DIGEST`입니다.

예를 들어 다음 키 정책 문은 `kms:MessageType` 조건 키를 사용하여 사용자가 비대칭 KMS 키를 사용하여 메시지에 서명하도록 허용하지만 메시지 다이제스트는 허용하지 않습니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:MessageType": "RAW"
    }
  }
}
```

**참고 항목**
+ [kms:SigningAlgorithm](#conditions-kms-signing-algorithm)

## kms:MultiRegion
<a name="conditions-kms-multiregion"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegion`  |  부울  | 단일 값 |  `CreateKey` KMS 키 리소스 작업  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 단일 리전 키 또는 [다중 리전 키](multi-region-keys-overview.md)에서만 작업을 허용할 수 있습니다. `kms:MultiRegion` 조건 키는 KMS 키의 AWS KMS 속성 값에 따라 KMS 키 및 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업에 대한 액세스를 제어`MultiRegion`합니다. 유효 값은 `true`(다중 리전) 및 `false`(단일 리전)입니다. 모든 KMS 키에는 `MultiRegion` 속성입니다.

예를 들어 다음 IAM 정책문은 `kms:MultiRegion` 조건 키를 사용하여 보안 주체가 단일 리전 키를 생성하도록 허용합니다.

```
{
  "Effect": "Allow",
  "Action": "kms:CreateKey",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:MultiRegion": false
    }
  }
}
```

## kms:MultiRegionKeyType
<a name="conditions-kms-multiregion-key-type"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:MultiRegionKeyType`  |  문자열  | 단일 값 |  `CreateKey` KMS 키 리소스 작업  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여[ 다중 리전 기본 키](multi-region-keys-overview.md#mrk-primary-key) 또는 [다중 리전 복제본 키](multi-region-keys-overview.md#mrk-replica-key)에서만 작업을 허용할 수 있습니다. `kms:MultiRegionKeyType` 조건 키는 KMS 키의 `MultiRegionKeyType` 속성 AWS KMS 에 따라 KMS 키 및 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업에 대한 액세스를 제어합니다. 유효 값은 `PRIMARY` 및 `REPLICA`입니다. 다중 리전 키에만 `MultiRegionKeyType` 속성이 있습니다.

일반적으로 IAM 정책에서 `kms:MultiRegionKeyType` 조건 키를 사용하여 여러 KMS 키에 대한 액세스를 제어합니다. 그러나 지정된 다중 리전 키가 기본 또는 복제본으로 변경될 수 있으므로 특정 다중 리전 키가 기본 또는 복제본 키인 경우에만 작업을 허용하려면 키 정책에서 이 조건을 사용할 수 있습니다.

예를 들어 다음 IAM 정책 설명은 `kms:MultiRegionKeyType` 조건 키를 사용하여 보안 주체가 지정된 AWS 계정의 다중 리전 복제본 키에서만 키 삭제를 예약하고 취소할 수 있도록 합니다.

```
{
  "Effect": "Allow",
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:MultiRegionKeyType": "REPLICA"
    }
  }
}
```

모든 다중 지역 키에 대한 액세스를 허용하거나 거부하려면 `kms:MultiRegionKeyType`와 함께 두 값 또는 null 값을 모두 사용할 수 있습니다. 그러나, [kms:MultiRegion](#conditions-kms-multiregion) 조건 키를 사용하는 것이 좋습니다.

## kms:PrimaryRegion
<a name="conditions-kms-primary-region"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:PrimaryRegion`  |  문자열(목록)  | 단일 값 |  `UpdatePrimaryRegion`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 작업에서 대상 리전을 제한할 수 있습니다. 다중 리전 기본 키를 호스팅 AWS 리전 할 수 있는 입니다.

`kms:PrimaryRegion` 조건 키는 `PrimaryRegion` 파라미터 변수의 값을 기반으로 [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 작업에 대한 액세스를 제어합니다. `PrimaryRegion` 파라미터는 기본으로 승격되는 [다중 리전 복제본 키](multi-region-keys-overview.md#mrk-replica-key) AWS 리전 의를 지정합니다. 조건의 값은 또는와 같은 하나 이상의 AWS 리전 이름 `ap-southeast-2`또는 `us-east-1`와 같은 리전 이름 패턴입니다. `eu-*` 

예를 들어 다음 키 정책 문은 `kms:PrimaryRegion` 조건 키를 사용하여 보안 주체가 다중 리전 키의 기본 리전을 지정된 4개의 리전 중 하나로 업데이트할 수 있습니다.

```
{
  "Effect": "Allow",
  "Action": "kms:UpdatePrimaryRegion",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Developer"
  },
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-east-1",
         "us-west-2",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

## kms:ReEncryptOnSameKey
<a name="conditions-kms-reencrypt-on-same-key"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ReEncryptOnSameKey`  |  부울  | 단일 값 |  `ReEncrypt`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용해 요청이 원래 암호화에 사용된 것과 동일한 대상 KMS 키를 지정하는지 여부에 따라 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 작업에 대한 액세스를 제어할 수 있습니다.

예를 들어 다음 키 정책 문은 `kms:ReEncryptOnSameKey` 조건 키를 사용해 대상 KMS 키가 원래 암호화에 사용된 것과 동일한 경우에만 사용자가 다시 암호화하도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ReEncrypt*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "kms:ReEncryptOnSameKey": true
    }
  }
}
```

## kms:RequestAlias
<a name="conditions-kms-request-alias"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RequestAlias`  |  문자열(목록)  | 단일 값 |  [암호화 작업](kms-cryptography.md#cryptographic-operations) [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 요청이 KMS 키를 식별하는 데 특정 별칭을 사용하는 경우에만 작업을 허용할 수 있습니다. 이 `kms:RequestAlias` 조건 키는 요청에서 해당 KMS 키를 식별하는 [별칭](kms-alias.md)을 기반으로 암호화 작업에 사용되는 KMS 키 `GetPublicKey` 또는 `DescribeKey`에 대한 액세스를 제어합니다. (이 정책 조건은 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) 작업이 KMS 키 또는 별칭을 사용하지 않기 때문에 영향을 미치지 않습니다.) 

이 조건은에서 [속성 기반 액세스 제어](abac.md)(ABAC)를 지원 AWS KMS하므로 KMS 키의 태그 및 별칭을 기반으로 KMS 키에 대한 액세스를 제어할 수 있습니다. 정책 또는 권한 부여를 변경하지 않고 태그 및 별칭을 사용하여 KMS 키에 대한 액세스를 허용할 수 있습니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md) 섹션을 참조하세요.

이 정책 조건에서 별칭을 지정하려면 [별칭 이름](concepts.md#key-id-alias-name)(예: `alias/project-alpha`) 또는 별칭 이름 패턴(예: `alias/*test*`)을 사용합니다. 이 조건 키의 값에 [별칭 ARN](concepts.md#key-id-alias-ARN)을 지정할 수 없습니다.

이 조건을 만족시키기 위해 요청의 `KeyId` 파라미터 값은 일치하는 별칭 이름 또는 별칭 ARN이어야 합니다. 요청이 다른 [키 식별자](concepts.md#key-id)를 사용하면 동일한 KMS 키를 식별하더라도 조건을 충족하지 못합니다.

예를 들어 다음 키 정책문은 보안 주체가 KMS 키에서 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 작업을 호출하도록 허용합니다. 그러나 이는 요청의 `KeyId` 파라미터 값이 `alias/finance-key`이거나 해당 별칭 이름(예: `arn:aws:kms:us-west-2:111122223333:alias/finance-key`)이 있는 별칭 ARN인 경우에만 허용됩니다.

```
{
  "Sid": "Key policy using a request alias condition",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/developer"
  },
  "Action": "kms:GenerateDataKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RequestAlias": "alias/finance-key"
    }
  }
}
```

이 조건 키를 사용하여 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 또는 [DeleteAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteAlias.html)와 같은 별칭 작업에 대한 액세스를 제어할 수 없습니다. 별칭 작업에 대한 액세스 제어와 관련된 자세한 내용은 [별칭에 대한 액세스 제어](alias-access.md) 섹션을 참조하세요.

## kms:ResourceAliases
<a name="conditions-kms-resource-aliases"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ResourceAliases`  |  문자열(목록)  | 다중 값 | KMS 키 리소스 작업 |  IAM 정책만  | 

이 조건 키를 사용하여 KMS 키와 연결된 [별칭](kms-alias.md)을 기반으로 KMS 키에 대한 액세스를 제어합니다. 작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대한 `Resources` 열에서 `KMS key` 값을 찾습니다.

이 조건은 AWS KMS의 속성 기반 액세스 제어(ABAC)를 지원합니다. ABAC를 사용하면 KMS 키에 할당된 태그 및 KMS 키와 연결된 별칭을 기반으로 KMS 키에 대한 액세스를 제어할 수 있습니다. 정책 또는 권한 부여를 변경하지 않고 태그 및 별칭을 사용하여 KMS 키에 대한 액세스를 허용할 수 있습니다. 자세한 내용은 [에 대한 ABAC AWS KMS](abac.md)을 참조하세요.

별칭은 AWS 계정 및 리전에서 고유해야 하지만,이 조건을 사용하면 동일한 리전의 여러 KMS 키(`StringLike`비교 연산자 사용) 또는 각 계정마다 다른 여러 KMS 키에 대한 액세스를 제어할 AWS 리전 수 있습니다.

**참고**  
[kms:ResourceAliases](#conditions-kms-resource-aliases) 조건은 KMS 키가 [KMS 키당 별칭](resource-limits.md#aliases-per-key) 할당량을 준수하는 경우에만 유효합니다. KMS 키가 이 할당량을 초과하면 `kms:ResourceAliases` 조건에 따라 KMS 키를 사용할 권한이 있는 보안 주체는 KMS 키에 대한 액세스가 거부됩니다.

이 정책 조건에서 별칭을 지정하려면 [별칭 이름](concepts.md#key-id-alias-name)(예: `alias/project-alpha`) 또는 별칭 이름 패턴(예: `alias/*test*`)을 사용합니다. 이 조건 키의 값에 [별칭 ARN](concepts.md#key-id-alias-ARN)을 지정할 수 없습니다. 조건을 충족하려면 작업에 사용된 KMS 키에 지정된 별칭이 있어야 합니다. 작업 요청에서 KMS 키가 식별되는지 여부와 방법은 중요하지 않습니다.

KMS 키와 연결된 별칭 집합을 정책의 별칭 집합과 비교하는 다중값 조건 키입니다. 이러한 집합이 비교되는 방법을 확인하려면 정책 조건에서 `ForAnyValue` 또는 `ForAllValues` 연산자를 제공해야 합니다. 집합 연산자에 대한 자세한 내용은 IAM 사용 설명서의 [여러 키 및 값 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)을 참조하세요.
+ ForAnyValue: KMS 키와 연결된 별칭이 하나 이상 정책 조건의 별칭과 일치해야 합니다. 다른 별칭은 허용됩니다. KMS 키에 별칭이 없으면 조건이 충족되지 않습니다.
+ ForAllValues: KMS 키와 연결된 모든 별칭은 정책의 별칭과 일치해야 합니다. 이 집합 연산자는 KMS 키와 연결된 별칭을 정책 조건의 별칭으로 제한합니다. 별칭은 필요하지 않지만 지정되지 않은 별칭을 금지합니다.

예를 들어, 다음 IAM 정책 문은 보안 주체 AWS 계정 가 `finance-key`별칭과 연결된 지정된의 모든 KMS 키에 대해 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 작업을 호출하도록 허용합니다. (영향을 받는 KMS 키의 키 정책도 보안 주체의 계정에서 이 작업에 사용할 수 있도록 허용해야 합니다.) KMS 키와 연결될 수 있는 여러 별칭 중 하나가`alias/finance-key`인 경우 조건이 충족되었음을 나타내기 위해 조건은 `ForAnyValue` 집합 연산자를 사용합니다.

`kms:ResourceAliases` 조건은 요청이 아닌 리소스를 기반으로 하기 때문에 요청이 [키 ID](concepts.md#key-id-key-id) 또는 [키 ARN](concepts.md#key-id-key-ARN)을 사용하여 KMS 키를 식별하는 경우에도 `finance-key` 별칭과 연결된 KMS 키에 대해 `GenerateDataKey` 직접 호출이 성공합니다.

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": "kms:GenerateDataKey",
  "Resource": [
    "arn:aws:kms:*:111122223333:key/*",
    "arn:aws:kms:*:444455556666:key/*"
  ],
  "Condition": {
    "ForAnyValue:StringEquals": {
      "kms:ResourceAliases": "alias/finance-key"
    }
  }
}
```

다음 예제 IAM 정책 설명은 보안 주체가 KMS 키를 활성화 및 비활성화하도록 허용하지만 KMS 키의 모든 별칭에 "`Test`"가 포함된 경우에만 가능합니다. 이 정책 설명은 두 가지 조건을 사용합니다. `ForAllValues` 집합 연산자가 있는 조건에서는 KMS 키와 연결된 모든 별칭에 "Test"가 포함되어야 합니다. `ForAnyValue` 집합 연산자가 있는 조건에서는 KMS 키에 "Test"라는 별칭이 하나 이상 있어야 합니다. `ForAnyValue` 조건이 없었다면 이 정책문은 보안 주체가 별칭이 없는 KMS 키를 사용하도록 허용했을 것입니다.

```
{
  "Sid": "AliasBasedIAMPolicy",
  "Effect": "Allow",
  "Action": [
    "kms:EnableKey",
    "kms:DisableKey"
  ],
  "Resource": "arn:aws:kms:*:111122223333:key/*",
  "Condition": {
    "ForAllValues:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    },
    "ForAnyValue:StringLike": {
      "kms:ResourceAliases": [
        "alias/*Test*"
      ]
    }
  }
}
```

## kms:ReplicaRegion
<a name="conditions-kms-replica-region"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ReplicaRegion`  |  문자열(목록)  | 단일 값 |  `ReplicateKey`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 보안 주체 AWS 리전 가 [다중 리전 키를](multi-region-keys-overview.md) 복제할 수 있는를 제한할 수 있습니다. `kms:ReplicaRegion` 조건 키는 요청의 [ReplicaRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) 파라미터 값을 기반으로 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에 대한 액세스를 제어합니다. 이 파라미터는 새 [복제본 키](multi-region-keys-overview.md#mrk-replica-key)에 대한 AWS 리전 을 지정합니다.

조건의 값은 또는와 같은 하나 이상의 AWS 리전 이름 `ap-southeast-2`또는 `us-east-1`와 같은 이름 패턴입니다`eu-*`. 가 AWS 리전 AWS KMS 지원하는 이름 목록은의 [AWS Key Management Service 엔드포인트 및 할당량을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/kms.html) AWS 일반 참조.

예를 들어 다음 키 정책 문은 `kms:ReplicaRegion`조건 키를 사용하여 `ReplicaRegion` 파라미터의 값이 지정된 리전 중 하나인 경우에만 보안 주체가 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 작업을 호출하도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey"
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [ 
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

이 조건 키는 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 작업에 대한 액세스만 제어합니다. [UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 작업에 대한 액세스를 제어하려면[kms:PrimaryRegion](#conditions-kms-primary-region) 조건 키를 사용합니다.

## kms:RetiringPrincipal
<a name="conditions-kms-retiring-principal"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RetiringPrincipal`  |  문자열(목록)  | 단일 값 |  `CreateGrant`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 요청의 [RetiringPrincipal](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html#KMS-CreateGrant-request-RetiringPrincipal) 파라미터 값을 기반으로 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업에 대한 액세스를 제어할 수 있습니다. 예를 들면 `CreateGrant` 요청의 `RetiringPrincipal`이 조건문의 `RetiringPrincipal`과 일치할 때만 사용자에게 KMS 키 사용 권한을 생성하도록 허용할 수 있습니다.

사용 중지 위탁자를 지정하려면 AWS 위탁자의 Amazon 리소스 이름(ARN)을 사용합니다. 유효한 보안 주체에는 IAM 사용자 AWS 계정, IAM 역할, 페더레이션 사용자 및 수임된 역할 사용자가 포함됩니다. 위탁자의 ARN 구문에 대한 도움말은 *IAM 사용 설명서*의 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 참조하세요.

다음 예제 키 정책 문을 사용하면 사용자가 KMS 키에 대한 권한을 생성할 수 있습니다. `kms:RetiringPrincipal` 조건 키는 권한을 `CreateGrant` 요청으로 제한하며, 사용 중지 위탁자는 `LimitedAdminRole`입니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:RetiringPrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole"
    }
  }
}
```

**참고 항목**
+ [kms:GrantConstraintType](#conditions-kms-grant-constraint-type)
+ [kms:GrantIsForAWSResource](#conditions-kms-grant-is-for-aws-resource)
+ [kms:GrantOperations](#conditions-kms-grant-operations)
+ [kms:GranteePrincipal](#conditions-kms-grantee-principal)

## kms:RotationPeriodInDays
<a name="conditions-kms-rotation-period-in-days"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RotationPeriodInDays`  |  Numeric  | 단일 값 |  `EnableKeyRotation`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 위탁자가 [EnableKeyRotation](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKeyRotation.html) 요청의 `RotationPeriodInDays` 파라미터에 지정할 수 있는 값을 제한할 수 있습니다.

는 각 자동 키 교체 날짜 사이의 일수를 `RotationPeriodInDays` 지정합니다.를 AWS KMS 사용하면 90\$12,560일의 교체 기간을 지정할 수 있지만 조건 `kms:RotationPeriodInDays` 키를 사용하여 유효한 범위 내에서 최소 교체 기간을 적용하는 등 교체 기간을 추가로 제한할 수 있습니다.

예를 들어 다음 키 정책 문은 `kms:RotationPeriodInDays` 조건 키를 사용하여 키 교체 기간이 180일 이하인 경우에는 위탁자가 키 교체를 활성화하지 못하도록 합니다.

```
{
  "Effect": "Deny",
  "Action": "kms:EnableKeyRotation",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:RotationPeriodInDays" : "180"
      }
  }
}
```

## kms:ScheduleKeyDeletionPendingWindowInDays
<a name="conditions-kms-schedule-key-deletion-pending-window-in-days"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ScheduleKeyDeletionPendingWindowInDays`  |  Numeric  | 단일 값 |  `ScheduleKeyDeletion`  |  키 정책 및 IAM 정책  | 

이 조건 키를 사용하여 보안 주체가 [ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) 요청의 `PendingWindowInDays` 파라미터에 지정할 수 있는 값을 제한할 수 있습니다.

 AWS KMS 는 키를 삭제하기 전에 대기할 일수를 `PendingWindowInDays` 지정합니다. AWS KMS 를 사용하면 7\$130일의 대기 기간을 지정할 수 있지만 조건 `kms:ScheduleKeyDeletionPendingWindowInDays` 키를 사용하여 유효 범위 내에서 최소 대기 기간을 적용하는 등 대기 기간을 추가로 제한할 수 있습니다.

예를 들어 다음 키 정책 문은 `kms:ScheduleKeyDeletionPendingWindowInDays` 조건 키를 사용하여 대기 기간이 21일 이하인 경우 보안 주체가 키 삭제 일정을 잡을 수 없도록 합니다.

```
{
  "Effect": "Deny",
  "Action": "kms:ScheduleKeyDeletion",
  "Principal": "*",
  "Resource": "*",
  "Condition" : {
      "NumericLessThanEquals" : {
        "kms:ScheduleKeyDeletionPendingWindowInDays" : "21"
      }
  }
}
```

## kms:SigningAlgorithm
<a name="conditions-kms-signing-algorithm"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:SigningAlgorithm`  |  문자열  | 단일 값 |  `Sign`  `Verify`  |  키 정책 및 IAM 정책  | 

`kms:SigningAlgorithm` 조건 키를 사용해 요청의 [SigningAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-SigningAlgorithm) 파라미터 값을 기반으로 [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) 및 [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html) 작업에 대한 액세스를 제어할 수 있습니다. 이 조건 키는 외부의 비대칭 KMS 키 페어에서 퍼블릭 키를 사용하여 서명을 확인하는 AWS KMS등 외부에서 수행되는 작업에 영향을 주지 않습니다 AWS KMS.

다음 예제 키 정책은 요청에 사용된 서명 알고리즘이 `RSASSA_PSS_SHA512` 같은 RSASSA\$1PSS 알고리즘인 경우에만 `testers` 역할을 수임할 수 있는 사용자가 KMS 키를 사용하여 메시지에 서명하도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/testers"
  },
  "Action": "kms:Sign",
  "Resource": "*",
  "Condition": {
    "StringLike": {
      "kms:SigningAlgorithm": "RSASSA_PSS*"
    }
  }
}
```

**참고 항목**
+ [kms:EncryptionAlgorithm](#conditions-kms-encryption-algorithm)
+ [kms:MacAlgorithm](#conditions-kms-mac-algorithm)
+ [kms:MessageType](#conditions-kms-message-type)

## kms:ValidTo
<a name="conditions-kms-valid-to"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ValidTo`  |  타임스탬프  | 단일 값 |  `ImportKeyMaterial`  |  키 정책 및 IAM 정책  | 

`kms:ValidTo` 조건 키는 가져온 키 자료가 만료되는 시기를 결정하는 요청의 [ValidTo](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ValidTo) 파라미터 값을 기반으로 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 작업에 대한 액세스를 제어합니다. 이 값은 [Unix 시간](https://en.wikipedia.org/wiki/Unix_time)으로 표현됩니다.

기본적으로 `ValidTo` 파라미터는 `ImportKeyMaterial` 요청에서 필요합니다. 하지만 [ExpirationModel](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#KMS-ImportKeyMaterial-request-ExpirationModel) 파라미터의 값이 `KEY_MATERIAL_DOES_NOT_EXPIRE`이면 `ValidTo` 파라미터가 유효하지 않습니다. 또한 [kms:ExpirationModel](#conditions-kms-expiration-model) 조건 키를 사용하여 `ExpirationModel` 파라미터 또는 특정 파라미터 값을 요구할 수도 있습니다.

다음 예제 정책 문을 사용하면 키 재료를 KMS 키로 가져올 수 있습니다. `kms:ValidTo` 조건 키는 `ValidTo` 값이 `1546257599.0` (2018년 12월 31일 11:59:59 PM)보다 작거나 같은 `ImportKeyMaterial` 요청에 대한 권한을 제한합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:ImportKeyMaterial",
  "Resource": "*",
  "Condition": {
    "NumericLessThanEquals": {
      "kms:ValidTo": "1546257599.0"
    }
  }
}
```

**참고 항목**
+ [kms:ExpirationModel](#conditions-kms-expiration-model) 
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:ViaService
<a name="conditions-kms-via-service"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:ViaService`  |  문자열  | 단일 값 |  KMS 키 리소스 작업  |  키 정책 및 IAM 정책  | 

`kms:ViaService` 조건 키는 KMS 키 사용을 지정된의 요청으로 제한합니다 AWS 서비스. 이 조건 키는 [전달 액세스 세션](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)에만 적용됩니다. 각 `kms:ViaService` 조건 키에 하나 이상의 서비스를 지정할 수 있습니다. 작업은 특정 KMS 키에 대해 권한이 부여된 *KMS 키 리소스 작업*이어야 합니다. KMS 키 리소스 작업을 식별하려면 [작업 및 리소스 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서, 해당 작업에 대해 `Resources` 열에서 `KMS key` 값을 찾습니다.

예를 들어 다음 키 정책 설명은 `kms:ViaService` 조건 키를 사용하여 `ExampleRole`를 대신하여 미국 서부(오레곤) 리전의 Amazon EC2 또는 Amazon RDS에서 요청이 오는 경우에만 [고객 관리형 키](concepts.md#customer-mgn-key)를 지정된 작업에 사용할 수 있도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:CreateGrant",
    "kms:ListGrants",
    "kms:DescribeKey"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
        "ec2.us-west-2.amazonaws.com",
        "rds.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

또한 `kms:ViaService` 조건 키를 사용하여 요청이 특정 서비스에서 이루어지는 경우 KMS 키를 사용할 권한을 거부할 수도 있습니다. 예를 들어 키 정책에서 다음 정책 문은 `kms:ViaService` 조건 키를 사용하여 요청이 AWS Lambda 에서 `ExampleRole` 대신 이루어지는 경우 고객 관리형 키를 `Encrypt` 작업에 대해 사용하는 것을 금지합니다.

```
{
  "Effect": "Deny",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": [
    "kms:Encrypt"    
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": [
          "lambda.us-west-2.amazonaws.com"
      ]
    }
  }
}
```

**중요**  
`kms:ViaService` 조건 키를 사용할 경우 서비스가 AWS 계정의 보안 주체 대신 요청을 생성합니다. 이러한 보안 주체는 다음 권한을 가져야 합니다.  
KMS 키를 사용할 수 있는 권한입니다. 보안 주체는 서비스가 보안 주체 대신 고객 관리형 키를 사용할 수 있도록 이러한 권한을 통합 서비스에 부여해야 합니다. 자세한 정보는 [AWS 서비스와 함께 AWS KMS 암호화 사용](service-integration.md) 섹션을 참조하세요.
통합 서비스 사용 권한. 와 통합되는 AWS 서비스에 대한 액세스 권한을 사용자에게 부여하는 방법에 대한 자세한 내용은 통합 서비스에 대한 설명서를 AWS KMS참조하세요.

모든 [AWS 관리형 키](concepts.md#aws-managed-key)는 키 정책 문서에서 `kms:ViaService` 조건 키를 사용합니다. 이 조건은 KMS 키가 생성된 서비스에서 이루어지는 요청에만 KMS 키를 사용하도록 허용합니다. 에 대한 키 정책을 보려면 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 작업을 AWS 관리형 키사용합니다.

`kms:ViaService` 조건 키는 IAM 및 키 정책 설명에서 유효합니다. 사용자가 지정한 서비스가 [AWS KMS와 통합](https://aws.amazon.com/kms/features/#AWS_Service_Integration)되고 `kms:ViaService` 조건 키를 지원해야 합니다.

### `kms:ViaService` 조건 키를 지원하는 서비스
<a name="viaService_table"></a>

다음 표에는 AWS KMS 와 통합되고 고객 관리형 키에서 `kms:ViaService` 조건 키 사용을 지원하는 AWS 서비스가 나열되어 있습니다.이 표의 서비스는 일부 리전에서 사용하지 못할 수 있습니다. 모든 AWS 파티션에서 AWS KMS ViaService 이름의 `.amazonaws.com` 접미사를 사용합니다.

**참고**  
이 테이블의 모든 데이터를 보려면 가로 또는 세로로 스크롤해야 할 수도 있습니다.


| 서비스 이름 | AWS KMS ViaService 이름 | 
| --- | --- | 
| Amazon AI Operations | aiops.AWS\$1region.amazonaws.com | 
| AWS App Runner | apprunner.AWS\$1region.amazonaws.com | 
| AWS AppFabric | appfabric.AWS\$1region.amazonaws.com | 
| Amazon AppFlow | appflow.AWS\$1region.amazonaws.com | 
| AWS Application Migration Service | mgn.AWS\$1region.amazonaws.com | 
| Amazon Athena | athena.AWS\$1region.amazonaws.com | 
| AWS Audit Manager | auditmanager.AWS\$1region.amazonaws.com | 
| Amazon Aurora | rds.AWS\$1region.amazonaws.com | 
| AWS Backup | backup.AWS\$1region.amazonaws.com | 
| AWS Backup 게이트웨이 | backup-gateway.AWS\$1region.amazonaws.com | 
| Amazon Bedrock 모델 복사 | bedrock.AWS\$1region.amazonaws.com | 
| Amazon Chime SDK | chimevoiceconnector.AWS\$1region.amazonaws.com | 
| AWS Clean Rooms ML | cleanrooms-ml.AWS\$1region.amazonaws.com | 
| AWS CodeArtifact | codeartifact.AWS\$1region.amazonaws.com | 
|  Amazon CodeGuru Reviewer | codeguru-reviewer.AWS\$1region.amazonaws.com | 
| Amazon Comprehend | comprehend.AWS\$1region.amazonaws.com | 
| Amazon Connect | connect.AWS\$1region.amazonaws.com | 
| Amazon Connect Customer Profiles | profile.AWS\$1region.amazonaws.com | 
| Amazon Q in Connect | wisdom.AWS\$1region.amazonaws.com | 
| AWS Database Migration Service (AWS DMS) | dms.AWS\$1region.amazonaws.com | 
| AWS DeepRacer | deepracer.AWS\$1region.amazonaws.com | 
| AWS Directory Service | directoryservice.AWS\$1region.amazonaws.com | 
| Amazon DocumentDB | docdb-elastic.AWS\$1region.amazonaws.com | 
| Amazon DynamoDB | dynamodb.AWS\$1region.amazonaws.com | 
| Amazon EC2 Systems Manager(SSM) | ssm.AWS\$1region.amazonaws.com | 
| Amazon Elastic Block Store(Amazon EBS) | ec2.AWS\$1region.amazonaws.com(EBS 전용) | 
| Amazon Elastic Container Registry (Amazon ECR) | ecr.AWS\$1region.amazonaws.com | 
| Amazon Elastic File System(Amazon EFS) | elasticfilesystem.AWS\$1region.amazonaws.com | 
| Amazon ElastiCache |  조건 키 값에 ViaService 이름을 모두 포함합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/conditions-kms.html)  | 
| AWS Elemental MediaTailor | mediatailor.AWS\$1region.amazonaws.com | 
| AWS 개체 해결 | entityresolution.AWS\$1region.amazonaws.com | 
| Amazon EventBridge | events.AWS\$1region.amazonaws.com | 
| Amazon FinSpace | finspace.AWS\$1region.amazonaws.com | 
| Amazon Forecast | forecast.AWS\$1region.amazonaws.com | 
| Amazon FSx | fsx.AWS\$1region.amazonaws.com | 
| AWS Glue | glue.AWS\$1region.amazonaws.com | 
| AWS Ground Station | groundstation.AWS\$1region.amazonaws.com | 
| Amazon GuardDuty | malware-protection.AWS\$1region.amazonaws.com | 
| AWS HealthLake | healthlake.AWS\$1region.amazonaws.com | 
| AWS IoT SiteWise | iotsitewise.AWS\$1region.amazonaws.com | 
| Amazon Kendra | kendra.AWS\$1region.amazonaws.com | 
| Amazon Keyspaces(Apache Cassandra용) | cassandra.AWS\$1region.amazonaws.com | 
| Amazon Kinesis | kinesis.AWS\$1region.amazonaws.com | 
| Amazon Data Firehose | firehose.AWS\$1region.amazonaws.com | 
| Amazon Kinesis Video Streams | kinesisvideo.AWS\$1region.amazonaws.com | 
| AWS Lambda | lambda.AWS\$1region.amazonaws.com | 
| Amazon Lex | lex.AWS\$1region.amazonaws.com | 
| AWS License Manager | license-manager.AWS\$1region.amazonaws.com | 
| Amazon Location Service | geo.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Equipment | lookoutequipment.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Metrics | lookoutmetrics.AWS\$1region.amazonaws.com | 
| Amazon Lookout for Vision | lookoutvision.AWS\$1region.amazonaws.com | 
| Amazon Macie | macie.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization | m2.AWS\$1region.amazonaws.com | 
| AWS Mainframe Modernization 애플리케이션 테스트 | apptest.AWS\$1region.amazonaws.com | 
| Amazon Managed Blockchain | managedblockchain.AWS\$1region.amazonaws.com | 
| Amazon Managed Streaming for Apache Kafka(Amazon MSK) | kafka.AWS\$1region.amazonaws.com | 
| Amazon Managed Workflows for Apache Airflow(MWAA) | airflow.AWS\$1region.amazonaws.com | 
| Amazon MemoryDB | memorydb.AWS\$1region.amazonaws.com | 
| Amazon Monitron | monitron.AWS\$1region.amazonaws.com | 
| Amazon MQ | mq.AWS\$1region.amazonaws.com | 
| Amazon Neptune | rds.AWS\$1region.amazonaws.com | 
| Amazon Nimble Studio | nimble.AWS\$1region.amazonaws.com | 
| AWS HealthOmics | omics.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch Service | es.AWS\$1region.amazonaws.com, aoss.AWS\$1region.amazonaws.com | 
| Amazon OpenSearch 사용자 지정 패키지 | custom-packages.AWS\$1region.amazonaws.com | 
| AWS Proton | proton.AWS\$1region.amazonaws.com | 
| Amazon Quantum Ledger Database(QLDB) | qldb.AWS\$1region.amazonaws.com | 
| Amazon RDS Performance Insights | rds.AWS\$1region.amazonaws.com | 
| Amazon Redshift | redshift.AWS\$1region.amazonaws.com | 
| Amazon Redshift 쿼리 편집기 V2 | sqlworkbench.AWS\$1region.amazonaws.com | 
| Amazon Redshift Serverless | redshift-serverless.AWS\$1region.amazonaws.com | 
| Amazon Rekognition | rekognition.AWS\$1region.amazonaws.com | 
| Amazon Relational Database Service(Amazon RDS) | rds.AWS\$1region.amazonaws.com | 
| Amazon 복제 데이터 스토어 | ards.AWS\$1region.amazonaws.com | 
| Amazon SageMaker AI | sagemaker.AWS\$1region.amazonaws.com | 
| AWS Secrets Manager | secretsmanager.AWS\$1region.amazonaws.com | 
| Amazon Security Lake | securitylake.AWS\$1region.amazonaws.com | 
| Amazon Simple Email Service(Amazon SES) | ses.AWS\$1region.amazonaws.com | 
| Amazon Simple Notification Service(Amazon SNS) | sns.AWS\$1region.amazonaws.com | 
| Amazon Simple Queue Service(Amazon SQS) | sqs.AWS\$1region.amazonaws.com | 
| Amazon Simple Storage Service(Amazon S3) | s3.AWS\$1region.amazonaws.com | 
| Amazon S3 Tables | s3tables.AWS\$1region.amazonaws.com | 
| AWS Snowball Edge | importexport.AWS\$1region.amazonaws.com | 
| AWS Step Functions | states.AWS\$1region.amazonaws.com | 
| AWS Storage Gateway | storagegateway.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager | ssm-incidents.AWS\$1region.amazonaws.com | 
| AWS Systems Manager Incident Manager 연락처 | ssm-contacts.AWS\$1region.amazonaws.com | 
| Amazon Timestream | timestream.AWS\$1region.amazonaws.com | 
| Amazon Translate | translate.AWS\$1region.amazonaws.com | 
| AWS Verified Access | verified-access.AWS\$1region.amazonaws.com | 
| Amazon WorkMail | workmail.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces | workspaces.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces Thin Client | thinclient.AWS\$1region.amazonaws.com | 
| Amazon WorkSpaces Web | workspaces-web.AWS\$1region.amazonaws.com | 
| AWS X-Ray | xray.AWS\$1region.amazonaws.com | 

## kms:WrappingAlgorithm
<a name="conditions-kms-wrapping-algorithm"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingAlgorithm`  |  문자열  | 단일 값 |  `GetParametersForImport`  |  키 정책 및 IAM 정책  | 

이 조건 키는 요청의 [WrappingAlgorithm](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingAlgorithm) 파라미터 값에 따라 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 작업에 대한 액세스를 제어합니다. 이 조건을 사용하여 보안 주체가 가져오기 프로세스 중에 특정 알고리즘을 사용하여 키 자료를 암호화하도록 요구할 수 있습니다. 다른 래핑 알고리즘을 지정하면 필수 퍼블릭 키 및 가져오기 토큰에 대한 요청이 실패합니다.

다음 예제 키 정책문에서는 `kms:WrappingAlgorithm` 조건 키를 사용하여 `GetParametersForImport` 작업을 호출할 수 있는 사용자 권한을 부여하지만, `RSAES_OAEP_SHA_1` 래핑 알고리즘을 사용하지 못하도록 합니다. `GetParametersForImport` 요청의 `WrappingAlgorithm`이 `RSAES_OAEP_SHA_1`이면 작업이 실패합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1"
    }
  }
}
```

**참고 항목**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingKeySpec](#conditions-kms-wrapping-key-spec)

## kms:WrappingKeySpec
<a name="conditions-kms-wrapping-key-spec"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:WrappingKeySpec`  |  문자열  | 단일 값 |  `GetParametersForImport`  |  키 정책 및 IAM 정책  | 

이 조건 키는 요청의 [WrappingKeySpec](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html#KMS-GetParametersForImport-request-WrappingKeySpec) 파라미터 값에 따라 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 작업에 대한 액세스를 제어합니다. 가져 오기 프로세스 중에 공개 키의 특정 유형을 사용하는 사용자를 요구하는 이 조건을 사용할 수 있습니다. 요청에서 다른 키 유형을 지정하면 실패합니다.

`WrappingKeySpec` 파라미터 값에 사용할 수 있는 값은 `RSA_2048`뿐이므로 실제로 사용자에게 이 값을 실제로 사용하지 못하도록 할 경우 사용자가 `GetParametersForImport` 작업을 사용할 수 없게 됩니다.

다음 예제 정책 설명은 `kms:WrappingAlgorithm` 조건 키를 사용하여 요청의 `WrappingKeySpec`이 `RSA_4096`이 되도록 요구합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/ExampleRole"
  },
  "Action": "kms:GetParametersForImport",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:WrappingKeySpec": "RSA_4096"
    }
  }
}
```

**참고 항목**
+ [kms:ExpirationModel](#conditions-kms-expiration-model)
+ [kms:ValidTo](#conditions-kms-valid-to)
+ [kms:WrappingAlgorithm](#conditions-kms-wrapping-algorithm)

# AWS KMS 증명된 플랫폼의 조건 키
<a name="conditions-attestation"></a>

AWS KMS 는 [AWS Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/) 및 NitroTPM에 대한 암호화 증명을 지원하는 조건 키를 제공합니다. AWS Nitro Enclaves는 매우 민감한 데이터를 보호하고 처리할 수 있도록 [엔클레이](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-concepts.html#term-enclave)브라는 격리된 컴퓨팅 환경을 생성할 수 있는 Amazon EC2 기능입니다. NitroTPM은 EC2 인스턴스로 유사한 증명 기능을 확장합니다.

서명된 증명 문서와 함께 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html), [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret), [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 또는 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) API 작업을 직접적으로 호출하는 경우 이러한 API는 증명 문서의 퍼블릭 키로 응답의 평문을 암호화하고 평문 대신 사이퍼텍스트를 반환합니다.직접적으로 호출하다 이 사이퍼텍스트는 엔클레이브의 프라이빗 키를 사용해야만 해독할 수 있습니다. 자세한 내용은 [에서 암호화 증명 지원 AWS KMS](cryptographic-attestation.md) 단원을 참조하십시오.

**참고**  
키를 생성할 때 키 정책을 제공하지 않으면가 AWS KMS 키를 AWS 생성합니다. 이 [기본 키 정책](key-policy-default.md)은 KMS 키를 소유한 AWS 계정 에 키에 대한 전체 액세스 권한을 부여하며 계정이 IAM 정책을 사용해 키에 대한 액세스를 허용할 수 있도록 합니다. 이 정책은 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)와 같은 모든 작업을 허용합니다. AWS 에서는 KMS 키 정책에 [최소 권한](least-privilege.md) 원칙을 적용하는 것이 좋습니다. 또한 `kms:*`의 [KMS 키 정책](key-policy-modifying.md) 작업을 `[NotAction:](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html)kms:Decrypt`로 수정해 액세스를 제한할 수 있습니다.

다음 조건 키를 사용하면 서명된 증명 문서의 내용에 따라 이러한 작업에 대한 사용 권한을 제한할 수 있습니다. 작업을 허용하기 전에는 증명 문서를 이러한 AWS KMS 조건 키의 값과 AWS KMS 비교합니다.

# Nitro Enclaves에 대한 조건 키
<a name="conditions-nitro-enclave"></a>

다음 조건 키는 Nitro Enclaves 증명에만 사용됩니다.

## kms:RecipientAttestation:ImageSha384
<a name="conditions-kms-recipient-image-sha"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:ImageSha384`  |  문자열  | 단일 값 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  키 정책 및 IAM 정책  | 

`kms:RecipientAttestation:ImageSha384` 조건 키는 요청의 서명된 증명 문서의 이미지 다이제스트가 조건 키의 값과 일치하는 경우 KMS 키를 통해 `Decrypt`, `DeriveSharedSecret`, `GenerateDataKey`, `GenerateDataKeyPair` 및 `GenerateRandom`에 대한 액세스를 제어합니다. `ImageSha384` 값은 증명 문서의 PCR0에 해당합니다. 이 조건 키는 요청의 `Recipient` 파라미터가 AWS Nitro 엔클레이브에 대해 서명된 증명 문서를 지정하는 경우에만 유효합니다.

이 값은 Nitro 엔클레이브에 대한에 대한 요청에 AWS KMS 대한 [CloudTrail 이벤트에](ct-nitro-enclave.md)도 포함됩니다.

예를 들어 다음 키 정책 문은 `data-processing` 역할이 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html), [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret), [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html), [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html) 및 [GenerateRandom](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateRandom.html) 작업에 KMS 키를 사용하도록 허용합니다. `kms:RecipientAttestation:ImageSha384` 조건 키는 요청에 있는 증명 문서의 이미지 다이제스트 값(PCR0)이 조건의 이미지 다이제스트 값과 일치하는 경우에만 작업을 허용합니다. 이 조건 키는 요청의 `Recipient` 파라미터가 AWS Nitro 엔클레이브에 대해 서명된 증명 문서를 지정하는 경우에만 유효합니다.

요청에 AWS Nitro 엔클레이브의 유효한 증명 문서가 포함되어 있지 않으면이 조건이 충족되지 않기 때문에 권한이 거부됩니다.

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": [
    "kms:Decrypt",
    "kms:DeriveSharedSecret",
    "kms:GenerateDataKey",
    "kms:GenerateDataKeyPair",
    "kms:GenerateRandom"
  ],
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99"
    }
  }
}
```

## kms:RecipientAttestation:PCR<PCR\$1ID>
<a name="conditions-kms-recipient-pcrs"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:PCR<PCR_ID>`  |  문자열  | 단일 값 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  키 정책 및 IAM 정책  | 

`kms:RecipientAttestation:PCR<PCR_ID>` 조건 키는 요청의 서명된 증명 문서의 플랫폼 구성 레지스터(PCR)가 조건 키의 PCR과 일치하는 경우에만 KMS 키를 통해 `Decrypt`, `DeriveSharedSecret`, `GenerateDataKey`, `GenerateDataKeyPair` 및 `GenerateRandom`에 대한 액세스를 제어합니다. 이 조건 키는 요청의 `Recipient` 파라미터가 AWS Nitro 엔클레이브에서 서명된 증명 문서를 지정하는 경우에만 유효합니다.

이 값은 Nitro 엔클레이브에 AWS KMS 대한 요청을 나타내는 [CloudTrail 이벤트에](ct-nitro-enclave.md)도 포함됩니다.

PCR 값을 지정하려면 다음 형식을 사용합니다. PCR ID를 조건 키 이름에 연결합니다. [6개의 엔클레이브 측정값](https://docs.aws.amazon.com/enclaves/latest/user/set-up-attestation.html#where) 중 하나를 식별하는 PCR ID 또는 특정 사용 사례에 맞게 정의한 사용자 지정 PCR ID를 지정할 수 있습니다. PCR 값은 최대 96바이트의 소문자 16진수 문자열이어야 합니다.

```
"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"
```

예를 들어, 다음 조건 키는 PCR1의 특정 값을 지정합니다. 이 값은 엔클레이브 및 부트스트랩 프로세스에 사용되는 커널의 해시에 해당합니다.

```
kms:RecipientAttestation:PCR1: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

다음 예제 키 정책문은 `data-processing` 역할이 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업에 KMS 키를 사용하도록 허용합니다.

이 명령문의 `kms:RecipientAttestation:PCR` 조건 키는 요청의 서명된 증명 문서의 PCR1 값이 조건의 `kms:RecipientAttestation:PCR1` 값과 일치하는 경우에만 작업을 허용합니다. `StringEqualsIgnoreCase` 정책 연산자를 사용하여 PCR 값의 대소문자를 구분하지 않는 비교를 요구합니다.

요청에 증명 문서가 포함되어 있지 않으면 이 조건이 충족되지 않으므로 사용 권한이 거부됩니다.

```
{
  "Sid" : "Enable enclave data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:PCR1": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# NitroTPM용 조건 키
<a name="conditions-nitro-tpm"></a>

다음 조건 키는 NitroTPM 증명에만 사용됩니다.

## kms:RecipientAttestation:NitroTPMPCR<PCR\$1ID>
<a name="conditions-kms-recipient-nitro-tpm-pcrs"></a>


| AWS KMS 조건 키 | 조건 유형 | 값 유형 | API 작업 | 정책 유형 | 
| --- | --- | --- | --- | --- | 
|  `kms:RecipientAttestation:NitroTPMPCR<PCR_ID>`  |  문자열  | 단일 값 |  `Decrypt` `DeriveSharedSecret` `GenerateDataKey` `GenerateDataKeyPair` `GenerateRandom`  |  키 정책 및 IAM 정책  | 

`kms:RecipientAttestation:NitroTPMPCR<PCR_ID>` 조건 키는 요청의 서명된 증명 문서의 플랫폼 구성 레지스터(PCR)가 조건 키의 PCR과 일치하는 경우에만 KMS 키를 통해 `Decrypt`, `DeriveSharedSecret`, `GenerateDataKey`, `GenerateDataKeyPair` 및 `GenerateRandom`에 대한 액세스를 제어합니다. 이 조건 키는 요청의 `Recipient` 파라미터가 NitroTPM의 서명된 증명 문서를 지정하는 경우에만 유효합니다.

이 값은 NitroTPM에 AWS KMS 대한 요청을 나타내는 [CloudTrail 이벤트에](ct-nitro-tpm.md)도 포함됩니다.

PCR 값을 지정하려면 다음 형식을 사용합니다. PCR ID를 조건 키 이름에 연결합니다. PCR 값은 최대 96바이트의 소문자 16진수 문자열이어야 합니다.

```
"kms:RecipientAttestation:NitroTPMPCRPCR_ID": "PCR_value"
```

예를 들어 다음 조건 키는 PCR4에 대한 특정 값을 지정합니다.

```
kms:RecipientAttestation:NitroTPMPCR4: "abc1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
```

다음 예제 키 정책문은 `data-processing` 역할이 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업에 KMS 키를 사용하도록 허용합니다.

이 문의 `kms:RecipientAttestation:NitroTPMPCR` 조건 키는 요청의 서명된 증명 문서의 PCR4 값이 조건의 `kms:RecipientAttestation:NitroTPMPCR4` 값과 일치하는 경우에만 작업을 허용합니다. `StringEqualsIgnoreCase` 정책 연산자를 사용하여 PCR 값의 대소문자를 구분하지 않는 비교를 요구합니다.

요청에 증명 문서가 포함되어 있지 않으면 이 조건이 충족되지 않으므로 사용 권한이 거부됩니다.

```
{
  "Sid" : "Enable NitroTPM data processing",
  "Effect" : "Allow",
  "Principal" : {
    "AWS" : "arn:aws:iam::111122223333:role/data-processing"
  },
  "Action": "kms:Decrypt",
  "Resource" : "*",
  "Condition": {
    "StringEqualsIgnoreCase": {
      "kms:RecipientAttestation:NitroTPMPCR4": "abc1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87"
    }
  }
}
```

# 최소 권한
<a name="least-privilege"></a>

KMS 키는 민감한 정보를 보호하므로 최소 권한 액세스 원칙을 따르는 것이 좋습니다. 키 정책을 정의할 때 작업을 수행하는 데 필요한 최소 권한을 위임합니다. 추가 IAM 정책으로 권한을 더 제한하려는 경우에만 KMS 키 정책에 대한 모든 작업(`kms:*`)을 허용합니다. IAM 정책을 사용하여 권한을 관리하려는 경우 IAM 정책을 생성하여 IAM 위탁자에 연결할 수 있는 사용자를 제한하고 [정책 변경을 모니터링](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html#cloudwatch-alarms-for-cloudtrail-iam-policy-changes)합니다.

키 정책과 IAM 정책 모두에서 모든 작업(`kms:*`)을 허용하는 경우 위탁자는 KMS 키에 대한 관리 및 사용 권한을 모두 갖습니다. 보안 모범 사례로, 이러한 권한을 특정 위탁자에게만 위임하는 것이 좋습니다. 키 정책에서 위탁자의 이름을 명시적으로 지정하거나 IAM 정책이 연결되는 위탁자를 제한하여 이 작업을 수행할 수 있습니다. [조건 키](policy-conditions.md)를 사용하여 권한을 제한할 수도 있습니다. 예를 들어 [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)를 사용하면 API 직접 호출을 하는 위탁자가 조건 규칙에 지정된 태그를 가진 경우 모든 작업을 허용하도록 설정할 수 있습니다.

정책 설명의 평가 방법을 이해하는 데 도움이 필요하면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 AWS참조하세요. 정책을 작성하기 전에 이 주제를 검토하여 정책이 의도치 않은 영향(예: 접근 권한이 없어야 할 주체에게 접근 권한을 제공하는 경우)을 미칠 가능성을 줄이는 것이 좋습니다.

**작은 정보**  
비프로덕션 환경에서 애플리케이션을 테스트할 때는 [IAM Access Analyzer](https://aws.amazon.com/iam/features/analyze-access/)를 사용하면 IAM 정책에 최소 권한을 적용하는 데 도움이 됩니다.

IAM 역할 대신 IAM 사용자를 사용하는 경우 장기 자격 증명의 취약성을 완화하기 위해 AWS [다중 인증](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)(MFA)을 활성화하는 것이 좋습니다. MFA를 사용하여 다음을 수행할 수 있습니다.
+ 사용자에게 키 삭제 예약과 같은 권한 있는 작업을 수행하기 전에 MFA를 사용하여 자격 증명을 검증하도록 요구합니다.
+ 관리자 계정 암호 및 MFA 디바이스의 소유권을 개인 간에 분할하여 분할 권한 부여를 구현합니다.

**자세히 알아보기**
+ [AWS 직무에 대한 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)
+ [Techniques for writing least privilege IAM policies](https://aws.amazon.com//blogs/security/techniques-for-writing-least-privilege-iam-policies/)

## 최소 권한 구현
<a name="key-policy-least-privilege"></a>

 AWS 서비스에 KMS 키를 사용할 수 있는 권한을 부여할 때 서비스가 사용자를 대신하여 액세스해야 하는 리소스에 대해서만 권한이 유효한지 확인합니다. 이 최소 권한 전략은 AWS 서비스 간에 요청이 전달될 때 KMS 키의 무단 사용을 방지하는 데 도움이 됩니다.

최소 권한 전략을 구현하려면 AWS KMS 암호화 컨텍스트 조건 키와 글로벌 소스 ARN 또는 소스 계정 조건 키를 사용하는 것이 좋습니다.

### 암호화 컨텍스트 조건 키 사용
<a name="least-privilege-encryption-context"></a>

리소스를 사용할 AWS KMS 때 최소 권한을 구현하는 가장 효과적인 방법은 보안 주체가 AWS KMS 암호화 작업을 호출할 수 있도록 허용하는 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 또는 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys) 조건 키를 정책에 포함하는 것입니다. 이러한 조건 키는 리소스가 암호화될 때 암호문에 바인딩된 [암호화 컨텍스트](encrypt_context.md)에 권한을 연결하기 때문에 특히 효과적입니다.

정책 설명의 작업이 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)이거나 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 또는 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)와 같은 작업과 같은 `EncryptionContext` 파라미터를 사용하는 AWS KMS 대칭 암호화 작업인 경우에만 암호화 컨텍스트 조건 키를 사용합니다. (지원되는 작업 목록은 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 또는 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context-keys) 섹션 참조) 이러한 조건 키를 사용하여 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)와 같은 다른 작업을 허용하는 경우 권한이 거부됩니다.

리소스를 암호화할 때 서비스에서 사용하는 암호화 컨텍스트로 값을 설정합니다. 이 정보는 일반적으로 서비스 문서의 보안 장에서 확인할 수 있습니다. 예를 들어 [AWS Proton의 암호화 컨텍스트](https://docs.aws.amazon.com/proton/latest/adminguide/data-protection.html#encryption-context)는 AWS Proton 리소스와 관련 템플릿을 식별합니다. [AWS Secrets Manager 암호화 컨텍스트](https://docs.aws.amazon.com/secretsmanager/latest/userguide/security-encryption.html#security-encryption-encryption-context)는 보안 암호와 해당 버전을 식별합니다. [Amazon Location에 대한 암호화 컨텍스트](https://docs.aws.amazon.com/location/latest/developerguide/encryption-at-rest.html#location-encryption-context)는 추적기 또는 컬렉션을 식별합니다.

다음 예제 키 정책문은 Amazon Location Service에서 승인된 사용자를 대신하여 권한 부여를 생성하도록 허용합니다. 이 정책문은 [kms:ViaService](conditions-kms.md#conditions-kms-via-service), [kms:CallerAccount](conditions-kms.md#conditions-kms-caller-account) 및 `kms:EncryptionContext:context-key` 조건 키를 사용하여 권한을 제한해 특정 추적기 리소스에 권한을 연결합니다.

```
{
  "Sid": "Allow Amazon Location to create grants on behalf of authorized users",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/LocationTeam"
  },
  "Action": "kms:CreateGrant",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "geo.us-west-2.amazonaws.com",
      "kms:CallerAccount": "111122223333",
      "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker"
    }
  }
}
```

### `aws:SourceArn` 또는 `aws:SourceAccount` 조건 키 사용
<a name="least-privilege-source-arn"></a>

키 정책 문의 위탁자가 [AWS 서비스 위탁자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services)인 경우, `kms:EncryptionContext:context-key` 조건 키에 추가로 [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) 또는 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 전역 조건 키를 사용하는 것이 좋습니다. ARN 및 계정 값은 요청이 다른 AWS 서비스 AWS KMS 에서 로 오는 경우에만 권한 부여 컨텍스트에 포함됩니다. 이러한 조건 조합은 최소 권한을 구현하고 잠재적 [혼동된 대리자 시나리오](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)를 방지합니다. 서비스 보안 주체는 일반적으로 키 정책에서 보안 주체로 사용되지 않지만와 같은 일부 AWS 서비스에서는 보안 주체가 AWS CloudTrail필요합니다.

`aws:SourceArn` 또는 `aws:SourceAccount` 전역 조건 키를 사용하려면 값을 Amazon 리소스 이름(ARN) 또는 암호화되는 리소스의 계정으로 설정합니다. 예를 들어, 추적을 암호화하기 위해 AWS CloudTrail 권한을 부여하는 키 정책문에서 `aws:SourceArn`의 값을 추적의 ARN으로 설정합니다. 가능하면 더 구체적인 `aws:SourceArn`을 사용합니다. 값을 ARN 또는 와일드카드 문자가 있는 ARN 패턴으로 설정합니다. 리소스의 ARN을 모르면 `aws:SourceAccount`를 대신 사용합니다.

**참고**  
리소스 ARN에 AWS KMS 키 정책에서 허용되지 않는 문자가 포함된 경우 `aws:SourceArn` 조건 키 값에 해당 리소스 ARN을 사용할 수 없습니다. 대신 `aws:SourceAccount` 조건 키를 사용합니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요.

다음 예제 키 정책에서 권한을 가져오는 보안 주체는 AWS CloudTrail 서비스 주체인 `cloudtrail.amazonaws.com`입니다. 최소 권한을 구현하기 위해 이 정책은 `aws:SourceArn` 및 `kms:EncryptionContext:context-key` 조건 키를 사용합니다. 정책문은 CloudTrail이 KMS 키를 사용하여 추적을 암호화하는 데 사용하는 [데이터 키를 생성](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)하도록 허용합니다. `aws:SourceArn` 및 `kms:EncryptionContext:context-key` 조건은 독립적으로 평가됩니다. 지정된 작업에 KMS 키를 사용하기 위한 요청은 두 조건을 모두 충족해야 합니다.

서비스의 권한을 예제 계정(111122223333) 및 `us-west-2` 리전의 `finance` 추적으로 제한하기 위해, 이 정책문은 `aws:SourceArn` 조건 키를 특정 추적의 ARN에 대해 설정합니다. 조건문은 [ArnEquals](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN) 연산자를 사용하여 일치하는 경우 ARN의 모든 요소가 독립적으로 평가되도록 합니다. 또한 예제에서는 `kms:EncryptionContext:context-key` 조건 키를 사용하여 권한을 특정 계정 및 리전의 추적으로 제한합니다.

이 키 정책을 사용하기 전에 예제 계정 ID, 리전 및 추적 이름을 계정의 유효한 값으로 바꿉니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudTrailToEncryptLogs",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudtrail.amazonaws.com"
      },
      "Action": "kms:GenerateDataKey",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance"
          ]
        },
        "StringLike": {
          "kms:EncryptionContext:aws:cloudtrail:arn": [
            "arn:aws:cloudtrail:*:111122223333:trail/*"
          ]
        }
      }
    }
  ]
}
```

------

# 에 대한 ABAC AWS KMS
<a name="abac"></a>

속성 기반 액세스 제어(ABAC)는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다.는 KMS 키와 연결된 태그 및 별칭을 기반으로 고객 관리형 키에 대한 액세스를 제어할 수 있도록 하여 ABAC를 AWS KMS 지원합니다. 에서 ABAC를 활성화하는 태그 및 별칭 조건 키는 보안 주체가 정책을 편집하거나 권한 부여를 관리하지 않고 KMS 키를 사용하도록 권한을 부여하는 강력하고 유연한 방법을 AWS KMS 제공합니다. 그러나 보안 주체에 실수로 액세스가 허용되거나 거부되지 않도록 이러한 기능을 주의해서 사용해야 합니다.

ABAC를 사용하는 경우 태그 및 별칭 관리 권한이 이제 액세스 제어 권한이라는 점에 유의하십시오. 태그 또는 별칭에 따라 달라지는 정책을 배포하기 전에 모든 KMS 키의 기존 태그와 별칭을 알고 있어야 합니다. 별칭을 추가, 삭제 및 업데이트하거나 키에 태그를 지정하고 태그를 해제할 때 합리적인 예방 조치를 취해야 합니다. 태그와 별칭을 관리할 수 있는 권한을 필요한 보안 주체에게만 부여하고 관리할 수 있는 태그와 별칭을 제한합니다.

**참고**  
에 ABAC를 사용할 때는 보안 주체에게 태그와 AWS KMS별칭을 관리할 수 있는 권한을 부여하는 데 주의해야 합니다. 태그 또는 별칭을 변경하면 KMS 키에 대한 사용 권한을 허용하거나 거부할 수 있습니다. 키 정책을 변경하거나 권한 부여를 생성할 권한이 없는 키 관리자는 태그 또는 별칭을 관리할 권한이 있는 경우 KMS 키에 대한 액세스를 제어할 수 있습니다.  
태그 및 별칭 변경으로 KMS 키 인증에 영향을 미치는 데 최대 5분이 소요될 수 있습니다. 최근 변경 사항은 권한 부여에 영향을 미치기 전에 API 작업에서 볼 수 있습니다.  
별칭을 기반으로 KMS 키에 대한 액세스를 제어하려면 조건 키를 사용해야 합니다. 별칭을 사용하여 정책문의 `Resource` 요소에서 KMS 키를 나타낼 수 없습니다. 별칭이 `Resource` 요소에 나타나면 정책문이 연결된 KMS 키가 아니라 별칭에 적용됩니다.

**자세히 알아보기**
+ 예제를 포함하여 ABAC AWS KMS 지원에 대한 자세한 내용은 [별칭을 사용하여 KMS 키에 대한 액세스 제어](alias-authorization.md) 및 섹션을 참조하세요[태그를 사용하여 KMS 키에 대한 액세스 제어](tag-authorization.md).
+ 태그를 사용하여 리소스에 대한 액세스를 AWS 제어하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [ABAC는 무엇입니까 AWS? 및 리소스 태그를 사용하여 리소스에 대한](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) [액세스 제어를 참조하세요 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html).

## 에 대한 ABAC 조건 키 AWS KMS
<a name="about-abac-kms"></a>

태그 및 별칭을 기반으로 KMS 키에 대한 액세스 권한을 부여하려면 키 정책 또는 IAM 정책에서 다음 조건 키를 사용합니다.


| ABAC 조건 키 | 설명 | 정책 유형 | AWS KMS 작업 | 
| --- | --- | --- | --- | 
| [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) | KMS 키의 태그(키 및 값)가 정책의 태그 (키 및 값) 또는 태그 패턴과 일치합니다. | IAM 정책만 | KMS 키 리소스 작업 2 | 
| [aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag) | 요청의 태그(키 및 값)가 정책의 태그(키 및 값) 또는 태그 패턴과 일치합니다. | 주요 정책 및 IAM 정책1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html), [UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) | 요청의 태그 키가 정책의 태그 키와 일치합니다. | 주요 정책 및 IAM 정책1 | [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html), [UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html) | 
| [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) | KMS 키와 연결된 별칭은 정책의 별칭 또는 별칭 패턴과 일치합니다. | IAM 정책만 | KMS 키 리소스 작업 2 | 
| [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) | 요청의 KMS 키를 나타내는 별칭은 정책의 별칭 또는 별칭 패턴과 일치합니다. | 주요 정책 및 IAM 정책1 | [암호화 작업](kms-cryptography.md#cryptographic-operations), [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html), [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html) | 

1키 정책에서 사용할 수 있는 모든 조건 키는 IAM 정책에서도 사용할 수 있지만 [키 정책에서 허용](key-policy-default.md#key-policy-default-allow-root-enable-iam)하는 경우에만 가능합니다.

2*KMS 키 리소스 작업*은 특정 KMS 키에 대해 권한이 부여된 작업입니다. KMS 키 리소스 작업을 식별하려면 [AWS KMS 권한 테이블](kms-api-permissions-reference.md#kms-api-permissions-reference-table)에서 작업의 `Resources` 열에서 KMS 키 값을 찾습니다.

예를 들어 이러한 조건 키를 사용하여 다음 정책을 생성할 수 있습니다.
+ 특정 별칭 또는 별칭 패턴이 있는 KMS 키를 사용할 수 있는 권한을 허용하는 `kms:ResourceAliases`가 포함된 IAM 정책. 이는 태그에 의존하는 정책과 약간 다릅니다. 정책에서 별칭 패턴을 사용할 수 있지만 각 별칭은 AWS 계정 및 리전에서 고유해야 합니다. 이렇게 하면 정책 설명에 KMS 키의 키 ARN을 나열하지 않고 선택한 KMS 키 집합에 정책을 적용할 수 있습니다. 집합에서 KMS 키를 추가하거나 제거하려면 KMS 키의 별칭을 변경합니다.
+ 보안 주체가 `Encrypt` 작업에서 KMS 키를 사용하도록 허용하지만 `Encrypt` 요청이 해당 별칭을 사용하여 KMS 키를 식별하는 경우에만 허용하는 `kms:RequestAlias`가 포함된 키 정책.
+ 특정 태그 키 및 태그 값과 함께 KMS 키를 사용할 수 있는 권한을 거부하는 `aws:ResourceTag/tag-key`가 포함된 IAM 정책. 이렇게 하면 정책문에 KMS 키의 키 ARN을 나열하지 않고 선택한 KMS 키 집합에 정책을 적용할 수 있습니다. KMS 키를 집합에서 추가하거나 제거하려면 KMS 키에 태그를 지정하거나 태그를 해제합니다.
+ 보안 주체가 `"Purpose"="Test"` KMS 키 태그만 삭제할 수 있도록 허용하는 `aws:RequestTag/tag-key`가 포함된 IAM 정책.
+ `Restricted` 태그 키로 KMS 키에 태그를 지정하거나 태그를 해제할 수 있는 권한을 거부하는 `aws:TagKeys`가 포함된 IAM 정책.

ABAC는 액세스 관리를 유연하고 확장 가능하게 합니다. 예를 들어 `aws:ResourceTag/tag-key` 조건 키를 사용하여 KMS 키에 `Purpose=Test` 태그가 있는 경우에만 보안 주체가 지정된 작업에 KMS 키를 사용하도록 허용하는 IAM 정책을 생성할 수 있습니다. 이 정책은 AWS 계정의 모든 리전에 있는 모든 KMS 키에 적용됩니다.

사용자 또는 역할에 연결된 경우 다음 IAM 정책은 보안 주체가 지정된 작업에 대해 `Purpose=Test` 태그가 있는 모든 기존 KMS 키를 사용할 수 있도록 허용합니다. 새 KMS 키 또는 기존 KMS 키에 대한 액세스를 제공하기 위해 정책을 변경할 필요가 없습니다. `Purpose=Test` 태그를 KMS 키에 지정하기만 하면 됩니다. 마찬가지로 `Purpose=Test` 태그가 있는 KMS 키에서 이 액세스 권한을 제거하려면 태그를 편집하거나 삭제합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Purpose": "Test"
        }
      }
    }
  ]
}
```

------

그러나 이 기능을 사용하는 경우 태그와 별칭을 관리할 때는 주의해야 합니다. 태그 또는 별칭을 추가, 변경 또는 삭제하면 실수로 KMS 키에 대한 액세스를 허용하거나 거부할 수 있습니다. 키 정책을 변경하거나 권한 부여를 생성할 권한이 없는 키 관리자는 태그 및 별칭을 관리할 권한이 있는 경우 KMS 키에 대한 액세스를 제어할 수 있습니다. 이 위험을 완화하기 위해 [별칭](alias-access.md#alias-access-limiting)과 [태그 관리 권한을 제한](tag-permissions.md#tag-permissions-conditions)하는 것이 좋습니다. 예를 들어, 선택된 보안 주체만 `Purpose=Test` 태그를 관리하도록 허용할 수 있습니다. 자세한 내용은 [별칭을 사용하여 KMS 키에 대한 액세스 제어](alias-authorization.md) 및 [태그를 사용하여 KMS 키에 대한 액세스 제어](tag-authorization.md) 섹션을 참조하세요.

## 태그 또는 별칭?
<a name="abac-tag-or-alias"></a>

AWS KMS 는 태그 및 별칭이 있는 ABAC를 지원합니다. 두 옵션 모두 유연하고 확장 가능한 액세스 제어 전략을 제공하지만 서로 약간 다릅니다.

특정 사용 패턴에 따라 태그를 사용하거나 별칭을 AWS 사용하기로 결정할 수 있습니다. 예를 들어 대부분의 관리자에게 이미 태그 사용 권한을 부여한 경우 별칭을 기반으로 권한 부여 전략을 제어하는 것이 더 쉬울 수 있습니다. 또는 [KMS 키당 별칭](resource-limits.md#aliases-per-key) 할당량에 근접한 경우 태그 기반 권한 부여 전략을 선호할 수 있습니다.

일반적으로 다음과 같은 이점이 있습니다.

**태그 기반 액세스 제어의 이점**
+ 다양한 유형의 AWS 리소스에 대해 동일한 권한 부여 메커니즘.

  동일한 태그 또는 태그 키를 사용하여 Amazon Relational Database Service(RDS) 클러스터, Amazon Elastic Block Store(Amazon EBS) 볼륨 및 KMS 키와 같은 여러 리소스 유형에 대한 액세스를 제어할 수 있습니다. 이 기능을 사용하면 기존의 역할 기반 액세스 제어보다 유연한 여러 가지 권한 부여 모델을 사용할 수 있습니다.
+ KMS 키 그룹에 대한 액세스 권한을 부여합니다.

  태그를 사용하여 동일한 AWS 계정 및 리전의 KMS 키 그룹에 대한 액세스를 관리할 수 있습니다. 선택한 KMS 키에 동일한 태그 또는 태그 키를 할당합니다. 그런 다음 태그 또는 태그 키를 기반으로 유지 관리가 간편한 정책 설명을 만듭니다. 인증 그룹에서 KMS 키를 추가하거나 제거하려면 태그를 추가하거나 제거하십시오. 정책을 편집할 필요가 없습니다.

**별칭 기반 액세스 제어의 이점**
+ 별칭을 기반으로 암호화 작업에 대한 액세스 권한을 부여합니다.

  [aws:RequestTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)를 비롯해 속성에 대한 대부분의 요청 기반 정책 조건은 속성을 추가, 편집 또는 삭제하는 작업에만 영향을 미칩니다. 그러나 [kms:RequestAlias](conditions-kms.md#conditions-kms-request-alias) 조건 키는 요청에서 KMS 키를 식별하는 데 사용되는 별칭을 기반으로 암호화 작업에 대한 액세스를 제어합니다. 예를 들어 보안 주체에게 `Encrypt` 작업에서 KMS 키를 사용할 수 있는 권한을 부여할 수 있지만 `KeyId` 매개 변수의 값이 `alias/restricted-key-1`인 경우에만 가능합니다. 이 조건을 충족하려면 다음 사항이 모두 필요합니다.
  + KMS 키는 해당 별칭과 연결되어 있어야 합니다.
  + 요청은 별칭을 사용하여 KMS 키를 식별해야 합니다.
  + 보안 주체는 `kms:RequestAlias` 조건에 따라 KMS 키를 사용할 수 있는 권한이 있어야 합니다.

  이는 애플리케이션에서 일반적으로 별칭 이름이나 별칭 ARN을 사용하여 KMS 키를 참조하는 경우에 특히 유용합니다.
+ 매우 제한된 권한을 제공합니다.

  별칭은 AWS 계정 및 리전에서 고유해야 합니다. 따라서 보안 주체에 별칭을 기반으로 KMS 키에 대한 액세스 권한을 부여하는 것이 태그를 기반으로 액세스 권한을 부여하는 것보다 훨씬 더 제한적일 수 있습니다. 별칭과 달리 동일한 계정 및 리전에 있는 여러 KMS 키에 태그를 할당할 수 있습니다. 원하는 경우 `alias/test*`와 같은 별칭 패턴을 사용하여 보안 주체에게 동일한 계정 및 리전의 KMS 키 그룹에 대한 액세스 권한을 부여할 수 있습니다. 그러나 특정 별칭에 대한 액세스를 허용하거나 거부하면 KMS 키에 대한 매우 엄격한 제어가 가능합니다.

# 에 대한 ABAC 문제 해결 AWS KMS
<a name="troubleshooting-tags-aliases"></a>

태그 및 별칭을 기반으로 KMS 키에 대한 액세스를 제어하는 것은 편리하고 강력합니다. 그러나 몇 가지 예측 가능한 오류가 발생하기 쉽습니다.

## 태그 변경으로 인해 액세스 변경
<a name="access-denied-tag"></a>

태그가 삭제되거나 해당 값이 변경되면 해당 태그만 기반으로 KMS 키에 액세스할 수 있는 보안 주체는 KMS 키에 대한 액세스가 거부됩니다. 거부 정책문에 포함된 태그가 KMS 키에 추가되는 경우에도 이 문제가 발생할 수 있습니다. KMS 키에 정책 관련 태그를 추가하면 KMS 키에 대한 액세스가 거부되어야 하는 보안 주체에 액세스가 허용될 수 있습니다.

예를 들어 보안 주체가 다음 예제 IAM 정책문에서 제공하는 권한과 같이 `Project=Alpha` 태그를 기반으로 KMS 키에 액세스할 수 있다고 가정합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyWithResourceTag",
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "Alpha"
        }
      }
    }
  ]
}
```

------

해당 KMS 키에서 태그가 삭제되거나 태그 값이 변경되면 보안 주체는 지정된 작업에 KMS 키를 사용할 수 있는 권한을 더 이상 갖지 않습니다. 이는 보안 주체가 고객 관리형 키를 사용하는 AWS 서비스에서 데이터를 읽거나 쓰려고 할 때 명백해질 수 있습니다. 태그 변경을 추적하려면 CloudTrail 로그에서 [TagResource](ct-tagresource.md) 또는 [UntagResource 항목을](ct-untagresource.md) 검토합니다.

정책을 업데이트하지 않고 액세스를 복원하려면 KMS 키의 태그를 변경합니다. 이 조치는 AWS KMS전반에 걸쳐 효력을 발휘하는 짧은 기간 외에는 최소한의 영향을 미칩니다. 이와 같은 오류를 방지하려면 태그 지정 및 태그 해제 권한을 필요한 보안 주체에게만 부여하고 관리해야 하는 태그로 [태그 지정 권한을 제한](tag-permissions.md#tag-permissions-conditions)하십시오. 태그를 변경하기 전에 정책을 검색하여 태그에 따라 달라지는 액세스를 감지하고 태그가 있는 모든 리전에서 KMS 키를 가져옵니다. 특정 태그가 변경되면 Amazon CloudWatch 경보를 생성하는 것을 고려할 수 있습니다.

## 별칭 변경으로 인한 액세스 변경
<a name="access-denied-alias"></a>

별칭이 삭제되거나 다른 KMS 키와 연결된 경우 해당 별칭만 기반으로 KMS 키에 액세스할 수 있는 보안 주체는 KMS 키에 대한 액세스가 거부됩니다. 이는 KMS 키와 연결된 별칭이 거부 정책문에 포함된 경우에도 발생할 수 있습니다. KMS 키에 정책 관련 별칭을 추가해도 KMS 키에 대한 액세스가 거부되어야 하는 보안 주체에 액세스가 허용될 수 있습니다.

예를 들어 다음 IAM 정책 문은 [kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 조건 키를 사용하여 지정된 별칭을 가진 계정의 다른 리전에 있는 KMS 키에 대한 액세스를 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AliasBasedIAMPolicy",
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:Describe*",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "kms:ResourceAliases": [
            "alias/ProjectAlpha",
            "alias/ProjectAlpha_Test",
            "alias/ProjectAlpha_Dev"
          ]
        }
      }
    }
  ]
}
```

------

별칭 변경을 추적하려면 CloudTrail 로그에서 [CreateAlias](ct-createalias.md),[UpdateAlias](ct-updatealias.md) 및 [DeleteAlias](ct-deletealias.md) 항목을 검토하십시오.

정책을 업데이트하지 않고 액세스를 복원하려면 KMS 키와 연결된 별칭을 변경합니다. 각 별칭은 계정 및 리전에서 하나의 KMS 키에만 연결될 수 있으므로 별칭 관리는 태그를 관리하는 것보다 조금 더 어렵습니다. 하나의 KMS 키에서 일부 보안 주체에 액세스 권한을 복원하면 다른 KMS 키에 대한 동일 또는 다른 보안 주체의 액세스가 거부될 수 있습니다.

이 오류를 방지하려면 별칭 관리 권한을 필요한 보안 주체에게만 부여하고 관리해야 하는 별칭으로 [별칭 관리 권한을 제한](alias-access.md#alias-access-limiting)합니다. 별칭을 업데이트하거나 삭제하기 전에 정책을 검색하여 별칭에 종속된 액세스를 검색하고 별칭과 연결된 모든 리전에서 KMS 키를 찾습니다.

## 별칭 할당량으로 인한 액세스 거부
<a name="access-denied-alias-quota"></a>

[kms:ResourceAliases](conditions-kms.md#conditions-kms-resource-aliases) 조건에 따라 KMS 키를 사용하도록 권한이 부여된 사용자는 KMS 키가 해당 계정 및 리전에 대한 [KMS 키당 별칭](resource-limits.md#aliases-per-key)의 기본 할당량을 초과하는 경우 `AccessDenied` 예외를 수신합니다.

액세스를 복원하려면 할당량을 준수하도록 KMS 키와 연결된 별칭을 삭제합니다. 또는 대체 메커니즘을 사용하여 사용자에게 KMS 키에 대한 액세스 권한을 부여합니다.

## 지연된 권한 부여 변경 사항
<a name="tag-alias-auth-delay"></a>

태그 및 별칭을 변경하면 KMS 키 인증에 영향을 미치는 데 최대 5분이 소요될 수 있습니다. 따라서 권한 부여에 영향을 미치기 전에 API 작업의 응답에 태그 또는 별칭 변경이 반영될 수 있습니다. 이 지연은 대부분의 AWS KMS 작업에 영향을 미치는 짧은 최종 일관성 지연보다 길 수 있습니다.

예를 들어 특정 보안 주체가 `"Purpose"="Test"` 태그가 있는 모든 KMS 키를 사용하도록 허용하는 IAM 정책이 있을 수 있습니다. 그런 다음 KMS 키에 `"Purpose"="Test"` 태그를 추가합니다. [TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 작업이 완료되고 [ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html) 응답에서 태그가 KMS 키에 할당되었음을 확인하지만 보안 주체는 최대 5분 동안 KMS 키에 액세스하지 못할 수 있습니다.

오류를 방지하려면 이 예상 지연을 코드에 빌드하십시오.

## 별칭 업데이트로 인해 실패한 요청
<a name="failed-requests"></a>

별칭을 업데이트할 때 기존 별칭을 다른 KMS 키와 연결합니다.

[별칭 이름](concepts.md#key-id-alias-name) 또는 [별칭 ARN](concepts.md#key-id-alias-ARN)을 지정하는 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 및 [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 요청은 이제 암호문을 암호화하지 않은 KMS 키와 별칭이 연결되기 때문에 실패할 수 있습니다. 이 상황은 일반적으로 `IncorrectKeyException` 또는 `NotFoundException`을 반환합니다. 또는 요청에 `KeyId` 또는 `DestinationKeyId` 파라미터가 없는 경우 호출자가 암호문을 암호화한 KMS 키에 더 이상 액세스할 수 없기 때문에 `AccessDenied` 예외와 함께 작업이 실패할 수 있습니다.

[CreateAlias](ct-createalias.md), [UpdateAlias](ct-updatealias.md) 및 [DeleteAlias](ct-deletealias.md)로그 항목에 대한 CloudTrail 로그를 확인하여 변경 사항을 추적할 수 있습니다. [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 응답의 `LastUpdatedDate` 필드 값을 사용하여 변경 사항을 감지할 수도 있습니다.

예를 들어 다음 [ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html) 예제 응답은 `kms:ResourceAliases` 조건의 `ProjectAlpha_Test` 별칭이 업데이트되었음을 보여줍니다. 따라서 별칭을 기반으로 액세스 권한이 있는 보안 주체는 이전에 연결된 KMS 키에 대한 액세스 권한을 잃게 됩니다. 대신 새로 연결된 KMS 키에 액세스할 수 있습니다.

```
$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/ProjectAlpha`)]'

{
    "Aliases": [
        {
            "AliasName": "alias/ProjectAlpha_Test",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Test",
            "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
            "CreationDate": 1566518783.394,
            "LastUpdatedDate": 1605308931.903
        },
        {
            "AliasName": "alias/ProjectAlpha_Restricted",
            "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ProjectAlpha_Restricted",
            "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
            "CreationDate": 1553410800.010,
            "LastUpdatedDate": 1553410800.010
        }
    ]
}
```

이 변경에 대한 해결책은 간단하지 않습니다. 별칭을 다시 업데이트하여 원래 KMS 키와 연결할 수 있습니다. 그러나 작업을 수행하기 전에 해당 변경 사항이 현재 연결된 KMS 키에 미치는 영향을 고려해야 합니다. 보안 주체가 암호화 작업에 후자의 KMS 키를 사용한 경우 보안 주체에 계속 액세스해야 할 수 있습니다. 이 경우 보안 주체가 두 KMS 키를 모두 사용할 수 있는 권한을 갖도록 정책을 업데이트할 수 있습니다.

이와 같은 오류는 다음과 같이 방지할 수 있습니다. 별칭을 업데이트하기 전에 별칭에 의존하는 액세스를 감지하는 정책을 검색하십시오. 그런 다음 별칭과 연결된 모든 리전의 KMS 키를 가져옵니다. 별칭 관리 권한을 필요한 보안 주체에게만 부여하고 관리해야 하는 별칭으로 [별칭 관리 권한을 제한](alias-access.md#alias-access-limiting)합니다.

# 에 대한 RBAC AWS KMS
<a name="rbac"></a>

역할 기반 액세스 제어(RBAC)는 사용자에게 직무 수행에 필요한 권한만 제공하는 권한 부여 전략입니다. AWS KMS 는 [키 정책](key-policies.md) 내에서 키 사용에 대한 세분화된 권한을 지정하여 키에 대한 액세스를 제어할 수 있도록 함으로써 RBAC를 지원합니다. 키 정책은 키에 대한 액세스 권한을 부여하는 리소스, 작업, 효과, 위탁자 및 선택적 조건을 지정합니다.

에서 RBAC를 구현하려면 키 사용자와 키 관리자에 대한 권한을 분리하는 AWS KMS것이 좋습니다.

------
#### [ Key users ]

다음 키 정책 문 예제는 `ExampleUserRole` IAM 역할이 KMS 키를 사용하도록 허용합니다.

```
{
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws: iam::111122223333:role/ExampleUserRole"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
  }
```

 실제 키 사용자에게는 이 예제의 사용자보다 더 적은 권한이 필요할 수 있습니다. 그런 경우에는 사용자에게 필요한 권한만 할당하세요. 다음 질문을 사용하여 권한을 더욱 구체화할 수 있습니다.
+ 어떤 IAM 위탁자(역할 또는 사용자)가 키에 액세스해야 하나요?
+ 각 위탁자가 키로 수행해야 하는 작업은 무엇인가요? 예를 들어 위탁자에게 암호화 및 서명 권한만 필요한가요?
+ 사용자가 인간입니까 아니면 AWS 서비스입니까? 서비스인 AWS 경우 [조건 키를](conditions-kms.md#conditions-kms-via-service) 사용하여 키 사용을 특정 AWS 서비스로 제한할 수 있습니다.

------
#### [ Key administrators ]



다음 키 정책 예제에서는 `ExampleAdminRole` IAM 역할이 KMS 키를 관리할 수 있도록 허용합니다.

```
{
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws: iam::111122223333:role/ExampleAdminRole"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
    }
```

 실제 키 관리자에게는 이 예제의 관리자보다 적은 권한이 필요할 수 있습니다. 그런 경우에는 키 관리자에게 필요한 권한만 할당하세요.

------

사용자에게 역할을 수행하는 데 필요한 권한만 부여하세요. 사용자의 권한은 키가 테스트 환경에서 사용되는지 또는 프로덕션 환경에서 사용되는지에 따라 달라질 수 있습니다. 특정 비프로덕션 환경에서 덜 제한적인 권한을 사용하는 경우에는 정책을 프로덕션으로 릴리스하기 전에 테스트하는 프로세스를 구현하세요.

**자세히 알아보기**
+ [IAM 자격 증명(사용자, 사용자 그룹 및 역할)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)
+ [액세스 제어의 유형](https://docs.aws.amazon.com/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/access-control-types.html)

# 다른 계정의 사용자가 KMS를 사용하도록 허용
<a name="key-policy-modifying-external-accounts"></a>

다른의 사용자 또는 역할이 계정에서 KMS 키를 AWS 계정 사용하도록 허용할 수 있습니다. 교차 계정 액세스에는 KMS 키의 키 정책과 외부 사용자 계정의 IAM 정책에 대한 권한이 필요합니다.

교차 계정 권한은 다음 작업에만 적용됩니다.
+ [암호화 작업](kms-cryptography.md#cryptographic-operations)
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html)
+ [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)
+ [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)
+ [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
+ [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)

다른 계정의 사용자에게 다른 작업에 대한 권한을 부여하면 해당 권한은 영향을 주지 않습니다. 예를 들어 다른 계정의 보안 주체에 IAM 정책의 [kms:ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html) 권한을 부여하거나 키 정책의 KMS 키에 대한 [kms:ScheduleKeyDeletion](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) 권한을 부여하는 경우 리소스에서 해당 작업을 호출하려는 사용자의 시도는 여전히 실패합니다.

 AWS KMS 작업에 다른 계정에서 KMS 키를 사용하는 방법에 대한 자세한 내용은 [AWS KMS 권한](kms-api-permissions-reference.md) 및의 **교차 계정 사용** 열을 참조하세요[다른 계정에서 KMS 키 사용](#cross-account-use). 또한 [AWS Key Management Service API 참조서](https://docs.aws.amazon.com/kms/latest/APIReference/)의 각 API 설명에 **교차 계정 사용** 섹션도 있습니다.

**주의**  
보안 주체에 KMS 키를 사용할 수 있는 권한을 부여할 때는 주의해야 합니다. 가능하면 *최소 권한* 원칙을 따르십시오. 사용자에게 필요한 작업에만 필요한 KMS 키에만 액세스할 수 있도록 합니다.  
또한 익숙하지 않은 KMS 키, 특히 다른 계정의 KMS 키를 사용할 때는 주의해야 합니다. 악의적인 사용자는 KMS 키를 사용하여 본인이나 계정에 대한 정보를 얻을 수 있는 권한을 부여할 수 있습니다.  
정책을 사용하여 계정의 리소스를 보호하는 방법에 대한 자세한 내용은 [IAM 정책 모범 사례](iam-policies-best-practices.md) 섹션을 참조하십시오.

다른 계정의 사용자 및 역할에게 KMS 키를 사용할 수 있는 권한을 부여하려면 다음 두 가지 유형의 정책을 사용해야 합니다.
+ KMS 키의 **키 정책**은 외부 계정(또는 외부 계정의 사용자 및 역할)에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 키 정책은 KMS 키를 소유하는 계정에 있습니다.
+ 외부 계정의 **IAM 정책**은 키 정책 권한을 해당 사용자 및 역할에 위임해야 합니다. 이러한 정책은 외부 계정에 설정되며 해당 계정의 사용자 및 역할에 권한을 부여합니다.

키 정책은 누가 KMS 키에 대한 액세스 권한을 *가질 수 있는지*를 결정합니다. IAM 정책은 누가 KMS 키에 대한 액세스 권한을 *가질 수 있는지*를 결정합니다. 키 정책과 IAM 정책만으로는 충분하지 않습니다. 둘 다 변경해야 합니다.

키 정책을 편집하려면 AWS Management Console 에서 [정책 보기](key-policy-modifying.md#key-policy-modifying-how-to-console-policy-view)를 사용하거나 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 또는 [PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 작업을 사용할 수 있습니다.

IAM 정책 편집에 대한 도움말은 [에서 IAM 정책 사용 AWS KMS](iam-policies.md) 섹션을 참조하십시오.

키 정책과 IAM 정책이 함께 작동하여 다른 계정에서 KMS 키 사용을 허용하는 방법을 보여 주는 예는 [예제 2: 사용자가 다른에서 KMS 키를 사용할 권한이 있는 역할을 맡음 AWS 계정](policy-evaluation.md#example-cross-acct) 섹션을 참조하십시오.

[AWS CloudTrail 로그](logging-using-cloudtrail.md)의 KMS 키에서 결과 교차 계정 AWS KMS 작업을 볼 수 있습니다. 다른 계정의 KMS 키를 사용하는 작업은 호출자의 계정과 KMS 키 소유자 계정 모두에 기록됩니다.

**Topics**
+ [1단계: 로컬 계정에서 키 정책 문 추가](#cross-account-key-policy)
+ [2단계: 외부 계정에서 IAM 정책 추가](#cross-account-iam-policy)
+ [에서 외부 KMS 키 사용 허용 AWS 서비스](#cross-account-service)
+ [다른 계정에서 KMS 키 사용](#cross-account-use)

**참고**  
이 주제의 예제에서는 키 정책과 IAM 정책을 함께 사용하여 KMS 키에 대한 액세스를 제공하고 제한하는 방법을 보여 줍니다. 이러한 일반 예제는 KMS 키에 대해 특정에 AWS 서비스 필요한 권한을 나타내기 위한 것이 아닙니다. 에 AWS 서비스 필요한 권한에 대한 자세한 내용은 서비스 설명서의 암호화 주제를 참조하세요.

## 1단계: 로컬 계정에서 키 정책 문 추가
<a name="cross-account-key-policy"></a>

KMS 키에 대한 키 정책은 누가 KMS 키에 액세스할 수 있으며 어떤 작업을 수행할 수 있는지에 대한 주요 결정 요인입니다. 키 정책은 항상 KMS 키를 소유하는 계정에 있습니다. IAM 정책과 달리, 키 정책은 리소스를 지정하지 않습니다. 리소스는 키 정책과 연결된 KMS 키입니다. 교차 계정 권한을 제공할 때 KMS 키의 키 정책은 외부 계정(또는 외부 계정의 사용자 및 역할)에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다.

외부 계정에게 KMS 키를 사용할 수 있는 권한을 부여하려면 외부 계정을 지정하는 문을 키 정책에 추가합니다. 키 정책의 `Principal` 요소에 외부 계정의 Amazon 리소스 이름(ARN)을 입력합니다.

키 정책에서 외부 계정을 지정하면 외부 계정의 IAM 관리자는 IAM 정책을 사용하여 해당 권한을 외부 계정의 사용자 및 역할에게 위임할 수 있습니다. 또한 키 정책에 지정된 작업 중 어떤 작업을 사용자 및 역할이 수행할 수 있는지도 결정할 수 있습니다.

외부 계정 및 보안 주체에 부여된 사용 권한은 KMS 키와 키 정책을 호스팅하는 리전에서 외부 계정을 사용하도록 설정한 경우에만 유효합니다. 기본적으로 사용하도록 설정되지 않은 리전(‘옵트인 리전’)에 대한 자세한 내용은 *AWS 일반 참조*의 [AWS 리전관리](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)를 참조하세요.

예를 들어 계정 `444455556666`이 계정 `111122223333`에서 대칭 암호화 KMS 키를 사용하도록 허용한다고 가정합니다. 이렇게 하려면 다음 예제와 같은 정책 문을 `111122223333` 계정의 KMS 키에 대한 키 정책에 추가합니다. 이 정책문은 대칭 암호화 KMS 키에 대한 암호화 작업에서 KMS 키를 사용할 수 있는 권한을 외부 계정 `444455556666`에 부여합니다.

**참고**  
다음 예는 KMS 키를 다른 계정과 공유하기 위한 샘플 키 정책을 나타냅니다. 예제 `Sid`, `Principal` 및 `Action` 값을 KMS 키의 용도에 맞는 유효한 값으로 바꾸세요.

```
{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::444455556666:root"
        ]
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}
```

외부 계정에게 권한을 부여하는 대신, 키 정책에서 특정 외부 사용자 및 역할을 지정할 수 있습니다. 하지만 이러한 사용자 및 역할은 외부 계정의 IAM 관리자가 적절한 IAM 정책을 해당 자격 증명에 연결할 때까지 KMS 키를 사용할 수 없습니다. IAM 정책은 키 정책에 지정된 외부 사용자 및 역할의 일부 또는 전부에게 권한을 부여할 수 있습니다. 그리고 이 정책은 키 정책에 지정된 작업의 일부 또는 전부를 허용할 수 있습니다.

키 정책에서 자격 증명을 지정하면 외부 계정의 IAM 관리자가 제공할 수 있는 권한이 제한됩니다. 하지만 이렇게 하면 두 계정의 정책 관리가 더 복잡해집니다. 예를 들어, 사용자 또는 역할을 추가해야 한다고 가정합니다. KMS 키를 소유하는 계정에서 키 정책에 해당 자격 증명을 추가하고 자격 증명의 계정에서 IAM 정책을 생성해야 합니다.

키 정책에서 특정 외부 사용자 또는 역할을 지정하려면 `Principal` 요소에 외부 계정의 사용자 또는 역할의 Amazon 리소스 이름(ARN)을 입력합니다.

예를 들어, 다음 예제 키 정책 문은 `444455556666` 계정의 `ExampleRole`이 `111122223333` 계정의 KMS 키를 사용하도록 허용합니다. 이 키 정책문은 대칭 암호화 KMS 키에 대한 암호화 작업에서 KMS 키를 사용할 수 있는 권한을 외부 계정 `444455556666`에 부여합니다.

**참고**  
다음 예는 KMS 키를 다른 계정과 공유하기 위한 샘플 키 정책을 나타냅니다. 예제 `Sid`, `Principal` 및 `Action` 값을 KMS 키의 용도에 맞는 유효한 값으로 바꾸세요.

```
{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ExampleRole"
    },
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*"
}
```

**참고**  
[조건](policy-conditions.md)을 사용하여 키 정책을 제한하지 않는 한 권한을 허용하는 키 정책문에서 보안 주체를 별표(\$1)로 설정하지 마세요. 별표는 다른 정책 문이 명시적으로 거부하지 않는 한 모든 자격 증명에 KMS 키를 사용할 수 있는 AWS 계정 권한을 부여합니다. 다른의 사용자는 자신의 계정에 해당 권한이 있을 때마다 KMS 키를 사용할 AWS 계정 수 있습니다.

또한 외부 계정에게 어떤 권한을 부여할지도 결정해야 합니다. 예를 들어, 암호화 해제할 수 있지만 암호화할 수 없는 권한을 부여하거나, KMS 키를 볼 수 있지만 사용할 수 없는 권한을 부여해야 할 수 있습니다. KMS 키에 대한 권한 목록은 [AWS KMS 권한](kms-api-permissions-reference.md) 섹션을 참조하세요.

**KMS 키를 생성하는 경우 키 정책 설정**  
[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업을 사용하여 KMS 키를 생성하는 경우 `Policy` 파라미터를 사용하여 외부 계정 또는 외부 사용자 및 역할에게 KMS 키를 사용할 권한을 부여하는 키 정책을 지정할 수 있습니다.  
에서 KMS 키를 생성할 때 해당 키 정책 AWS Management Console도 생성합니다. **Key Administrators(키 관리자)** 및 **Key Users(키 사용자)** 섹션에서 자격 증명을 선택하면 AWS KMS 는 해당 자격 증명에 대한 정책 문을 KMS 키의 키 정책에 추가합니다. 또한 **Key Users(키 사용자)** 섹션을 사용하여 외부 계정을 키 사용자로 추가할 수도 있습니다.  
외부 계정의 계정 ID를 입력하면가 키 정책에 두 개의 문을 AWS KMS 추가합니다. 이 작업은 키 정책에만 영향을 미칩니다. 해당 사용자 및 역할에 이러한 권한의 일부 또는 전부를 부여하는 IAM 정책을 연결할 때까지 외부 계정의 사용자 및 역할은 KMS 키를 사용할 수 없습니다.  
첫 번째 키 정책문은 외부 계정에게 암호화 작업에서 KMS 키를 사용할 수 있는 권한을 부여합니다. 두 번째 키 정책 문은 외부 계정이 KMS 키에 대한 권한 부여를 생성, 확인 및 취소할 수 있도록 허용합니다. 단, 요청이 [AWS 와 통합된 서비스 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)에서 오는 경우에만 가능합니다. 이러한 권한을 통해 사용자 데이터를 암호화하는 다른 AWS 서비스에서 KMS 키를 사용할 수 있습니다. 이러한 권한은 AWS 서비스의 사용자 데이터를 암호화하는 KMS 키용으로 설계되었습니다.

## 2단계: 외부 계정에서 IAM 정책 추가
<a name="cross-account-iam-policy"></a>

KMS 키를 소유하는 계정의 키 정책은 권한의 유효 범위를 설정합니다. 그러나 해당 권한을 위임하는 IAM 정책을 연결하거나 권한 부여를 사용하여 KMS 키에 대한 액세스를 관리할 때까지 외부 계정의 사용자 및 역할은 KMS 키를 사용할 수 없습니다. IAM 정책은 외부 계정에서 설정됩니다.

키 정책이 외부 계정에게 권한을 부여하는 경우 계정의 어떠한 사용자 또는 역할에든 IAM 정책을 연결할 수 있습니다. 키 정책이 지정된 사용자 또는 역할에게 권한을 부여하는 경우 IAM 정책은 지정된 사용자 및 역할의 일부 또는 전부에게만 해당 권한을 부여할 수 있습니다. IAM 정책이 기타 외부 사용자 또는 역할에게 KMS 키 액세스 권한을 부여하는 경우 해당 권한은 효과가 없습니다.

키 정책은 IAM 정책의 작업도 제한합니다. IAM 정책은 키 정책에 지정된 작업의 일부 또는 전부를 위임할 수 있습니다. IAM 정책이 키 정책에 지정되지 않은 작업을 나열하는 경우 해당 권한은 효과가 없습니다.

다음 예제 IAM 정책은 보안 주체가 `111122223333` 계정의 KMS 키를 암호화 작업에 사용하도록 허용합니다. 이 권한을 `444455556666` 계정의 사용자 및 역할에 부여하려면 `444455556666` 계정의 사용자 또는 역할에 [정책을 연결](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)합니다.

**참고**  
다음 예제는 KMS 키를 다른 계정과 공유하기 위한 샘플 IAM 정책을 나타냅니다. 예제 `Sid`, `Resource` 및 `Action` 값을 KMS 키의 용도에 맞는 유효한 값으로 바꾸세요.

```
{
    "Sid": "AllowUseOfKeyInAccount111122223333",
    "Effect": "Allow",
    "Action": [
      "kms:Encrypt",
      "kms:Decrypt",
      "kms:ReEncrypt*",
      "kms:GenerateDataKey*",
      "kms:DescribeKey"
    ],
    "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
```

이 정책에 대한 다음 세부 정보를 참고하세요.
+ 키 정책과 달리, IAM 정책문에는 `Principal` 요소가 포함되지 않습니다. IAM 정책에서 보안 주체는 정책이 연결되는 자격 증명입니다.
+ IAM 정책의 `Resource` 요소는 보안 주체가 사용할 수 있는 KMS 키를 식별합니다. KMS 키를 지정하려면 해당 [키 ARN](concepts.md#key-id-alias-ARN)을 `Resource` 요소에 추가합니다.
+ `Resource` 요소에서 KMS 키를 두 개 이상 지정할 수 있습니다. 하지만 `Resource` 요소에서 특정 KMS 키를 지정하지 않으면 의도한 것보다 많은 KMS 키에 대한 액세스 권한을 실수로 부여할 수 있습니다.
+ 외부 사용자가 [AWS KMS와 통합된AWS 서비스](https://aws.amazon.com/kms/features/#AWS_Service_Integration)에 KMS 키를 사용하도록 허용하려면 키 정책 또는 IAM 정책에 권한을 추가해야 할 수 있습니다. 자세한 내용은 [에서 외부 KMS 키 사용 허용 AWS 서비스](#cross-account-service) 섹션을 참조하세요.

IAM 정책 작업에 대한 자세한 내용은 [IAM 정책](iam-policies.md) 섹션을 참조하십시오.

## 에서 외부 KMS 키 사용 허용 AWS 서비스
<a name="cross-account-service"></a>

다른 계정의 사용자에게 AWS KMS와 통합된 서비스에 KMS 키를 사용할 권한을 부여할 수 있습니다. 예를 들어, 외부 계정의 사용자는 KMS 키를 사용하여 Amazon S3 버킷의 객체를 암호화하거나 객체가 AWS Secrets Manager에 저장하는 비밀을 암호화할 수 있습니다.

키 정책은 외부 사용자 또는 외부 사용자의 계정에게 KMS 키를 사용할 수 있는 권한을 부여해야 합니다. 추가로, 사용자에게 AWS 서비스를 사용할 수 있는 권한을 부여하는 IAM 정책을 자격 증명에 연결해야 합니다. 서비스에서 사용자에게 키 정책 또는 IAM 정책에 대한 추가 권한이 필요할 수도 있습니다. 에서 고객 관리형 키에 AWS 서비스 필요한 권한 목록은 서비스 사용 설명서 또는 개발자 안내서의 보안 장에서 데이터 보호 주제를 참조하세요.

## 다른 계정에서 KMS 키 사용
<a name="cross-account-use"></a>

다른에서 KMS 키를 사용할 권한이 있는 경우 AWS Management Console, AWS 계정, AWS SDKs AWS CLI및에서 KMS 키를 사용할 수 있습니다 AWS Tools for PowerShell.

셸 명령 또는 API 요청에서 다른 계정의 KMS 키를 식별하려면 다음 [키 식별자](concepts.md#key-id)를 사용합니다.
+ [암호화 작업](kms-cryptography.md#cryptographic-operations), [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 및 [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html)의 경우 KMS 키의 [키 ARN](concepts.md#key-id-key-ARN) 또는 [별칭 ARN](concepts.md#key-id-alias-ARN)을 사용합니다.
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html), [GetKeyRotationStatus](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyRotationStatus.html), [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/ListGrants.html) 및 [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/RevokeGrant.html)의 경우 KMS 키의 키 ARN을 사용합니다.

키 ID 또는 별칭 이름만 입력하면 KMS 키가 계정에 있다고 AWS 가정합니다.

사용 권한이 있더라도 AWS KMS 콘솔은 다른 계정에 KMS 키를 표시하지 않습니다. 또한 다른 AWS 서비스의 콘솔에 표시되는 KMS 키 목록에는 다른 계정의 KMS 키가 포함되어 있지 않습니다.

 AWS 서비스 콘솔의 다른 계정에서 KMS 키를 지정하려면 KMS 키의 키 ARN 또는 별칭 ARN을 입력해야 합니다. 필요한 키 식별자는 서비스에 따라 다르며, 서비스 콘솔과 API 작업마다 다를 수 있습니다. 세부 정보는 서비스 문서를 참조하세요.

# 다중 리전 키에 대한 액세스 제어
<a name="multi-region-keys-auth"></a>

다중 리전 키를 사용하면 규정 준수, 재해 복구 및 백업 시나리오에서 단일 리전 키를 사용할 수 있습니다. 그러나 다중 리전 키의 보안 속성은 단일 리전 키의 보안 속성과 크게 다르기 때문에 다중 리전 키의 생성, 관리 및 사용을 승인할 때는 주의를 기울이는 것이 좋습니다.

**참고**  
`Resource` 필드에 와일드카드 문자가 있는 기존 IAM 정책문은 단일 리전 키와 다중 리전 키 모두에 적용됩니다. 단일 리전 KMS 키 또는 다중 리전 키로 제한하려면 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 조건 키를 사용합니다.

단일 리전으로 충분할 경우 권한 부여 도구를 사용하여 다중 리전 키를 생성 및 사용할 수 없게 할 수 있습니다. 보안 주체가 필요한 에만 다중 리전 키를 복제하도록 허용합니다 AWS 리전 . 다중 리전 키에 대한 권한을 필요로 하는 보안 주체와 해당 키가 필요한 작업에 대해서만 부여합니다.

키 정책, IAM 정책 및 권한 부여를 사용하여 IAM 보안 주체가에서 다중 리전 키를 관리하고 사용하도록 허용할 수 있습니다 AWS 계정. 각 다중 리전 키는 고유한 키 ARN 및 키 정책을 가진 독립적인 리소스입니다. 각 키에 대한 키 정책을 설정 및 유지 관리하고 신규 및 기존 IAM 정책이 권한 부여 전략을 구현하는지 확인해야 합니다.

다중 리전 키를 지원하려면 IAM 서비스 연결 역할을 AWS KMS 사용합니다. 이 역할은 AWS KMS 에게 [공유 속성](multi-region-keys-overview.md#mrk-sync-properties)을 동기화하는 데 필요한 권한을 부여합니다. 자세한 내용은 [다중 리전 키 AWS KMS 동기화 권한 부여](multi-region-auth-slr.md) 단원을 참조하십시오.

**Topics**
+ [다중 리전 키에 대한 인증 기본 사항](#multi-region-auth-about)
+ [다중 리전 키 관리자 및 사용자 권한 부여](#multi-region-auth-users)

## 다중 리전 키에 대한 인증 기본 사항
<a name="multi-region-auth-about"></a>

다중 리전 키에 대한 주요 정책 및 IAM 정책을 설계할 때는 다음 원칙을 고려하십시오.
+ **키 정책** — 각 다중 리전 키는 독립적인 KMS 키 리소스이며 자체 [키 정책](key-policies.md)이 있습니다. 관련된 다중 리전 키 집합의 각 키에 동일하거나 다른 키 정책을 적용할 수 있습니다. 키 정책은 다중 리전 키의 [공유 속성](multi-region-keys-overview.md#mrk-sync-properties)이 *아닙니다*.는 관련 다중 리전 키 간에 키 정책을 복사하거나 동기화하지 AWS KMS 않습니다.

   AWS KMS 콘솔에서 복제본 키를 생성하면 콘솔에 편의를 위해 기본 키의 현재 키 정책이 표시됩니다. 이 키 정책을 사용하거나 편집하거나 삭제하고 바꿀 수 있습니다. 그러나 기본 키 정책을 변경하지 않고 수락하더라도 AWS KMS 는 정책을 동기화하지 않습니다. 예를 들어, 기본 키의 키 정책을 변경하는 경우 복제 키의 키 정책은 동일하게 유지됩니다.
+ **기본 키 정책** — [CreateKey](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateKey.html) 및 `ReplicateKey` 작업을 사용하여 다중 리전 키를 생성하는 경우 요청에 키 정책을 지정하지 않는 한 [기본 키 정책](key-policy-default.md)이 적용됩니다. 이는 단일 리전 키에 적용되는 기본 키 정책과 동일합니다.
+ **IAM 정책** — 모든 KMS 키와 마찬가지로 IAM 정책을 사용하여 [키 정책에서 허용하는](key-policy-default.md#key-policy-default-allow-root-enable-iam) 경우에만 다중 리전 키에 대한 액세스를 제어할 수 있습니다. [IAM 정책은](iam-policies.md) AWS 리전 기본적으로 모든에 적용됩니다. 그러나 [aws:RequestedRegion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion)과 같은 조건 키를 사용하여 특정 리전으로 권한을 제한할 수 있습니다.

  기본 및 복제본 키를 만들려면 보안 주체는 키가 생성된 리전에 적용되는 IAM 정책에 `kms:CreateKey` 권한이 있어야 합니다.
+ **권한 부여 **- AWS KMS [권한 부여](grants.md)는 리전별입니다. 각 권한 부여는 하나의 KMS 키에 대한 권한을 허용합니다. 권한 부여를 사용하여 다중 리전 기본 키 또는 복제본 키에 대한 사용 권한을 허용할 수 있습니다. 그러나 다중 리전 키와 관련된 경우에도 단일 권한 부여를 사용하여 여러 KMS 키에 대한 사용 권한을 허용할 수는 없습니다.
+ **키 ARN** — 각 다중 리전 키에는 [고유 키 ARN](mrk-how-it-works.md)이 있습니다. 관련된 다중 리전 키의 키 ARN은 파티션, 계정 및 키 ID는 같지만 리전은 다릅니다.

  특정 다중 리전 키에 IAM 정책문을 적용하려면 해당 키 ARN 또는 해당 리전을 포함하는 키 ARN 패턴을 사용합니다. IAM 정책문을 모든 관련 다중 리전 키에 적용하려면 다음 예시에서와 같이 ARN의 리전 요소에 와일드카드 문자(\$1)를 사용합니다.

  ```
  {
    "Effect": "Allow",  
    "Action": [
      "kms:Describe*",
      "kms:List*"
    ],
    "Resource": {
        "arn:aws:kms:*::111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"
    }
  }
  ```

  의 모든 다중 리전 키에 정책 설명을 적용하려면 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 정책 조건 또는 고유한 `mrk-` 접두사를 포함하는 키 ID 패턴을 사용할 AWS 계정수 있습니다.
+ **서비스 연결 역할** — 다중 리전 기본 키를 만드는 보안 주체는 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 권한이 있어야 합니다.

  관련 다중 리전 키의 공유 속성을 동기화하기 위해 AWS KMS 는 IAM [서비스 연결 역할을](multi-region-auth-slr.md) 수임합니다.는 다중 리전 기본 키를 AWS KMS 생성할 때마다 AWS 계정 에서 서비스 연결 역할을 생성합니다. (역할이 존재하는 경우 AWS KMS 는 유해한 영향을 미치지 않습니다.) 역할은 모든 리전에서 유효합니다. AWS KMS 가 서비스 연결 역할을 생성(또는 다시 생성)하도록 허용하려면 다중 리전 기본 키를 생성하는 보안 주체에 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 권한이 있어야 합니다.

## 다중 리전 키 관리자 및 사용자 권한 부여
<a name="multi-region-auth-users"></a>

다중 리전 키를 만들고 관리하는 보안 주체는 기본 및 복제본 리전에서 다음 사용 권한이 필요합니다.
+ `kms:CreateKey`
+ `kms:ReplicateKey`
+ `kms:UpdatePrimaryRegion`
+ `iam:CreateServiceLinkedRole`

### 기본 키 생성
<a name="mrk-auth-create-primary"></a>

[다중 리전 기본 키를 생성](create-primary-keys.md)하려면 보안 주체에게 기본 키의 리전에서 유효한 IAM 정책에 [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 및 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 권한이 필요합니다. 이러한 사용 권한이 있는 보안 주체는 사용자가 권한을 제한하지 않는 한 단일 리전 및 다중 리전 키를 만들 수 있습니다.

`iam:CreateServiceLinkedRole` 권한을 통해는 [**AWSServiceRoleForKeyManagementServiceMultiRegionKeys** 역할을](multi-region-auth-slr.md) AWS KMS 생성하여 관련 다중 리전 키의 [공유 속성을](multi-region-keys-overview.md#mrk-sync-properties) 동기화할 수 있습니다.

예를 들어 이 IAM 정책은 위탁자가 다중 리전 키를 생성하고, 해당 키에 대한 정책을 연결하며, 다중 리전 키용 서비스 연결 역할을 생성하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action": [
        "kms:CreateKey",
        "iam:CreateServiceLinkedRole"
      ],
      "Effect":"Allow",
      "Resource":"*"
  }
}
```

------

다중 리전 기본 키를 만들 수 있는 권한을 허용하거나 거부하려면 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 조건 키를 사용합니다. 유효 값은 `true`(다중 리전 키) 또는 `false`(단일 리전 키)입니다. 예를 들어 다음 IAM 정책문은 보안 주체가 다중 리전 키를 생성하지 못하도록 방지하기 위해 `kms:MultiRegion` 조건 키와 함께 `Deny` 작업을 사용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":{
      "Action":"kms:CreateKey",
      "Effect":"Deny",
      "Resource":"*",
      "Condition": {
          "Bool": {
            "kms:MultiRegion": true
          }
      }
  }
}
```

------

### 키 복제
<a name="mrk-auth-replicate"></a>

[다중 리전 복제본 키를 생성](#mrk-auth-replicate)하려면 보안 주체는 다음 권한을 필요로 합니다.
+  [kms:ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 권한(기본 키의 키 정책에서)
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 권한(복제본 키 리전에서 유효한 IAM 정책에서).

이러한 권한을 허용할 때는 주의해야 합니다. 보안 주체는 KMS 키와 사용 권한을 부여하는 키 정책을 만들 수 있습니다. `kms:ReplicateKey` 권한은 또한 AWS KMS내의 리전 경계를 넘어 키 구성 요소의 이전을 허용합니다.

다중 리전 키를 복제할 수 AWS 리전 있는를 제한하려면 [kms:ReplicaRegion](conditions-kms.md#conditions-kms-replica-region) 조건 키를 사용합니다. 그것은 단지 `kms:ReplicateKey` 권한을 제한합니다. 그렇지 않으면 아무런 효과도 없습니다. 예를 들어 다음 키 정책은 보안 주체가 이 기본 키를 지정된 리전에서만 복제할 수 있도록 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:ReplicateKey",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ReplicaRegion": [
         "us-east-1",
         "eu-west-3",
         "ap-southeast-2"
      ]
    }
  }
}
```

### 기본 리전 업데이트
<a name="mrk-auth-update"></a>

인증된 보안 주체는 복제본 키를 기본 키로 변환하여 이전 기본 키를 복제본으로 변경할 수 있습니다. 이 작업을 [기본 리전 업데이트](multi-region-update.md)라고 합니다. 기본 리전을 업데이트하려면 보안 주체에게 두 리전 모두에서 [kms:UpdatePrimaryRegion](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdatePrimaryRegion.html) 권한이 필요합니다. 키 정책 또는 IAM 정책에서 이러한 권한을 제공할 수 있습니다.
+ `kms:UpdatePrimaryRegion`(기본 키에서). 이 권한은 기본 키 리전에서 유효해야 합니다.
+ `kms:UpdatePrimaryRegion`(복제 키에서). 이 권한은 복제 키 리전에서 유효해야 합니다.

예를 들어 다음 키 정책은 관리자 역할을 수임할 수 있는 사용자에게 KMS 키의 기본 리전을 업데이트할 수 있는 권한을 부여합니다. 이 KMS 키는 이 작업에서 기본 키 또는 복제 키일 수 있습니다.

```
{
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/Administrator"
  },
  "Action": "kms:UpdatePrimaryRegion"
}
```

기본 키를 호스팅할 수 AWS 리전 있는를 제한하려면 [kms:PrimaryRegion](conditions-kms.md#conditions-kms-primary-region) 조건 키를 사용합니다. 예를 들어, 다음 IAM 정책 문은 새 기본 리전이 지정된 리전 중 하나인 AWS 계정경우에만 보안 주체가에서 다중 리전 키의 기본 리전을 업데이트하도록 허용합니다.

```
{
  "Effect": "Allow",  
  "Action": "kms:UpdatePrimaryRegion",
  "Resource": {
      "arn:aws:kms:*:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": {
      "kms:PrimaryRegion": [ 
         "us-west-2",
         "sa-east-1",
         "ap-southeast-1"
      ]
    }
  }
}
```

### 다중 리전 키 사용 및 관리
<a name="mrk-auth-using"></a>

기본적으로 AWS 계정 및 리전에서 KMS 키를 사용하고 관리할 권한이 있는 보안 주체는 다중 리전 키를 사용하고 관리할 수 있는 권한도 있습니다. 그러나 [kms:MultiRegion](conditions-kms.md#conditions-kms-multiregion) 조건 키를 사용하여 단일 리전 키만 허용하거나 다중 리전 키만 허용할 수 있습니다. 또는 [kms:MultiRegionKeyType](conditions-kms.md#conditions-kms-multiregion-key-type) 조건 키를 사용하여 다중 리전 기본 키만 허용하거나 복제본 키만 허용합니다. 두 조건 키는 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 작업 및 기존 KMS 키를 사용하는 모든 작업(예: [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 또는 [EnableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_EnableKey.html))에 대한 액세스를 제어합니다.

다음 예제 IAM 정책문은 `kms:MultiRegion` 조건 키를 사용하여 보안 주체가 다중 리전 키를 사용하거나 관리하지 못하도록 합니다.

```
{
  "Effect": "Deny",  
  "Action": "kms:*",
  "Resource": "*",
  "Condition": {
    "Bool": "kms:MultiRegion": true
  }
}
```

이 예제 IAM 정책문은 `kms:MultiRegionKeyType` 조건을 사용하여 보안 주체가 다중 리전 복제본 키에 대해서만 키 삭제를 예약하고 취소할 수 있도록 허용합니다.

```
{
  "Effect": "Allow",  
  "Action": [
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": {
      "arn:aws:kms:us-west-2:111122223333:key/*"
  },
  "Condition": {
    "StringEquals": "kms:MultiRegionKeyType": "REPLICA"
  }
}
```

# 에 대한 액세스 결정 AWS KMS keys
<a name="determining-access"></a>

현재에 액세스할 수 있는 사람 또는 대상의 전체 범위를 확인하려면 KMS 키의 키 정책 AWS KMS key, KMS 키에 적용되는 모든 [권한 부여](grants.md) 및 잠재적으로 모든 AWS Identity and Access Management (IAM) 정책을 검사해야 합니다. KMS 키의 가능한 사용 범위를 파악하거나 규정 또는 감사 요구 사항을 준수하기 위해 이 작업을 수행할 수 있습니다. 다음 주제는 현재 KMS 키에 액세스할 수 있는 AWS 보안 주체(ID)의 전체 목록을 생성하는 데 도움이 될 수 있습니다.

**Topics**
+ [키 정책 검사](determining-access-key-policy.md)
+ [IAM 정책 검사](determining-access-iam-policies.md)
+ [권한 부여 검사](determining-access-grants.md)

# 키 정책 검사
<a name="determining-access-key-policy"></a>

[키 정책](key-policies.md)은 KMS 키에 대한 액세스를 제어하는 기본적인 방법입니다. 모든 KMS 키에는 정확히 하나의 키 정책이 있습니다.

키 정책이 [기본 키 정책](key-policy-default.md#key-policy-default-allow-root-enable-iam)으로 구성되거나 포함하는 경우 키 정책은 계정의 IAM 관리자가 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 허용합니다. 또한 키 정책이 [다른 AWS 계정](key-policy-modifying-external-accounts.md)에 KMS 키를 사용할 수 있는 권한을 부여하는 경우 외부 계정의 IAM 관리자는 IAM 정책을 사용하여 해당 권한을 위임할 수 있습니다. KMS 키에 액세스할 수 있는 보안 주체의 전체 목록을 결정하려면 [IAM 정책을 검사](determining-access-iam-policies.md)하십시오.

계정[AWS 관리형 키](concepts.md#aws-managed-key)에서 AWS KMS [ 고객 관리형 키](concepts.md#customer-mgn-key) 또는의 키 정책을 보려면 AWS KMS API에서 AWS Management Console 또는 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 작업을 사용합니다. 키 정책을 보려면 KMS 키에 대한 `kms:GetKeyPolicy` 권한이 있어야 합니다. KMS 키에 대한 키 정책을 보는 방법은 [키 정책 보기](key-policy-viewing.md) 단원을 참조하십시오.

키 정책 문서를 검사하고 각 정책 문서의 `Principal` 요소에 지정된 모든 보안 주체를 기록해 둡니다. `Allow` 효과가 있는 정책 설명에서 IAM 사용자, IAM 역할 및 `Principal` 요소의는이 KMS 키 AWS 계정 에 액세스할 수 있습니다.

**참고**  
[조건](policy-conditions.md)을 사용하여 키 정책을 제한하지 않는 한 권한을 허용하는 키 정책문에서 보안 주체를 별표(\$1)로 설정하지 마세요. 별표는 다른 정책 문이 명시적으로 거부하지 않는 한 모든 자격 증명에 KMS 키를 사용할 수 있는 AWS 계정 권한을 부여합니다. 다른의 사용자는 자신의 계정에 해당 권한이 있을 때마다 KMS 키를 사용할 AWS 계정 수 있습니다.

다음 예제는 [기본 키 정책](key-policy-default.md)에 수록된 정책문을 사용하여 이를 수행하는 방법을 보여줍니다.

**Example 정책문 1**  

```
{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
  "Action": "kms:*",
  "Resource": "*"
}
```
정책 설명 1에서 `arn:aws:iam::111122223333:root`는 AWS 계정 111122223333을 참조하는 [AWS 계정 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)입니다. (계정 루트 사용자가 아닙니다.) 기본적으로를 사용하여 새 KMS 키를 생성 AWS Management Console하거나 프로그래밍 방식으로 새 KMS 키를 생성하지만 키 정책을 제공하지 않는 경우 이와 같은 정책 문이 키 정책 문서에 포함됩니다.  
에 대한 액세스를 허용하는 문이 있는 키 정책 문서를 AWS 계정 사용하면 [계정의 IAM 정책이 KMS 키에 대한 액세스를 허용할 수 있습니다](key-policy-default.md#key-policy-default-allow-root-enable-iam). 즉 이 계정의 사용자와 역할은 키 정책 문서에 보안 주체로 명시되지 않은 경우에도 KMS 키에 액세스할 수 있습니다. 보안 주체로 AWS 계정 나열된 모든의 모든 [IAM 정책을 검사](determining-access-iam-policies.md)하여이 KMS 키에 대한 액세스를 허용하는지 확인합니다.

**Example 정책문 2**  

```
{
  "Sid": "Allow access for Key Administrators",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/KMSKeyAdmins"},
  "Action": [
    "kms:Describe*",
    "kms:Put*",
    "kms:Create*",
    "kms:Update*",
    "kms:Enable*",
    "kms:Revoke*",
    "kms:List*",
    "kms:Disable*",
    "kms:Get*",
    "kms:Delete*",
    "kms:ScheduleKeyDeletion",
    "kms:CancelKeyDeletion"
  ],
  "Resource": "*"
}
```
정책 설명 2에서는 AWS 계정 111122223333에서 KMSKeyAdmins라는 IAM 역할을 `arn:aws:iam::111122223333:role/KMSKeyAdmins` 참조합니다. 이 역할을 수임할 권한이 있는 사용자는 KMS 키 관리를 위한 관리 작업인 정책 문에 나열된 작업을 수행할 수 있습니다.

**Example 정책문 3**  

```
{
  "Sid": "Allow use of the key",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:DescribeKey",
    "kms:GenerateDataKey*",
    "kms:Encrypt",
    "kms:ReEncrypt*",
    "kms:Decrypt"
  ],
  "Resource": "*"
}
```
정책 설명 3에서는 EncryptionApp in AWS 계정 111122223333이라는 IAM 역할을 `arn:aws:iam::111122223333:role/EncryptionApp` 참조합니다. 이 역할을 맡을 권한이 있는 보안 주체는 대칭 암호화 KMS 키에 대한 [암호화 작업](kms-cryptography.md#cryptographic-operations)을 포함하여 정책 문에 나열된 작업을 수행할 수 있습니다.

**Example 정책문 4**  

```
{
  "Sid": "Allow attachment of persistent resources",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"},
  "Action": [
    "kms:ListGrants",
    "kms:CreateGrant",
    "kms:RevokeGrant"
  ],
  "Resource": "*",
  "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
```
정책 설명 4에서는 EncryptionApp in AWS 계정 111122223333이라는 IAM 역할을 `arn:aws:iam::111122223333:role/EncryptionApp` 참조합니다. 이 역할을 맡을 수 있는 권한을 지닌 보안 주체는 정책 문에 수록된 작업을 수행할 수 있습니다. **예제 정책문 3**에서 허용된 작업과 결합된 이러한 작업은 [AWS KMS와 통합되는 대부분의AWS 서비스](service-integration.md), 특히 [권한 부여](grants.md)를 사용하는 서비스에 KMS 키 사용을 위임하는 데 필요한 작업입니다. `Condition` 요소의 [kms:GrantIsForAWSResource](conditions-kms.md#conditions-kms-grant-is-for-aws-resource) 값은 위임이 AWS KMS 와 통합되고 권한 부여를 사용하는 AWS 서비스인 경우에만 위임이 허용되도록 합니다.

키 정책 문서에서 보안 주체를 지정할 수 있는 모든 다양한 방법을 알아보려면 *IAM 사용 설명서*의 [보안 주체 지정](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal_specifying)을 참조하십시오.

 AWS KMS 키 정책에 대한 자세한 내용은 섹션을 참조하세요[의 키 정책 AWS KMS](key-policies.md).

# IAM 정책 검사
<a name="determining-access-iam-policies"></a>

키 정책 및 권한 부여 외에도 [IAM 정책](iam-policies.md)을 사용하여 KMS 키에 대한 액세스를 허용할 수도 있습니다. IAM 정책과 키 정책이 상호 작용하는 방식에 대한 자세한 내용은 [AWS KMS 권한 문제 해결](policy-evaluation.md) 단원을 참조하십시오.

현재 어떤 보안 주체가 IAM 정책을 통해 KMS 키에 액세스할 수 있는지 알아보기 위해, 브라우저 기반의 [IAM 정책 시뮬레이터](https://policysim.aws.amazon.com/) 도구를 사용하거나 IAM API에 요청을 제출할 수 있습니다.

**Contents**
+ [IAM 정책 시뮬레이터로 IAM 정책 검사](#determining-access-iam-policy-simulator)
+ [IAM API로 IAM 정책 검사](#determining-access-iam-api)

## IAM 정책 시뮬레이터로 IAM 정책 검사
<a name="determining-access-iam-policy-simulator"></a>

IAM 정책 시뮬레이터에서 어떤 보안 주체가 IAM 정책을 통해 KMS 키에 액세스할 수 있는지 알아볼 수 있습니다.

**IAM 정책 시뮬레이터를 사용해 KMS 키에 대한 액세스를 파악하려면**

1. 에 로그인 AWS Management Console 한 다음에서 IAM 정책 시뮬레이터를 엽니다[https://policysim.aws.amazon.com/](https://policysim.aws.amazon.com/).

1. **사용자, 그룹 및 역할(Users, Groups, and Roles)** 창에서 정책을 시뮬레이션할 사용자, 그룹 또는 역할을 선택합니다.

1. (선택 사항) 시뮬레이션을 생략할 정책 옆 확인란의 선택을 취소합니다. 모든 정책을 시뮬레이션하려면 모든 정책을 선택해 둡니다.

1. [**Policy Simulator**] 창에서 다음과 같이 실행합니다.

   1. [**Select service**]에서 [**Key Management Service**]를 선택합니다.

   1. 특정 AWS KMS 작업을 시뮬레이션하려면 **작업 선택**에서 시뮬레이션할 작업을 선택합니다. 모든 AWS KMS 작업을 시뮬레이션하려면 **모두 선택을** 선택합니다.

1. (선택 사항) 정책 시뮬레이터는 기본적으로 모든 KMS 키에 대한 액세스를 시뮬레이션합니다. 특정 KMS 키에 대한 액세스를 시뮬레이션하려면 **시뮬레이션 설정(Simulation Settings)**을 선택한 후 시뮬레이션할 KMS 키의 Amazon 리소스 이름(ARN)을 입력합니다.

1. **Run Simulation(시뮬레이션 실행)**을 선택합니다.

[**Results**] 섹션에서 시뮬레이션 결과를 볼 수 있습니다. AWS 계정의 모든 사용자, 그룹, 역할에 대해 2\$16단계를 반복합니다.

## IAM API로 IAM 정책 검사
<a name="determining-access-iam-api"></a>

IAM API를 사용해 IAM 정책을 프로그래밍 방식으로 검사할 수 있습니다. 다음 절차는 이 방법의 개요를 제공합니다.

1. 키 정책에 보안 주체로 AWS 계정 나열된 각에 대해(즉, 형식으로 지정된 각 [AWS 계정 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts): `"Principal": {"AWS": "arn:aws:iam::111122223333:root"}`) IAM API의 [ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html) 및 [ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) 작업을 사용하여 계정의 모든 사용자와 역할을 가져옵니다.

1. 목록에 있는 각 사용자 및 역할에 대해 IAM API에서 [SimulatePrincipalPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html) 작업을 사용하여 다음 파라미터를 전달합니다.
   + `PolicySourceArn`에 대해, 목록에서 사용자나 역할의 Amazon 리소스 이름(ARN)을 지정합니다. `SimulatePrincipalPolicy` 요청별로 한 `PolicySourceArn`만 지정할 수 있으므로, 이 작업을 목록의 각 사용자 및 역할마다 한 번씩 여러 차례 호출해야 합니다.
   + `ActionNames` 목록에서 시뮬레이션할 모든 AWS KMS API 작업을 지정합니다. 모든 AWS KMS API 작업을 시뮬레이션하려면를 사용합니다`kms:*`. 개별 AWS KMS API 작업을 테스트하려면 각 API 작업 앞에 "`kms:`", 예: "`kms:ListKeys`"를 붙입니다. AWS KMS API 작업의 목록을 보려면 *AWS Key Management Service API 참조*의 [작업](https://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html)을 참조하세요.
   + (선택 사항) 사용자나 역할이 특정 KMS 키에 액세스할 수 있는지 판단하려면 `ResourceArns` 파라미터를 이용해 KMS 키의 Amazon 리소스 이름(ARN) 목록을 지정합니다. 사용자나 역할이 모든 KMS 키에 액세스할 수 있는지 판단하기 위해 `ResourceArns` 파라미터를 생략하세요.

IAM은 각각의 `SimulatePrincipalPolicy` 요청에 대해 `allowed`, `explicitDeny`, 또는 `implicitDeny`의 평가 결정으로 응답합니다. 의 평가 결정이 포함된 각 응답`allowed`에 대해 응답에는 허용되는 특정 AWS KMS API 작업의 이름이 포함됩니다. 평가에서 사용된 KMS 키의 ARN도 포함되어 있습니다.

# 권한 부여 검사
<a name="determining-access-grants"></a>

권한 부여는 사용자 또는와 통합된 AWS 서비스가 KMS 키를 사용할 AWS KMS 수 있는 방법과 시기를 지정하는 데 사용할 수 있는 권한을 지정하는 고급 메커니즘입니다. 권한 부여는 KMS 키에 연결되며, 각 권한 부여에는 KMS 키를 사용할 권한을 받는 보안 주체, 허용되는 작업 목록이 포함됩니다. 권한 부여는 키 정책의 대안으로, 특정한 사용 사례에 유용합니다. 자세한 내용은 [의 권한 부여 AWS KMS](grants.md) 단원을 참조하십시오.

KMS 키에 대한 권한 부여 목록을 가져오려면 AWS KMS [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) 작업을 사용합니다. KMS 키에 대한 권한 부여를 검사하여 현재 이러한 권한 부여를 통해 KMS 키를 사용할 권한이 있는 사람 또는 항목을 파악할 수 있습니다. 예를 들어, 다음은 AWS CLI에서 [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) 명령으로부터 얻은 권한 부여의 JSON 표현입니다.

```
{"Grants": [{
  "Operations": ["Decrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "0d8aa621-43ef-4657-b29c-3752c41dc132",
  "RetiringPrincipal": "arn:aws:iam::123456789012:root",
  "GranteePrincipal": "arn:aws:sts::111122223333:assumed-role/aws:ec2-infrastructure/i-5d476fab",
  "GrantId": "dc716f53c93acacf291b1540de3e5a232b76256c83b2ecb22cdefa26576a2d3e",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151834E9,
  "Constraints": {"EncryptionContextSubset": {"aws:ebs:id": "vol-5cccfb4e"}}
}]}
```

KMS 키를 사용할 권한이 있는 사람이나 항목을 알아보려면 `"GranteePrincipal"` 요소를 확인하십시오. 앞의 예에서 피부여자 보안 주체는 EC2 인스턴스 i-5d476fab와 연결된 위임된 역할 사용자입니다. EC2 인프라는 이 역할을 사용해 암호화된 EBS 볼륨 vol-5cccfb4e를 인스턴스에 연결합니다. 이 경우, 사용자가 이전에 이 KMS 키로 보호 받는 암호화된 EBS 볼륨을 생성했기 때문에 EC2 인프라 역할은 KMS 키를 사용할 권한이 있습니다. 그리고 사용자는 EC2 인스턴스에 볼륨을 연결합니다.

다음은 AWS CLI에서 [list-grants](https://docs.aws.amazon.com/cli/latest/reference/kms/list-grants.html) 명령으로부터 얻은 권한 부여의 또 다른 JSON 표현 예시입니다. 다음 예제에서 피부여자 보안 주체는 또 다른 보안 주체입니다 AWS 계정.

```
{"Grants": [{
  "Operations": ["Encrypt"],
  "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
  "Name": "",
  "GranteePrincipal": "arn:aws:iam::444455556666:root",
  "GrantId": "f271e8328717f8bde5d03f4981f06a6b3fc18bcae2da12ac38bd9186e7925d11",
  "IssuingAccount": "arn:aws:iam::111122223333:root",
  "CreationDate": 1.444151269E9
}]}
```

# 암호화 컨텍스트
<a name="encrypt_context"></a>

**참고**  
[비대칭 KMS 키](symmetric-asymmetric.md) 또는 [HMAC KMS 키](hmac.md)를 사용하여 암호화 작업에서 암호화 컨텍스트를 지정할 수 없습니다. 비대칭 알고리즘 및 MAC 알고리즘은 암호화 컨텍스트를 지원하지 않습니다.

[대칭 암호화 KMS 키를](symm-asymm-choose-key-spec.md#symmetric-cmks) 사용하는 모든 AWS KMS [암호화 작업은](kms-cryptography.md#cryptographic-operations) 데이터에 대한 추가 컨텍스트 정보를 포함할 수 있는 비밀이 아닌 키-값 페어의 선택적 세트인 *암호화* 컨텍스트를 수락합니다. 의 `Encrypt` 작업에 암호화 컨텍스트를 삽입 AWS KMS 하여 AWS KMS API 복호화 호출의 권한 부여 및 감사 가능성을 향상시킬 수 있습니다.는 암호화 컨텍스트를 추가 인증 데이터(AAD)로 AWS KMS 사용하여 인증된 암호화를 지원합니다. 암호화 컨텍스트는 사이퍼텍스트에 암호적으로 바인딩되므로 데이터를 복호화하는 데 동일한 암호화 컨텍스트가 필요합니다.

암호화 컨텍스트는 암호가 아니며 암호화되지 않습니다. [AWS CloudTrail 로그](logging-using-cloudtrail.md)에 일반 텍스트로 표시되므로 암호화 작업을 식별하고 분류하는 데 사용할 수 있습니다. 암호화 컨텍스트에 민감한 정보가 포함되어서는 안 됩니다. 암호화 컨텍스트가 암호화 또는 해독되는 데이터를 설명하는 것이 좋습니다. 예를 들어 파일을 암호화하는 경우, 파일 경로의 일부를 암호화 컨텍스트로 사용할 수 있습니다.

```
"encryptionContext": {
    "department": "10103.0"
}
```

예를 들어 [Amazon Elastic Block Store](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)(Amazon EBS) [CreateSnapshot](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSnapshot.html) 작업으로 생성된 볼륨 및 스냅샷을 암호화할 때 Amazon EBS는 볼륨 ID를 암호화 컨텍스트 값으로 사용합니다.

```
"encryptionContext": {
  "aws:ebs:id": "vol-abcde12345abc1234"
}
```

암호화 컨텍스트를 사용하여 계정 AWS KMS keys 의에 대한 액세스를 구체화하거나 제한할 수도 있습니다. 암호화 컨텍스트를 [권한 부여의 제약 조건으로](grants.md) 그리고 *[정책문의 조건](policy-conditions.md)*으로 사용할 수 있습니다. 암호화 컨텍스트 키와 그 값은 `aws`를 포함하는 임의의 문자열이 될 수 있습니다. 이 값들은 [aws:cloudformation:stack-name](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-resource-tags.html) 같은 [AWS 생성 태그](https://docs.aws.amazon.com/tag-editor/latest/userguide/best-practices-and-strats.html#tag-conventions)와 대조됩니다. 자세한 내용은 [kms:EncryptionContext:*context-key*](conditions-kms.md#conditions-kms-encryption-context) 섹션을 참조하세요.

암호화 컨텍스트를 사용하여 암호화된 데이터의 무결성을 보호하는 방법을 알아보려면 AWS 보안 블로그[의 AWS Key Management Service 및 EncryptionContext를 사용하여 암호화된 데이터의 무결성을 보호하는 방법 게시물](https://aws.amazon.com/blogs/security/how-to-protect-the-integrity-of-your-encrypted-data-by-using-aws-key-management-service-and-encryptioncontext/)을 참조하세요.

## 암호화 컨텍스트 규칙
<a name="encryption-context-rules"></a>

AWS KMS 는 암호화 컨텍스트 키 및 값에 대해 다음 규칙을 적용합니다.
+ 암호화 컨텍스트 쌍의 키와 값은 단순 리터럴 문자열이어야 합니다. 정수 또는 부동 소수점과 같은 다른 형식을 사용할 경우 AWS KMS 는 이를 문자열로 해석합니다.
+ 암호화 컨텍스트의 키와 값에는 유니코드 문자가 포함될 수 있습니다. 암호화 컨텍스트에 키 정책 또는 IAM 정책에서 허용되지 않는 문자가 포함된 경우 [`kms:EncryptionContext:context-key`](conditions-kms.md#conditions-kms-encryption-context) 및 [`kms:EncryptionContextKeys`](conditions-kms.md#conditions-kms-encryption-context-keys)와 같은 정책 조건 키에 암호화 컨텍스트를 지정할 수 없습니다. 키 정책 문서 규칙에 대한 자세한 내용은 [키 정책 형식](key-policy-overview.md#key-policy-format) 섹션을 참조하세요. IAM 정책 문서 규칙에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 이름 요구 사항](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html#reference_iam-quotas-names) 섹션을 참조하세요.

## 정책의 암호화 컨텍스트
<a name="encryption-context-authorization"></a>

암호화 컨텍스트는 주로 무결성 및 신뢰성을 확인하는 데 사용됩니다. 그러나 암호화 컨텍스트를 사용하여 키 정책 및 IAM 정책에서 대칭 암호화 AWS KMS keys 에 대한 액세스를 제어할 수도 있습니다.

[kms:EncryptionContext:](conditions-kms.md#conditions-kms-encryption-context) 및 [kms:EncryptionContextKeys](conditions-kms.md#conditions-kms-encryption-context) 조건 키는 요청에 특정 암호화 컨텍스트 키 또는 키-값 페어가 포함된 경우에만 권한을 허용(또는 거부)합니다.

예를 들어 다음 키 정책 문은 `RoleForExampleApp` 역할이 `Decrypt` 작업에 KMS 키를 사용하도록 허용합니다. 이 정책 문은 `kms:EncryptionContext:context-key` 조건 키를 사용하여 요청의 암호화 컨텍스트가 `AppName:ExampleApp` 암호화 컨텍스트 쌍을 포함하는 경우에만 이 권한을 허용합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp"
  },
  "Action": "kms:Decrypt",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:EncryptionContext:AppName": "ExampleApp"
    }
  }
}
```

이러한 암호화 컨텍스트 키에 대한 자세한 내용은 [에 대한 조건 키 AWS KMS](policy-conditions.md) 섹션을 참조하세요.

## 권한 부여의 암호화 컨텍스트
<a name="encryption-context-grants"></a>

[권한 부여를 생성할](grants.md) 때 [권한 부여 권한에 대한 조건을 설정하는 권한 부여 제약 조건을](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html) 포함할 수 있습니다.는 두 개의 권한 부여 제약 조건인 `EncryptionContextEquals` 및를 AWS KMS 지원하며`EncryptionContextSubset`, 둘 다 암호화 작업에 대한 요청에 [암호화 컨텍스트](#encrypt_context)를 포함합니다. 이러한 권한 부여 제약 조건을 사용할 때 암호화 작업에 대한 요청의 암호화 컨텍스트가 권한 부여 제약 조건의 요구 사항을 충족하는 경우에만 권한이 유효합니다.

예를 들어, [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 작업을 허용하는 권한 부여에 `EncryptionContextEquals` 권한 부여 제약 조건을 추가할 수 있습니다. 이 제약 조건에서 권한 부여는 요청의 암호화 컨텍스트가 권한 부여 제약 조건의 암호화 컨텍스트와 대소문자 구분이 일치하는 경우에만 작업을 허용합니다.

```
$ aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:user/exampleUser \
    --retiring-principal arn:aws:iam::111122223333:role/adminRole \
    --operations GenerateDataKey \
    --constraints EncryptionContextEquals={Purpose=Test}
```

피부여자 보안 주체의 다음과 같은 요청은 `EncryptionContextEquals` 제약 조건을 충족합니다.

```
$ aws kms generate-data-key \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --key-spec AES_256 \
    --encryption-context Purpose=Test
```

권한 부여 제약 조건에 대한 자세한 내용은 [권한 부여 제약 사용](create-grant-overview.md#grant-constraints) 섹션을 참조하세요. 권한 부여에 대한 자세한 내용은 [의 권한 부여 AWS KMS](grants.md) 섹션을 참조하세요.

## 암호화 컨텍스트 로깅
<a name="encryption-context-auditing"></a>

AWS KMS 는 AWS CloudTrail 를 사용하여 암호화 컨텍스트를 로깅하므로 액세스한 KMS 키와 데이터를 확인할 수 있습니다. 이 로그 항목은 로그 항목에서 암호화 컨텍스트에서 참조한 특정 데이터를 암호화하거나 해독하기 위해 정확히 어떤 KMS 키가 사용되었는지 보여줍니다.

**중요**  
암호화 컨텍스트가 로깅되기 때문에 민감한 정보가 포함될 수 없습니다.

## 암호화 컨텍스트 저장
<a name="encryption-context-storing"></a>

[https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 또는 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) 작업 호출 시 암호화 컨텍스트 사용을 간소화하기 위해 암호화된 데이터와 함께 암호화 컨텍스트를 저장할 수 있습니다. 암호화 또는 해독을 위해 필요할 때 전체 암호화 컨텍스트를 만드는 데 도움이 되는 암호화 컨텍스트만 저장하는 것이 좋습니다.

예를 들어 암호화 컨텍스트가 파일의 정규화된 경로인 경우 해당 경로의 일부만 암호화된 파일 내용과 함께 저장합니다. 그런 다음 전체 암호화 컨텍스트가 필요할 때 저장된 조각으로부터 다시 구성합니다. 파일 이름을 변경하거나 다른 위치로 이동하는 등 파일을 변조하면 암호화 컨텍스트 값이 변경되고 해독 요청이 실패합니다.

# 권한 테스트
<a name="testing-permissions"></a>

를 사용하려면 API 요청을 인증하는 데 사용할 AWS 수 있는 자격 증명이 AWS KMS있어야 합니다. 이러한 보안 인증 정보는 KMS 키 및 별칭에 액세스할 수 있는 권한을 포함해야 합니다. 권한은 키 정책, IAM 정책, 권한 부여, 크로스 계정 액세스 제어에 따라 결정됩니다. KMS 키에 대한 액세스를 제어하는 것 외에도 CloudHSM 및 사용자 지정 키 스토어에 대한 액세스를 제어할 수 있습니다.

`DryRun` API 파라미터를 지정하여 AWS KMS 키를 사용하는 데 필요한 권한이 있는지 확인할 수 있습니다. `DryRun`를 사용하여 AWS KMS API 호출의 요청 파라미터가 올바르게 지정되었는지 확인할 수도 있습니다.

**Topics**
+ [DryRun 파라미터는 무엇인가요?](#what-is-dryrun)
+ [API를 통해 DryRun 지정](#dryrun-api)

## DryRun 파라미터는 무엇인가요?
<a name="what-is-dryrun"></a>

 `DryRun`은 AWS KMS API 호출이 성공하는지 확인하기 위해 지정하는 선택적 API 파라미터입니다. 실제로 AWS KMS에 호출하기 전에 API 호출을 테스트하는 데 `DryRun`을 사용합니다. 다음을 확인할 수 있습니다.
+ 사용자에게 AWS KMS 키를 사용하는 데 필요한 권한이 있는지 확인할 수 있습니다.
+ 호출에서 파라미터를 올바르게 지정했는지 확인할 수 있습니다.

AWS KMS 는 특정 API 작업에서 `DryRun` 파라미터 사용을 지원합니다.
+ [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)
+ [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html)
+ [암호화](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
+ [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)
+ [GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)
+ [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
+ [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)
+ [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)
+ [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)
+ [RevokeGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)
+ [Sign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)
+ [Verify](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)
+ [VerifyMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html)

`DryRun` 파라미터를 사용하면 요금이 부과되며 표준 API 요청으로 요금이 청구됩니다. AWS KMS 요금에 대한 자세한 내용은 [AWS Key Management Service 요금을](https://aws.amazon.com/kms/pricing/) 참조하세요.

 `DryRun` 파라미터를 사용하는 모든 API 요청은 API의 요청 할당량에 적용되며, API 요청 할당량을 초과할 경우 스로틀링 예외가 발생할 수 있습니다. 예를 들어, `DryRun`이 있거나 `DryRun` 없이 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)를 호출하면 동일한 암호화 작업 할당량으로 간주됩니다. 자세한 내용은 [AWS KMS 요청 제한](throttling.md) 섹션을 참조하세요.

 AWS KMS API 작업에 대한 모든 호출은 이벤트로 캡처되고 AWS CloudTrail 로그에 기록됩니다. `DryRun` 파라미터를 지정하는 모든 작업의 출력은 CloudTrail 로그에 표시됩니다. 자세한 내용은 [를 사용하여 AWS KMS API 호출 로깅 AWS CloudTrail](logging-using-cloudtrail.md) 단원을 참조하십시오.

## API를 통해 DryRun 지정
<a name="dryrun-api"></a>

를 사용하려면 `—dry-run` 파라미터를 지원하는 명령 및 AWS KMS API 호출에서 AWS CLI 파라미터를 `DryRun`지정합니다. 이렇게 하면 AWS KMS 가 호출이 성공할지 확인합니다.를 사용하는 AWS KMS 호출`DryRun`은 항상 실패하고 호출이 실패한 이유에 대한 정보가 포함된 메시지를 반환합니다. 메시지에는 다음과 같은 예외 사항이 포함될 수 있습니다.
+ `DryRunOperationException` ‐ `DryRun`이 지정되지 않으면 요청이 성공합니다.
+ `ValidationException`‐ 잘못된 API 파라미터를 지정하여 요청이 실패했습니다.
+ `AccessDeniedException`‐ KMS 리소스에 대해 지정된 API 작업을 수행할 권한이 없습니다.

예를 들어 다음 명령은 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html) 작업을 사용하고 `keyUserRole` 역할을 수임할 권한이 있는 사용자가 지정된 [대칭 KMS 키](symm-asymm-choose-key-spec.md#symmetric-cmks)에 대해 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 작업을 호출할 수 있도록 허용하는 권한 부여를 생성합니다. `DryRun` 파라미터가 지정되었습니다.

```
$  aws kms create-grant \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \
    --operations Decrypt \
    --dry-run
```

# AWS KMS 권한 문제 해결
<a name="policy-evaluation"></a><a name="security_iam_troubleshoot"></a>

KMS 키에 대한 액세스 권한을 부여할 때는 다음을 AWS KMS 평가합니다.
+ KMS 키에 연결된 [키 정책](determining-access-key-policy.md). 키 정책은 항상 KMS 키를 소유한 AWS 계정 및 리전에 정의됩니다.
+ 요청을 수행하는 사용자 또는 역할에 연결된 모든 [IAM 정책](determining-access-iam-policies.md)입니다. 보안 주체의 KMS 키 사용을 제어하는 IAM 정책은 항상 해당 보안 주체의 AWS 계정입니다.
+ KMS 키에 적용되는 모든 [권한 부여](determining-access-grants.md)
+ KMS 키를 사용하라는 요청에 적용될 수 있는 다른 유형의 정책(예:[AWS Organizations 서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_type-auth.html#orgs_manage_policies_scp) 및 [VPC 엔드포인트 정책](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)). 이러한 정책은 선택 사항이며 기본적으로 모든 작업을 허용하지만 보안 주체에 부여된 권한을 제한하는 데 사용할 수 있습니다.

AWS KMS 는 이러한 정책 메커니즘을 함께 평가하여 KMS 키에 대한 액세스가 허용 또는 거부되는지 여부를 결정합니다. 이렇게 하려면 다음 순서도에 표시된 것과 유사한 프로세스를 AWS KMS 사용합니다. 다음 흐름 차트에는 정책 평가 프로세스가 시각적으로 표시됩니다.

![\[정책 평가 프로세스를 보여 주는 흐름 차트\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/updated-kms-authz-diagram.png)


이 흐름 차트는 두 부분으로 나뉩니다. 각 부분은 차례로 표시되지만 대개 동시에 평가됩니다.
+ *권한 부여 사용*에서는 해당 키 정책, IAM 정책, 권한 부여 및 기타 적용 가능한 정책을 기준으로 KMS 키 사용이 허용되는지 여부를 확인합니다.
+ *키 신뢰*에서는 사용이 허용된 KMS 키를 신뢰해야 하는지 여부를 결정합니다. 일반적으로의 리소스를 신뢰합니다 AWS 계정. 그러나 계정의 권한 부여 또는 IAM 정책이 KMS 키를 사용하도록 허용하는 AWS 계정 경우 다른에서 KMS 키를 사용하는 것에 대해 확신을 가질 수도 있습니다.

이 흐름 차트를 통해 호출자의 KMS 키 사용 권한이 부여되거나 거부된 이유를 확인할 수 있습니다. 사용자의 정책과 권한을 평가할 수도 있습니다. 예를 들어 이 흐름 차트에서는 키 정책, IAM 정책 또는 권한 부여에 명시적 `DENY` 문이 있거나 명시적 `ALLOW` 문이 없어서 호출자의 액세스가 거부될 수 있음을 보여줍니다.

이 흐름 차트를 사용하여 몇 가지 일반적인 권한 시나리오를 설명하겠습니다.

**Topics**
+ [예제 1: 사용자의에서 KMS 키에 대한 액세스가 거부됨 AWS 계정](#example-no-iam)
+ [예제 2: 사용자가 다른에서 KMS 키를 사용할 권한이 있는 역할을 맡음 AWS 계정](#example-cross-acct)

## 예제 1: 사용자의에서 KMS 키에 대한 액세스가 거부됨 AWS 계정
<a name="example-no-iam"></a>

Alice는 111122223333 AWS 계정의 IAM 사용자입니다. Alice는 동일한 AWS 계정의 KMS 키에 액세스할 수 없습니다. Alice가 KMS 키를 사용할 수 없는 이유는 무엇입니까?

이 경우 Alice는 본인에게 필요한 권한을 제공하는 권한 부여, IAM 정책 또는 키 정책이 없으므로 KMS 키에 대한 액세스가 거부됩니다. KMS 키의 키 정책은 AWS 계정 가 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 허용하지만 IAM 정책은 Alice에게 KMS 키를 사용할 수 있는 권한을 부여하지 않습니다.

![\[정책 평가 프로세스를 보여 주는 흐름 차트\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/kms-auth-flow-Alice.png)


이 예제와 관련된 정책을 살펴보겠습니다.
+ Alice가 사용할 KMS 키에는 [기본 키 정책](key-policy-default.md)이 있습니다. 이 정책은 KMS 키를 소유한 [AWS 계정](key-policy-default.md#key-policy-default-allow-root-enable-iam)이 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어하도록 허용합니다. 이 키 정책은 순서도에 있는 *키 정책으로 인해 호출자의 계정이 IAM 정책을 사용하여 키에 대한 액세스를 제어할 수 있습니까?* 조건을 충족합니다.

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Id" : "key-test-1",
    "Statement" : [ {
      "Sid" : "DelegateToIAMPolicies",
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "arn:aws:iam::111122223333:root"
      },
      "Action" : "kms:*",
      "Resource" : "*"
    } ]
  }
  ```

------
+ 그러나 Alice에게는 키 정책, IAM 정책이 없고 KMS 키사용 권한도 부여되지 않았습니다. 따라서 Alice가 KMS 키를 사용할 수 있는 권한이 거부됩니다.

## 예제 2: 사용자가 다른에서 KMS 키를 사용할 권한이 있는 역할을 맡음 AWS 계정
<a name="example-cross-acct"></a>

Bob은 계정 1(111122223333)의 사용자입니다. Bob은 [암호화 작업](kms-cryptography.md#cryptographic-operations)에서 계정 2(444455556666)의 KMS 키를 사용할 수 있습니다. 이렇게 할 수 있는 이유는 무엇입니까?

**작은 정보**  
교차 계정 권한을 평가할 때는 키 정책이 KMS 키의 계정에 지정되어 있다는 점을 명심하십시오. IAM 정책은 호출자가 다른 계정에 속하더라도 호출자의 계정에 지정됩니다. KMS 키에 대한 교차 계정 액세스를 제공하는 방법에 대한 자세한 내용은 [다른 계정의 사용자가 KMS를 사용하도록 허용](key-policy-modifying-external-accounts.md) 단원을 참조하십시오.
+ 계정 2의 KMS 키에 대한 키 정책에 따라 계정 2는 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어할 수 있습니다.
+ 계정 2의 KMS 키에 대한 키 정책을 통해 계정 1이 암호화 작업에서 KMS 키를 사용할 수 있습니다. 그러나 계정 1은 IAM 정책을 사용하여 KMS 키에 액세스할 수 있는 권한을 해당 보안 주체에 제공해야 합니다.
+ 계정 1의 IAM 정책은 `Engineering` 역할이 암호화 작업에 계정 2의 KMS 키를 사용하도록 허용합니다.
+ 계정 1의 사용자인 Bob은 `Engineering` 역할을 맡을 수 있는 권한을 가집니다.
+ Bob은 이 KMS 키를 신뢰할 수 있습니다. 이 키가 그의 계정에 없는 경우에도 그의 계정에 있는 IAM 정책이 이 KMS 키를 사용할 수 있는 명시적 권한을 부여하기 때문입니다.

![\[정책 평가 프로세스를 보여 주는 흐름 차트\]](http://docs.aws.amazon.com/ko_kr/kms/latest/developerguide/images/kms-auth-flow-Bob.png)


계정 1의 사용자인 Bob이 계정 2로 KMS 키를 사용할 수 있도록 허용하는 정책을 살펴보겠습니다.
+ KMS 키의 키 정책에 따라 계정 2(444455556666, KMS 키를 소유 계정)가 IAM 정책을 사용하여 KMS 키에 대한 액세스를 제어할 수 있습니다. 또한 이 키 정책을 통해 계정 1(111122223333)이 정책문의 `Action` 요소에 지정된 암호화 작업에 KMS 키를 사용할 수 있습니다. 그러나 계정 1이 KMS 키 액세스 권한을 보안 주체에 제공하는 IAM 정책을 정의할 때까지는 계정 1의 어떤 사용자도 계정 2로 KMS 키를 사용할 수 없습니다.

  이 흐름 차트에서 계정 2의 이 키 정책은 *키 정책에서 호출자의 계정이 IAM 정책을 사용하여 키 액세스를 제어하도록 허용하는가?* 조건을 충족합니다.

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

****  

  ```
  {
      "Id": "key-policy-acct-2",
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "PermissionUseIAMpolicies",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::444455556666:root"
              },
              "Action": "kms:*",
              "Resource": "*"
          },
          {
              "Sid": "AllowAccount1UseThisKMSKeys",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::111122223333:root"
              },
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------
+ 호출자 AWS 계정 (계정 1, 111122223333)의 IAM 정책은 보안 주체에게 계정 2(444455556666)의 KMS 키를 사용하여 암호화 작업을 수행할 수 있는 권한을 부여합니다. `Action` 요소는 계정 2의 키 정책이 계정 1에 부여한 것과 동일한 권한을 보안 주체에게 위임합니다. 계정 1의 `Engineering` 역할에 이러한 권한을 부여하기 위해 [이 인라인 정책이 `Engineering` 역할에 포함](https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePolicy.html)됩니다.

  이와 같은 계정 간 IAM 정책은 계정 2의 KMS 키에 대한 키 정책이 KMS 키를 사용할 수 있는 권한을 계정 1에 제공할 때에만 적용됩니다. 또한 계정 1은 키 정책이 계정에 제공한 작업을 수행할 수 있는 권한만 해당 보안 주체에 제공할 수 있습니다.

  이것은 흐름 차트에서 *IAM 정책에서 호출자가 이 작업을 수행하도록 허용하는가?* 조건을 충족합니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo",
                  "kms:GenerateDataKey",
                  "kms:GenerateDataKeyWithoutPlaintext",
                  "kms:DescribeKey"
              ],
              "Resource": [
              "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
              ]
          }
      ]
  }
  ```

------
+ 마지막 필수 요소는 계정 1의 `Engineering` 역할 정의입니다. 역할의 `AssumeRolePolicyDocument`에 따라 Bob은 `Engineering` 역할을 맡을 수 있습니다.

  ```
  {
      "Role": {
          "Arn": "arn:aws:iam::111122223333:role/Engineering",
          "CreateDate": "2019-05-16T00:09:25Z",
          "AssumeRolePolicyDocument": {
              "Version": "2012-10-17",		 	 	 
              "Statement": {
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:user/bob"
                  },
                  "Effect": "Allow",
                  "Action": "sts:AssumeRole"
              }
          },
          "Path": "/",
          "RoleName": "Engineering",
          "RoleId": "AROA4KJY2TU23Y7NK62MV"
      }
  }
  ```

# AWS KMS 액세스 제어 용어집
<a name="access-glossary"></a>

다음 주제에서는 AWS KMS 액세스 제어의 중요한 용어와 개념을 설명합니다.

## Authentication
<a name="permission-concept-authentication"></a>

**인증은 ID를 확인하는 프로세스입니다. 요청을 보내려면 자격 증명을 AWS 사용하여 AWS 에 로그인 AWS KMS해야 합니다.

## 권한 부여
<a name="permission-concept-authorization"></a>

*권한 부여*는 AWS KMS 리소스를 생성, 관리 또는 사용하기 위한 요청을 보낼 수 있는 권한을 제공합니다. 예를 들어 암호화 작업에 KMS 키를 사용할 권한이 있어야 합니다.

 AWS KMS 리소스에 대한 액세스를 제어하려면 [키 정책](key-policies.md), [IAM 정책](iam-policies.md) 및 [권한 부여](grants.md)를 사용합니다. 모든 KMS 키에는 키 정책이 있어야 합니다. 키 정책에서 허용되는 경우 IAM 정책 및 권한 부여를 사용하여 보안 주체에게 KMS 키에 대한 액세스 권한을 부여할 수도 있습니다. 권한 부여를 구체화하기 위해서는 요청 또는 리소스가 지정한 조건을 충족하는 경우에만 액세스를 허용하거나 거부하는 [조건 키](policy-conditions.md)를 사용할 수 있습니다. [다른 AWS 계정](key-policy-modifying-external-accounts.md)에서 신뢰하는 보안 주체에 대한 액세스를 허용할 수도 있습니다.

## ID를 통한 인증
<a name="security_iam_authentication"></a>

인증은 자격 증명 자격 증명을 AWS 사용하여에 로그인하는 방법입니다. AWS 계정 루트 사용자, IAM 사용자 또는 IAM 역할을 수임하여 인증해야 합니다.

 AWS IAM Identity Center (IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 자격 증명으로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In 사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 AWS 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 를 생성할 때 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *theroot 사용자*라는 하나의 로그인 자격 증명으로 AWS 계정시작합니다. 일상적인 태스크에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자 자격 증명이 필요한 작업은 *IAM 사용 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) 섹션을 참조하세요.

### 페더레이션 ID
<a name="security_iam_authentication-federated"></a>

가장 좋은 방법은 인간 사용자에게 자격 증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 서비스 사용하여에 액세스하도록 요구하는 것입니다.

*페더레이션 자격 증명*은 엔터프라이즈 디렉터리, 웹 자격 증명 공급자 또는 자격 증명 소스의 자격 증명을 AWS 서비스 사용하여 Directory Service 에 액세스하는 사용자의 자격 증명입니다. 페더레이션 ID는 임시 자격 증명을 제공하는 역할을 수임합니다.

중앙 집중식 액세스 관리를 위해 AWS IAM Identity Center를 추천합니다. 자세한 정보는 *AWS IAM Identity Center 사용 설명서*의 [What is IAM Identity Center?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 ID입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*의 자격 [증명 공급자와의 페더레이션을 사용하여 임시 자격 증명을 AWS 사용하여에 액세스하도록 인간 사용자에게 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)하기를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 관리 권한을 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

*[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*은 임시 자격 증명을 제공하는 특정 권한이 있는 자격 증명입니다. [사용자에서 IAM 역할(콘솔)로 전환하거나 또는 API 작업을 호출하여 역할을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) 수임할 수 있습니다. AWS CLI AWS 자세한 내용은 *IAM 사용 설명서*의 [역할 수임 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)을 참조하세요.

IAM 역할은 페더레이션 사용자 액세스, 임시 IAM 사용자 권한, 교차 계정 액세스, 교차 서비스 액세스 및 Amazon EC2에서 실행되는 애플리케이션에 유용합니다. 자세한 내용은 *IAM 사용 설명서*의 [교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

## 정책을 사용하여 액세스 관리
<a name="security_iam_access-manage"></a>

정책을 AWS 생성하고 자격 증명 또는 리소스에 연결하여 AWS 에서 액세스를 제어합니다. 정책은 자격 증명 또는 리소스와 연결될 때 권한을 정의합니다.는 보안 주체가 요청할 때 이러한 정책을 AWS 평가합니다. 대부분의 정책은에 JSON 문서 AWS 로 저장됩니다. JSON 정책 문서에 대한 자세한 내용은 *IAM 사용 설명서*의 [JSON 정책 개요](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) 섹션을 참조하세요.

정책을 사용하여 관리자는 어떤 **보안 주체**가 어떤 **리소스**에 대해 어떤 **조건**에서 **작업**을 수행할 수 있는지 정의하여 누가 무엇을 액세스할 수 있는지 지정합니다.

기본적으로 사용자 및 역할에는 어떠한 권한도 없습니다. IAM 관리자는 IAM 정책을 생성하고 사용자가 수임할 수 있는 역할에 추가합니다. IAM 정책은 작업을 수행하기 위해 사용하는 방법과 관계없이 작업에 대한 권한을 정의합니다.

### ID 기반 정책
<a name="security_iam_access-manage-id-based-policies"></a>

ID 기반 정책은 ID(사용자, 사용자 그룹 또는 역할)에 연결하는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. ID 기반 정책을 생성하는 방법을 알아보려면 *IAM 사용 설명서*에서 [고객 관리형 정책으로 사용자 지정 IAM 권한 정의](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하세요.

ID 기반 정책은 *인라인 정책*(단일 ID에 직접 포함) 또는 *관리형 정책*(여러 ID에 연결된 독립 실행형 정책)일 수 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 *IAM 사용 설명서*의 [관리형 정책 및 인라인 정책 중에서 선택](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) 섹션을 참조하세요.

### 리소스 기반 정책
<a name="security_iam_access-manage-resource-based-policies"></a>

 AWS KMS [Ankey 정책은](key-policies.md) KMS 키에 대한 액세스를 제어하는 리소스 기반 정책입니다. 모든 KMS 키에는 키 정책이 있어야 합니다. 다른 인증 메커니즘을 사용하여 KMS 키에 대한 액세스를 허용할 수 있지만 이는 키 정책에서 허용되는 경우에만 가능합니다. (키 정책에서 명시적으로 허용되지 않는 경우에도 IAM 정책을 사용하여 KMS 키에 대한 액세스를 **거부할 수 있습니다.)

리소스 기반 정책은 특정 리소스에 대한 액세스를 제어하기 위하여 리소스(예: KMS 키)에 연결하는 JSON 정책 문서입니다. 리소스 기반 정책은 지정된 보안 주체가 해당 리소스에 대해 어떤 조건에서 어떤 작업을 수행할 수 있는지 정의합니다. 리소스 기반 정책에서는 리소스를 지정하지 않지만 계정, 사용자, 역할, 페더레이션 사용자 또는 같은 보안 주체를 지정해야 합니다 AWS 서비스. 리소스 기반 정책은 리소스를 관리하는 해당 서비스에 있는 인라인 정책입니다. 리소스 기반 정책에서는 AWS 관리형 정책과 같은 IAM의 [`AWSKeyManagementServicePowerUser` 관리형 정책을](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser) 사용할 수 없습니다.

### 기타 정책 유형
<a name="security_iam_access-manage-other-policies"></a>

AWS 는 보다 일반적인 정책 유형에서 부여한 최대 권한을 설정할 수 있는 추가 정책 유형을 지원합니다.
+ **권한 경계** - ID 기반 정책에서 IAM 엔터티에 부여할 수 있는 최대 권한을 설정합니다. 자세한 정보는 *IAM 사용 설명서*의 [IAM 엔터티의 권한 범위](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)를 참조하세요.
+ **서비스 제어 정책(SCP)** - AWS Organizations내 조직 또는 조직 단위에 대한 최대 권한을 지정합니다. 자세한 내용은AWS Organizations 사용 설명서의 [서비스 제어 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)을 참조하세요.**
+ **리소스 제어 정책(RCP)** – 계정의 리소스에 사용할 수 있는 최대 권한을 설정합니다. 자세한 내용은 *AWS Organizations 사용 설명서*의 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)을 참조하세요.
+ **세션 정책** – 역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)을 참조하세요.

### 여러 정책 유형
<a name="security_iam_access-manage-multiple-policies"></a>

여러 정책 유형이 요청에 적용되는 경우, 결과 권한은 이해하기가 더 복잡합니다. 에서 여러 정책 유형이 관련될 때 요청을 허용할지 여부를 AWS 결정하는 방법을 알아보려면 *IAM 사용 설명서*의 [정책 평가 로직](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)을 참조하세요.

## AWS KMS 리소스
<a name="kms-resources-operations"></a>

에서 AWS KMS기본 리소스는 a입니다 AWS KMS key.는 KMS 키에 대한 표시 이름을 제공하는 독립 리소스인 [별칭](kms-alias.md) AWS KMS 도 지원합니다. 일부 AWS KMS 작업을 사용하면 별칭을 사용하여 KMS 키를 식별할 수 있습니다.

KMS 키 또는 별칭의 각 인스턴스에는 표준 형식의 고유한 [Amazon 리소스 이름](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax)(ARN)이 있습니다. AWS KMS 리소스에서 AWS 서비스 이름은 입니다`kms`.
+ **AWS KMS key**

  ARN 형식:

  `arn:AWS partition name:AWS service name:AWS 리전:AWS 계정 ID:key/key ID`

  ARN 예:

  `arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab`
+ **별칭**

  ARN 형식:

  `arn:AWS partition name:AWS service name:AWS 리전:AWS 계정 ID:alias/alias name`

  ARN 예:

  `arn:aws:kms:us-west-2:111122223333:alias/example-alias`

AWS KMS 는 AWS KMS 리소스와 함께 사용할 수 있는 API 작업 세트를 제공합니다. AWS Management Console 및 AWS KMS API 작업에서 KMS 키를 식별하는 방법에 대한 자세한 내용은 섹션을 참조하세요[키 식별자(KeyId)](concepts.md#key-id). AWS KMS 작업 목록은 [AWS Key Management Service API 참조](https://docs.aws.amazon.com/kms/latest/APIReference/)를 참조하세요.