

# AWS KMS key 관리
<a name="Overview.Encryption.Keys"></a>

 Amazon RDS 는 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)와 자동으로 통합하여 키 관리를 수행합니다. Amazon RDS 는 봉투 암호화를 사용합니다. 봉투 암호화에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 참조하세요.

두 가지 유형의 AWS KMS 키를 사용하여 DB 인스턴스 를 암호화할 수 있습니다.
+ KMS 키를 완전히 제어하기 위해서는 *고객 관리형 키*를 생성해야 합니다. 고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [고객 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)를 참조하세요.
+  *AWS 관리형 키* 은(는) AWS KMS와 통합된 AWS 서비스가 고객의 계정에서 고객 대신 생성, 관리 및 사용하는 KMS 키입니다. 기본적으로 RDS AWS 관리형 키(`aws/rds`)는 암호화에 사용됩니다. RDS AWS 관리형 키는 관리, 교체 또는 삭제할 수 없습니다. AWS 관리형 키에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [AWS 관리형 키](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)를 참조하십시오.

Amazon RDS 암호화된 DB 인스턴스 에 사용되는 KMS 키를 관리하려면 [AWS KMS 콘솔](https://console.aws.amazon.com/kms), AWS CLI 또는 AWS KMS API에서 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)를 사용합니다. AWS 관리형 또는 고객 관리형 키로 수행한 모든 작업의 감사 로그를 보려면 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)을 사용합니다. 키 교체에 대한 자세한 내용은 [AWS KMS 키 교체](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)를 참조하세요.

## 고객 관리형 키의 사용 권한 부여
<a name="Overview.Encryption.Keys.Authorizing"></a>

RDS 가 암호화 작업에 고객 관리형 키를 사용하는 경우 RDS 리소스를 만들거나 변경하는 사용자를 대신해 작업합니다.

고객 관리형 키를 사용하여 RDS 리소스를 만들려면 고객 관리형 키에서 다음 작업을 직접적으로 호출할 수 있는 권한이 사용자에게 있어야 합니다.
+  `kms:CreateGrant` 
+  `kms:DescribeKey` 

키 정책에서 허용하는 경우 키 정책 또는 IAM 정책에서 이러한 필수 권한을 지정할 수 있습니다.

**중요**  
Amazon RDS와 같은 관리형 서비스에서 AWS KMS 키 정책의 모든 리소스(\$1)에 대해 명시적 거부 문을 사용하는 경우 리소스 소유 계정을 허용하는 조건을 지정해야 합니다. 거부 규칙에 IAM 사용자에 대한 예외가 포함되어 있더라도 이 조건이 없다면 작업이 실패할 수 있습니다.

**작은 정보**  
최소 권한의 원칙을 따르려면 `kms:CreateGrant`에 대한 전체 액세스 권한을 허용하지 마세요. 대신에 [kms:ViaService 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)를 사용하여 AWS 서비스에서 사용자를 대신하여 권한이 부여되는 경우에만 사용자가 KMS 키에 대한 권한을 부여할 수 있도록 허용합니다.

다양한 방법으로 IAM 정책을 더 엄격하게 설정할 수 있습니다. 예를 들어 RDS 에서 생성된 요청에 대해서만 고객 관리형 키를 사용할 수 있도록 허용하고 싶다면 `rds.<region>.amazonaws.com` 값과 함께 [kms:ViaService 조건 키](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)를 사용합니다. 또한 암호화 작업에 대한 고객 관리형 키 사용 조건으로 [Amazon RDS 암호화 컨텍스트](#Overview.Encryption.Keys.encryptioncontext)의 키 또는 값을 사용할 수도 있습니다.

자세한 내용을 알아보려면 **AWS Key Management Service 개발자 안내서의 [다른 계정의 사용자가 KMS 키를 사용하도록 허용](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html) 및 [AWS KMS의 키 정책](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies)을 참조하세요.

## Amazon RDS 암호화 컨텍스트
<a name="Overview.Encryption.Keys.encryptioncontext"></a>

RDS 가 사용자의 KMS 키를 사용하거나 Amazon EBS가 RDS 를 대신하여 KMS 키를 사용하는 경우, 서비스가 [암호화 컨텍스트](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)를 지정합니다. 암호화 컨텍스트는 AWS KMS가 데이터 무결성을 보장하기 위해 사용하는 [추가 인증 데이터](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad)(AAD)입니다. 암호화 작업에 대해 암호화 컨텍스트가 지정되면 서비스가 암호화 해제 작업에 대해 동일한 암호화 컨텍스트를 지정해야 합니다. 그렇지 않으면 암호화 해제가 실패합니다. 암호화 컨텍스트는 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 로그에도 기록되어, 해당 KMS 키가 사용된 이유를 이해하는 데 도움을 줍니다. CloudTrail 로그에 CMK 사용을 설명하는 여러 항목이 포함될 수 있지만, 각 로그 항목의 암호화 컨텍스트는 특히 해당 KMS 키를 사용한 이유를 파악하는 데 도움이 될 수 있습니다.

최소한, 다음 JSON 형식 예에서 보듯이 Amazon RDS 는 항상 암호화 컨텍스트에 DB 인스턴스 ID를 사용합니다.

```
{ "aws:rds:db-id": "db-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }
```

이 암호화 컨텍스트는 KMS 키가 사용된 DB 인스턴스 를 식별하는 데 도움이 될 수 있습니다.

KMS 키가 특정 DB 인스턴스 와 특정 Amazon EBS 볼륨에 사용되는 경우, 다음 JSON 형식 예에서 보듯이 암호화 컨텍스트에 DB 인스턴스 ID와 Amazon EBS 볼륨 ID가 모두 사용됩니다.

```
{
  "aws:rds:db-id": "db-BRG7VYS3SVIFQW7234EJQOM5RQ",
  "aws:ebs:id": "vol-ad8c6542"
}
```