

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

# 권한 부여 생성
<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`가 생성하는 권한 부여는 상위 권한 부여 또는 하위 집합의 작업을 포함해야 하며 권한 부여 제약 조건은 동일하거나 더 엄격해야 합니다.