AWS Key Management Service
개발자 안내서

AWS Key Management Service 개념

AWS Key Management Service(AWS KMS)의 기본 용어와 개념, 어떤 상호 작용을 통해 데이터를 보호하는지 알아봅니다.

고객 마스터 키(CMK)

AWS KMS의 기본 리소스는 고객 마스터 키(CMK)입니다. CMK를 사용하여 최대 4KB(4,096바이트)의 데이터를 암호화하고 암호화 해제할 수 있습니다. 일반적으로 AWS KMS 외부에서 데이터를 암호화하기 위해 사용하는 데이터 키를 생성, 암호화 및 암호화 해제하는 데 CMK를 사용합니다. 이러한 전략을 envelope encryption(봉투 암호화)라고 합니다.

CMK는 AWS KMS에서 생성되며 AWS KMS를 암호화되지 않은 상태로 두지 않습니다. CMK를 사용하거나 관리하려면 AWS KMS를 통해 이들에 액세스합니다. 이 전략은 데이터 키와 다릅니다. AWS KMS는 데이터 키를 저장, 관리 또는 추적하지 않습니다. AWS KMS 밖에서 이들을 사용해야 합니다.

AWS 계정에는 고객 관리형 CMK, AWS 관리형 CMK, AWS 소유 CMK 등 3가지 유형의 CMK가 있습니다.

CMK 유형 보기 가능 관리 가능 내 AWS 계정에서만 사용
고객 관리형 CMK
AWS 관리형 CMK 아니요
AWS 소유 CMK 아니요 아니요 아니요

AWS KMS에 통합된 AWS 서비스는 CMK 지원에 있어 차이가 있습니다. 일부 서비스들은 AWS 소유 CMK를 통해 기본적으로 데이터를 암호화합니다. 일부는 계정에서 생성한 AWS 관리형 CMK 하에서 암호화를 수행합니다. 다른 서비스들은 생성한 고객 관리형 CMK를 지정할 수 있도록 허용합니다. 그리고 다른 서비스들은 AWS 소유 CMK의 용이성, AWS 관리형 CMK의 가시성, 고객 관리형 CMK의 제어 기능을 허용하기 위해 모든 유형의 CMK를 지원합니다.

고객 관리형 CMK

고객 관리형 CMK는 사용자가 생성, 소유 및 관리하는 AWS 계정의 CMK입니다. 사용자는 키 정책, IAM 정책 및 권한 부여의 설정 및 유지 관리, 활성화 및 비활성화, 암호화 구성 요소 교체, 태그 추가, CMK를 가리키는 별칭 생성 삭제를 위한 CMK 예약 등을 포함해 이러한 CMK에 대한 완전한 제어 권한을 가집니다.

암호화 작업에서 사용자 관리형 CMK를 사용하고 AWS CloudTrail 로그에서 사용을 감사할 수 있습니다. 뿐만 아니라 AWS KMS에 통합된 다양한 AWS 서비스 덕분에 사용자를 위해 저장 및 관리하는 데이터를 보호하도록 고객 관리형 CMK를 지정할 수 있습니다.

고객 관리형 CMK는 매달 요금이 발생하며, 프리 티어를 초과해서 사용한 만큼 요금이 부과됩니다. 계정의 AWS KMS 제한에 대해 요금이 계산됩니다. 자세한 내용은 AWS Key Management Service 요금제한 단원을 참조하십시오.

AWS 관리형 CMK

AWS 관리형 CMK는 AWS KMS에 통합된 AWS 서비스가 사용자를 대신해 생성, 관리 및 사용하는 계정의 CMK입니다. 사용자는 형식이 aws/service-name인 별칭(예: aws/redshift)으로 AWS 관리형 CMK를 식별할 수 있습니다.

계정에서 AWS 관리형 CMK를 확인하고 키 정책을 확인하며 AWS CloudTrail 로그에서 사용을 감사할 수 있습니다. 하지만 이러한 CMK를 관리하거나 이들의 권한을 변경할 수는 없습니다. 그리고 암호화 작업에서 직접 AWS 관리형 CMK를 사용할 수 없습니다. 즉, 이러한 CMK를 생성하는 서비스는 사용자를 대신해 이들을 사용합니다. AWS 관리형 CMK에 대한 키 정책을 보려면 GetKeyPolicy 작업을 사용합니다. AWS Management 콘솔에서 키 정책을 볼 수 없으며, 어떤 방법으로도 이를 변경할 수 없습니다.

AWS 관리형 CMK에서는 매월 요금을 지불하지 않습니다. 프리 티어를 초과하는 사용에 대해서 요금이 부과될 수 있으며, 일부 AWS 서비스는 이러한 요금을 사용자 대신 부담합니다. 자세한 내용은 서비스 설명서의 암호화 단원을 참조하십시오. AWS 관리형 CMK는 계정의 각 리전에서 CMK 수에 제한을 받지 않지만, 계정에서 보안 주체를 대신해 사용될 때는 요청 속도 제한이 적용됩니다. 자세한 내용은 AWS Key Management Service 요금제한 단원을 참조하십시오.

AWS 소유 CMK

AWS 소유 CMK는 AWS 계정에 없습니다. 이들은 AWS가 여러 AWS 계정에서 사용하기 위해 소유 및 관리하는 CMK 모음의 일부입니다. AWS 서비스는 AWS 소유 CMK를 사용하여 데이터를 보호할 수 있습니다.

사용자는 AWS 소유 CMK를 확인, 관리 또는 사용하거나 사용을 감사할 수 없습니다. 하지만 데이터를 암호화하는 키를 보호하기 위해 어떤 작업을 수행하거나 어떤 프로그램을 변경할 필요가 없습니다.

월별 요금 또는 AWS 소유 CMK의 사용량에 따른 요금이 부과되지 않으며, 계정에서 AWS KMS 제한이 적용되지 않습니다.

데이터 키

데이터 키는 많은 양의 데이터 및 기타 데이터 암호화 키를 포함하여 데이터를 암호화하는 데 사용할 수 있는 암호화 키입니다.

데이터 키의 생성, 암호화 및 해독을 위해 AWS KMS 고객 마스터 키(CMK)를 사용할 수 있습니다. 그러나 AWS KMS는 데이터 키를 저장, 관리 또는 추적하거나 데이터 키로 암호화 작업을 수행하지 않습니다. 따라서 AWS KMS 밖에서 데이터 키를 사용하고 관리해야 합니다.

데이터 키 생성

데이터 키를 생성하려면 GenerateDataKey 작업을 호출합니다. AWS KMS는 지정된 CMK를 사용하여 데이터 키를 생성합니다. 이 작업은 다음 이미지로 데이터 키의 일반 텍스트 사본과 CMK 하에서 암호화된 데이터 키의 사본을 반환합니다.


        데이터 키 생성

또한 AWS KMS는 오직 암호화된 데이터 키만 반환하는 GenerateDataKeyWithoutPlaintext 작업을 지원합니다. 데이터 키를 사용해야 할 때는 AWS KMS에 데이터 키를 해독하도록 요청합니다.

데이터 키로 데이터 암호화

AWS KMS는 데이터 키를 사용해 데이터를 암호화할 수는 없지만, OpenSSL 또는 AWS 암호화 SDK 같은 암호화 라이브러리를 사용하여 KMS 밖에서 데이터 키를 사용할 수 있습니다.

일반 텍스트 데이터 키를 사용하여 데이터를 암호화한 다음에는 가능한 빨리 메모리에서 제거하십시오. 데이터 암호화를 해제하는 데 사용할 수 있도록 암호화된 데이터와 함께 암호화된 데이터 키를 안전하게 저장할 수 있습니다.


        AWS KMS 밖에서 사용자 데이터 암호화

데이터 키로 데이터 해독

데이터 암호화를 해제하려면 해독 작업으로 암호화된 데이터 키를 전달합니다. AWS KMS는 CMK를 사용하여 데이터 키를 암호화 해제한 다음 일반 텍스트 데이터 키를 반환합니다. 일반 텍스트 데이터 키를 사용하여 데이터를 해독한 다음, 가능한 빨리 메모리에서 일반 텍스트 데이터 키를 제거하십시오.

다음 다이어그램은 해독 작업을 사용하여 암호화된 데이터 키를 해독하는 방법을 보여줍니다.


        데이터 키 해독

봉투 암호화

데이터를 암호화하면 데이터가 보호되지만 암호화 키를 보호해야 합니다. 암호화하는 것도 하나의 전략입니다. 봉투 암호화는 데이터 키로 일반 텍스트 데이터를 암호화한 후, 다른 키 아래에서 데이터 키를 암호화하는 방법입니다.

데이터 암호화 키를 다른 암호화 키로 암호화하고 해당 암호화 키를 다른 암호화 키로 암호화할 수도 있습니다. 그러나 궁극적으로는 키와 데이터를 해독할 수 있도록 하나의 키는 일반 텍스트로 남겨둬야 합니다. 이러한 최상위 일반 텍스트 키 암호화 키를 마스터 키라고 합니다.


        봉투 암호화

AWS KMS는 마스터 키를 안전하게 저장 및 관리하여 보호할 수 있도록 도와줍니다. AWS KMS에 저장된 마스터 키, 즉 고객 마스터 키(CMK)는 AWS KMS FIPS 검증 하드웨어 보안 모듈을 암호화되지 않은 상태로 절대 남겨두지 않습니다. AWS KMS CMK를 사용하려면 AWS KMS를 호출해야 합니다.


        키 암호화 키를 여러 개 사용하는 봉투 암호화

봉투 암호화는 여러 가지 장점을 제공합니다.

  • 데이터 키 보호

    데이터 키를 암호화하면 해당 데이터 키의 보안이 암호화에 의해 근본적으로 보호되기 때문에 암호화한 데이터 키의 저장에 대해 고민할 필요가 없습니다. 암호화한 데이터 키를 암호화한 데이터와 함께 안전하게 저장할 수 있습니다.

  • 여러 개의 마스터 키 하에 동일한 데이터 암호화

    암호화 작업, 특히 암호화되는 데이터가 대용량 객체일 경우 긴 시간이 걸릴 수 있습니다. 서로 다른 키로 원시 데이터를 여러 차례 다시 암호화하는 대신, 원시 데이터를 보호하는 데이터 키만 다시 암호화할 수 있습니다.

  • 여러 알고리즘의 강점 결합

    일반적으로 대칭 키 알고리즘은 퍼블릭 키 알고리즘보다 빠르고 적은 수의 암호화 텍스트를 생성하는 데 비해, 퍼블릭 키 알고리즘은 기본적으로 역할 분리를 제공하고 키 관리가 더 쉽습니다. 봉투 암호화는 각 전략의 장점을 하나로 결합하게 해 줍니다.

암호화 컨텍스트

모든 AWS KMS 암호화 작업은 데이터에 대한 추가 컨텍스트 정보가 포함된 키–값 페어 집합의 옵션 집합인 암호화 컨텍스트를 수락합니다. AWS KMS 암호화 작업에 암호화 컨텍스트를 제공할 때는 해당되는 해독 작업에 동일한 암호화 컨텍스트를 제공해야 합니다. 그렇지 않으면 해독 요청이 실패합니다.

암호화 컨텍스트는 보안 사항이 아닙니다. AWS CloudTrail로그의 일반 텍스트로 표시되므로 로그 및 감사에서 암호화 작업을 식별하고 분류할 수 있습니다.

예를 들어 Amazon Simple Storage Service(Amazon S3)은 키가 aws:s3:arn인 암호화 컨텍스트를 사용하며, 이 값은 암호화 중인 파일에 대한 S3 버킷 경로입니다.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::bucket_name/file_name" },

또한 암호화 컨텍스트를 사용하여 계정의 고객 마스터 키(CMK)에 대한 액세스를 구체화하거나 제한할 수 있습니다. 정책문 에서 암호화 컨텍스트 를 허가 의 제약 조건과 조건으로 사용할 수 있습니다.

암호화 컨텍스트에 대한 자세한 내용은 암호화 컨텍스트 단원을 참조하십시오.

주요 정책

CMK를 생성할 때 CMK를 사용하거나 관리할 수 있는 사람을 선택합니다. 이러한 권한은 키 정책이라는 문서에 포함됩니다. 키 정책을 사용하여 고객 관리형 CMK에 대한 권한을 언제든 추가, 제거 또는 변경할 수 있지만 AWS 관리형 CMK에 대한 키 정책은 편집할 수 없습니다. 자세한 내용은 AWS KMS에 대한 인증 및 액세스 제어 단원을 참조하십시오.

지원금

권한 부여는 키 정책의 대안으로서 권한을 제공하는 또 하나의 메커니즘입니다. 권한 부여를 이용해 AWS 보안 주체가 고객 관리형 CMK를 사용하도록 허용하는 장기 액세스 권한을 부여할 수 있습니다. 자세한 내용은 권한 부여 사용 단원을 참조하십시오.

권한 부여 토큰

권한 부여를 생성할 때 최종 일관성으로 인해 권한 부여에 지정된 권한이 즉시 적용되지 않을 수 있습니다. 시간이 지연될 가능성을 완화해야 하는 경우 CreateGrant API 요청에 대한 응답으로 수신한 권한 부여 토큰을 사용합니다. AWS KMS API 요청을 통한 권한 부여 토큰을 전달하여 권한 부여의 권한이 즉시 적용되도록 할 수 있습니다. 다음 AWS KMS API 작업이 권한 부여 토큰을 수락합니다.

권한 부여 토큰은 비밀이 아닙니다. 권한 부여 토큰에는 권한 부여의 대상 및 그에 따라 사용할 수 있는 사람에 대한 정보가 포함되므로 권한 부여의 권한이 즉시 적용될 수 있습니다.

CMK 사용 감사

AWS CloudTrail을 사용해 키 사용을 감사할 수 있습니다. CloudTrail은 계정의 AWS API 호출 및 관련 이벤트 내역이 포함된 로그 파일을 생성합니다. 이러한 로그 파일은 AWS Management Console, AWS SDK, 명령줄 도구를 통해 이루어진 AWS KMS API 요청뿐 아니라 통합된 AWS 서비스를 통해 이루어진 요청을 모두 포함합니다. 이러한 로그 파일을 사용해 CMK가 사용된 시간, 요청되었던 작업, 요청자의 ID, 요청이 시작된 IP 주소 등에 대한 정보를 얻을 수 있습니다. 자세한 내용은 사용을 통한 API 호출 로깅AWS CloudTrail User Guide를 참조하십시오.

키 관리 인프라

암호화 기법에서 일반적인 방법은 AES(Advanced Encryption Standard)와 비밀 키처럼 공개적으로 사용할 수 있고 피어 검토를 거친 알고리즘으로 암호화하고 해독하는 것입니다. 암호화 기법에서 가장 큰 문제 중 하나는 키를 비밀로 유지하기 매우 어렵다는 점입니다. 이는 일반적으로 키 관리 인프라(KMI)의 작업입니다. AWS KMS가 자동으로 KMI를 운영합니다. AWS KMS가 CMK라는 마스터 키를 생성하고 안전하게 저장합니다. AWS KMS의 작동 방식에 대한 자세한 내용은 AWS Key Management Service 암호화 세부 정보 백서를 참조하십시오.