소개
Google 규모로 데이터를 저장하고 암호화하려면 암호화된 데이터를 위한 여러 개의 키 레이어가 있는 중앙 암호화 키 관리 서비스를 사용해야 합니다. 여러 키 레이어의 예로, 키를 다른 키로 암호화하는 프로세스인 봉투 암호화가 있습니다.
사용자에게 데이터를 표시하는 역할을 하는 애플리케이션 레이어와 데이터의 물리적 저장소를 제공하는 저장소 레이어에서 모두 데이터를 암호화할 수 있습니다.
기본적으로 스토리지 레이어에서 Google Cloud는 Google 내부 키 관리 서비스를 중앙 키 저장소로 사용하여 저장된 고객 콘텐츠를 암호화합니다. 데이터를 직접 저장하고 암호화하는 경우 이 주제에서 집중적으로 다루는 Cloud Key Management Service를 애플리케이션 레이어의 중앙 키 저장소로 사용할 수 있습니다.
Cloud KMS는 쉽게 사용할 수 있도록 설계된 키 계층 구조에 키를 저장하며, 키 계층 구조의 리소스에 대한 액세스는 ID 및 액세스 관리에 의해 관리됩니다. 다음은 Cloud KMS 키 계층 구조의 주요 수준을 보여줍니다.
키 계층 구조에 대한 자세한 내용은 객체 계층 구조를 참조하세요.
데이터 암호화 키
데이터 자체를 암호화하는 데 사용되는 키를 데이터 암호화 키(DEK)라고 합니다.
DEK 관리를 위한 권장사항은 다음과 같습니다.
- DEK를 로컬로 생성합니다.
- 저장되는 경우 미사용 상태의 DEK가 항상 암호화되도록 합니다.
- 손쉬운 액세스를 위해 암호화하는 대상 데이터와 가까운 곳에 DEK를 저장합니다.
- 데이터를 쓸 때마다 새 DEK를 생성합니다. 이는 DEK를 순환할 필요가 없음을 의미합니다.
- 두 사용자의 데이터를 동일한 DEK로 암호화하지 않습니다.
- Galois Counter Mode(GCM)의 256비트 Advanced Encryption Standard(AES)와 같은 강력한 알고리즘을 사용합니다.
키 암호화 키
DEK는 키 암호화 키(KEK)에 의해 암호화됩니다(래핑된다는 표현도 사용됨). 다른 키로 키를 암호화하는 프로세스를 봉투 암호화라고 합니다.
KEK 관리를 위한 권장사항은 다음과 같습니다.
KEK를 중앙에 저장합니다.
사용 사례를 기반으로 암호화하는 DEK의 세부사항을 설정합니다. 예를 들어 작업 부하의 데이터 청크를 암호화하기 위해 여러 DEK가 필요한 작업 부하를 고려해 보겠습니다. 단일 KEK를 사용하여 작업 부하의 암호화를 담당하는 모든 DEK를 래핑할 수 있습니다.
정기적으로, 또한 의심스러운 사고 발생 후에 키를 순환합니다. 자세한 내용은 키 순환을 참조하세요.
DEK와 KEK의 균형
KEK의 수를 DEK보다 적게 하고 중앙 키 관리 서비스를 사용하면 대규모의 데이터 저장 및 암호화를 보다 쉽게 관리할 수 있습니다. 또한 중앙 키 서비스는 데이터 액세스를 더 쉽게 감사 및 제한할 수 있는 단일 지점이기도 합니다.
상황 및 암호화하는 데이터의 볼륨에 따라 비슷한 모델을 사용하도록 선택할 수 있습니다. 하나의 KEK를 사용하여 다수의 DEK를 관리할 수 있습니다. 이 모델은 중앙 키 관리 서비스에 저장되는 키의 볼륨을 크게 늘리지 않고도 개별 데이터 객체가 각각 자체 DEK를 가질 수 있도록 합니다.
Cloud Key Management Service는 KEK를 관리하기 위해 설계되었으므로 Encrypt
및 Decrypt
함수의 최대 데이터 입력 크기는 64KiB입니다. 그러나 이 한도에 접근하지 않을 것임을 아는 데이터의 경우 Cloud KMS를 사용하여 직접 데이터를 암호화 및 복호화할 수 있습니다.
봉투 암호화를 사용하여 데이터를 암호화하는 방법
데이터를 암호화하는 프로세스는 로컬에서 DEK를 생성하고, DEK로 데이터를 암호화하고, KEK를 사용하여 DEK를 래핑한 다음 암호화된 데이터 및 래핑된 DEK를 저장하는 것입니다. KEK는 Cloud KMS를 벗어나지 않습니다.
봉투 암호화를 사용하여 데이터를 암호화하려면 다음 안내를 따르세요.
로컬에서 DEK를 생성합니다. OpenSSL과 같은 오픈소스 라이브러리를 사용하여 키를 생성할 암호화 유형과 비밀번호를 지정하여 DEK를 생성할 수 있습니다. 또한 원하는 경우 사용할 솔트와 다이제스트도 지정할 수 있습니다.
이 DEK를 로컬에서 사용하여 데이터를 암호화합니다.
예를 들어 메시지 암호화 예에 나온 대로 OpenSSL를 사용할 수 있습니다. 권장사항은 256비트 Advanced Encryption Standard(AES-256) 암호화를 Galois Counter Mode(GCM)로 사용하는 것입니다.
Cloud KMS에서 새 키를 생성하거나 기존 키를 사용합니다. 이 키가 KEK 역할을 합니다. 이 키를 사용하여 DEK를 암호화(래핑)합니다.
암호화된 데이터와 래핑된 DEK를 저장합니다.
봉투 암호화를 사용하여 데이터를 복호화하는 방법
데이터 복호화 프로세스는 암호화된 데이터와 래핑된 DEK를 검색하고, DEK를 래핑한 KEK를 식별하고, KEK를 사용하여 DEK 래핑을 해제한 다음 래핑 해제된 DEK를 사용하여 데이터를 복호화하는 것입니다. KEK는 Cloud KMS를 벗어나지 않습니다.
봉투 암호화를 사용하여 데이터를 복호화하려면 다음 안내를 따르세요.
암호화된 데이터와 래핑된 DEK를 검색합니다.
Cloud KMS에 저장된 키를 사용하여 암호화된 DEK를 래핑 해제합니다.
일반 텍스트 DEK를 사용하여 암호화된 데이터를 복호화합니다. 이전과 같이 OpenSSL을 사용하는 경우 메시지 복호화 예를 참조하세요.
봉투 암호화로 암호화 및 복호화하는 방법을 보여주는 샘플 코드는 Tink 및 Cloud KMS를 사용한 클라이언트 측 암호화를 참조하세요.
Google 클라우드 서비스와 통합
여러 Google Cloud 제품이 Cloud KMS와 통합되어 고객 관리 암호화 키(CMEK) 기능을 지원합니다. Cloud KMS를 사용하는 CMEK는 데이터를 위한 부가적인 보호 레이어를 추가하고 암호화 키에 대한 통제 수단을 제공하며 Cloud KMS가 가진 키 관리 측면의 이점을 활용합니다. CMEK를 지원하는 전체 제품 목록을 보려면 다른 서비스에 Cloud KMS 사용을 참조하세요.
Google 클라우드 서비스의 다른 옵션
CMEK를 지원하지 않는 Google Cloud 제품에 저장된 데이터의 경우 자체 애플리케이션 레이어 암호화를 실행할 수 있습니다. 이를 위해서는 자체 봉투 암호화를 위에 설명된 대로 구현하여 로컬에서 암호화된 데이터를 GCP에 저장해야 합니다. 다른 클라우드 서비스 제공업체 또는 온프레미스에 저장하는 데이터를 Cloud KMS를 사용하여 암호화하는 경우에도 마찬가지입니다.
CMEK 지원 외에, 다음 제품은 고객 제공 암호화 키(CSEK) 기능을 지원합니다.
제품 | CSEK 주제 |
---|---|
Cloud Storage | 고객 제공 암호화 키 |
Compute Engine | 고객 제공 암호화 키로 디스크 암호화 |
CSEK를 사용하면 자체 AES-256 키를 KEK로 제공하고 키는 데이터를 보호하는 DEK를 보호합니다. CSEK 키는 Cloud KMS 키를 사용하여 추가 보호 레이어로 보호됩니다.
이제 Cloud KMS로 키를 가져올 수 있으므로 키를 가져와서 CSEK에 의존하지 않고 CMEK가 사용 설정된 서비스를 통해 사용할 수 있습니다.