

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

# 키 정책 생성
<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)을 사용하여 키 정책을 제한하지 않는 한 권한을 허용하는 키 정책문에서 보안 주체를 별표(\*)로 설정하지 마세요. 별표는 다른 정책 문이 명시적으로 거부하지 않는 한 모든 자격 증명에 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"
                }
            }
        }
    ]
}
```

------