고객 관리 암호화 키(CMEK) 개요

기본적으로 Spanner는 저장 중 고객 콘텐츠를 암호화합니다. Spanner는 사용자 측의 추가 작업 없이 자동으로 암호화를 처리합니다. 이 옵션을 Google 기본 암호화라고 부릅니다.

암호화 키를 제어하려면 Spanner를 포함한 CMEK 통합 서비스와 함께 Cloud KMS에서 고객 관리 암호화 키(CMEK)를 사용하면 됩니다. Cloud KMS 키를 사용하면 보호 수준, 위치, 순환 일정, 사용 및 액세스 권한, 암호화 경계를 관리할 수 있습니다. Cloud KMS를 사용하면 키 사용을 추적하고, 감사 로그를 보고, 키 수명 주기를 제어할 수도 있습니다. Google에서 데이터를 보호하는 대칭 키 암호화 키(KEK)를 소유하고 관리하는 대신 사용자가 Cloud KMS에서 이러한 키를 제어하고 관리할 수 있습니다.

CMEK로 리소스를 설정한 후 Spanner 리소스에 액세스하는 환경은 Google 기본 암호화를 사용하는 것과 유사합니다. 암호화 옵션에 대한 자세한 내용은 고객 관리 암호화 키(CMEK)를 참조하세요.

CMEK는 커스텀 인스턴스 구성에 사용할 수 없습니다.

Cloud KMS Autokey를 사용하는 CMEK

CMEK를 수동으로 만들어 Spanner 리소스를 보호하거나 Cloud KMS Autokey를 사용할 수 있습니다. Autokey를 사용하면 Spanner에서 리소스를 만들 때 필요에 따라 키링과 키가 생성됩니다. 암호화 및 복호화 작업에 키를 사용하는 서비스 에이전트가 없으면 생성되며, 필요한 Identity and Access Management(IAM) 역할이 부여됩니다. 자세한 내용은 Autokey 개요를 참조하세요.

Spanner는 Terraform 또는 REST API를 사용하여 리소스를 만들 때만 Cloud KMS Autokey와 호환됩니다.

수동으로 생성된 CMEK를 사용하여 Spanner 리소스를 보호하는 방법은 고객 관리 암호화 키(CMEK)로 데이터베이스 보안을 참조하세요.

Cloud KMS Autokey에서 만든 CMEK를 사용하여 Spanner 리소스를 보호하려면 Secret Manager 리소스에 Autokey 사용에서 Secret Manager에 대해 예시로 제공된 단계를 사용합니다.

특성

  • 데이터 액세스 제어: 관리자가 Spanner에서 저장 데이터 보호를 위해 사용되는 키를 순환하고, 액세스 권한을 관리하고, 중지하거나 삭제할 수 있습니다.
  • 감사 기능: 프로젝트에서 Cloud KMS API에 대해 감사 로깅을 사용 설정할 경우 Spanner에서 수행되는 것을 포함하여 키에 대한 모든 작업을 Cloud Logging에서 로깅하고 확인할 수 있습니다. Cloud EKM 키는 모든 키 요청에 근거 필드를 추가하는 키 액세스 근거를 지원합니다. 일부 외부 키 관리 파트너를 사용하면 근거에 따라 이러한 요청을 자동으로 승인하거나 거부할 수 있습니다.
  • 성능: Spanner 성능 또는 서비스수준계약에는 변경사항이 없습니다.

가격 책정

Spanner는 다른 데이터베이스와 같은 방식으로 CMEK 사용 데이터베이스 비용을 청구합니다. Spanner 비용은 추가되지 않습니다. 자세한 내용은 Spanner 가격 책정을 참조하세요.

키 비용 및 해당 키를 사용한 모든 암호화 작업에 대해 Cloud KMS에서 비용이 청구됩니다(Spanner가 암호화/복호화를 위해 키를 사용하는 경우). 이러한 비용은 Spanner에서 생성되는 예상 암호화 작업 수를 기준으로 최소한으로 예상할 수 있습니다. 자세한 내용은 Cloud KMS 가격 책정을 참조하세요.

CMEK로 보호되는 대상

CMEK 사용 데이터베이스에서 Spanner는 Cloud KMS 키를 사용하여 저장 데이터를 보호합니다. 여기에는 디스크 또는 플래시에 저장되는 데이터베이스의 데이터가 포함됩니다.

일부 예외가 적용됩니다. 다음 유형의 데이터는 CMEK 키가 아닌 Google 기본 저장 데이터 암호화로 보호됩니다.

  • 범위 경계를 표시하는 행 키의 하위 집합
  • 코어 덤프 및 운영 로그를 포함한 디버깅 데이터
  • 전송 중 데이터 또는 메모리에 있는 데이터
  • 데이터베이스 메타데이터

Spanner에는 세 가지 암호화 레이어가 있습니다. 저장 데이터는 하위 파일 단위로 분리되어 저장되고 각 단위는 스토리지 수준에서 개별 암호화 키로 암호화됩니다. 청크에 포함된 데이터를 암호화하기 위해 사용되는 키를 DEK(데이터 암호화 키)라고 부릅니다. Google에는 많은 양의 키가 사용되고, 짧은 지연 시간과 고가용성이 요구되기 때문에, 이러한 키는 암호화 대상 데이터 근처에 저장됩니다. DEK는 키 암호화 키(KEK)로 암호화(또는 '래핑')됩니다. 마지막으로 각 KEK는 고객 관리 암호화 키로 암호화됩니다.

CMEK 키를 순환할 때 Spanner는 CMEK 키의 최신 주 버전을 포함하는 중간 KEK만 다시 암호화합니다. 다시 암호화가 완료되었으면 이전 버전의 CMEK 키를 사용 중지하거나 삭제해도 데이터베이스에 대한 액세스가 사용 중지되지 않습니다. 또한 데이터베이스 보호를 위해 사용되는 키 버전도 확인할 수 있습니다.

CMEK를 사용하는 경우

고객 관리형 암호화 키를 사용한 암호화를 보여주는 다이어그램

CMEK를 사용하지 않는 경우

Google 소유 및 Google 관리 키를 사용한 암호화를 보여주는 다이어그램

CMEK 사용 설정

Spanner 데이터베이스에 CMEK를 사용하려면 새 데이터베이스를 만들고 데이터베이스 생성 시 Cloud KMS 키를 지정해야 합니다.

Google 관리 Spanner 서비스 계정Cloud KMS CryptoKey Encrypter/Decrypter(roles/cloudkms.cryptoKeyEncrypterDecrypter) 역할을 부여한 후 Spanner가 키에 액세스할 수 있습니다.

자세한 내용은 CMEK 사용을 참조하세요.

세션 관리 및 데이터에 대한 트랜잭션 수행을 위해 사용되는 것과 같은 Spanner의 데이터 액세스 API는 고객 관리형 키와 Google 소유 및 Google 관리 키 모두에 대해 완전히 동일합니다. 데이터를 읽거나 쓸 때 애플리케이션이 키 또는 암호화 구성을 지정할 필요가 없습니다. 모든 암호화가 서비스에서 처리됩니다.

키 관리

키 관리 작업은 Cloud KMS를 사용하여 수행됩니다. Spanner는 Cloud KMS에서 전파될 때까지 어떤 키 변경사항도 감지하거나 대응할 수 없습니다. 키 사용 중지 또는 삭제와 같은 일부 작업은 전파되는 데 최대 3시간까지 걸릴 수 있고, 권한 변경사항은 일반적으로 훨씬 더 빠르게 전파됩니다.

데이터베이스가 생성된 후 Spanner는 키가 계속 유효한지 확인하기 위해 약 5분 간격으로 Cloud KMS를 호출합니다.

Spanner에서 Cloud KMS 키가 중지되었거나 삭제된 것으로 감지되면 데이터베이스를 액세스할 수 없게 만드는 작업이 즉시 시작됩니다. 세션, 읽기, 쓰기를 포함하여 데이터베이스에 대한 모든 후속 호출은 FAILED_PRECONDITION 오류를 반환합니다. KMS key required by the Spanner resource is not accessible.

Spanner의 Cloud KMS 호출로 이전에 중지된 키가 다시 사용 설정된 것으로 확인되면 Cloud KMS가 Spanner 데이터베이스에 대한 액세스를 자동으로 복원합니다.

사용할 수 없는 키 상태의 처리 방법

드문 경우지만 Cloud KMS를 사용할 수 없는 기간 중에는 Spanner가 Cloud KMS에서 키 상태를 가져오지 못할 수 있습니다.

Spanner가 처음으로 Cloud KMS와 통신할 수 없게 된 시점에 사용 설정된 키로 Spanner 데이터베이스가 보호되는 경우, Spanner는 이러한 이슈가 워크로드에 미치는 영향을 최소화하기 위해 최대 1시간 동안 최선의 방식으로 전체 데이터베이스 작업을 계속 지원합니다.

1시간 후에도 Spanner가 Cloud KMS에 연결할 수 없으면 Spanner가 사전적인 조치로 데이터베이스를 오프라인으로 전환합니다. Spanner 데이터베이스에 있는 데이터는 데이터베이스가 Cloud KMS에 다시 연결할 수 있고 Cloud KMS가 활성 키로 응답할 때까지 액세스할 수 없는 상태로 유지됩니다.

반대로 Spanner가 처음으로 Cloud KMS와 통신할 수 없게 된 시점에 중지된 키로 Spanner 데이터베이스가 보호되는 경우에는 Cloud KMS에 다시 연결할 수 있고 사용자가 키를 다시 사용 설정할 때까지 데이터베이스가 액세스할 수 없는 상태로 유지됩니다.

외부 키 고려사항

Cloud EKM 키를 사용하는 경우 Google은 외부 키 관리 파트너 시스템에서 외부 관리 키의 가용성을 제어 할 수 없습니다.

외부 관리 키를 사용할 수 없는 경우 Spanner는 계속해서 최대 1시간 동안 캐시된 버전의 키를 사용하여 전체 데이터베이스 작업을 지원합니다.

1시간 후에도 Spanner가 Cloud KMS에 연결할 수 없으면 Spanner가 사전적인 조치로 데이터베이스를 오프라인으로 전환합니다. 데이터베이스를 호출하면 FAILED_PRECONDITION 오류(External key error: Could not find a key resource at the key URI.)가 표시되면서 실패합니다.

외부 키를 사용할 때 추가로 고려할 사항은 Cloud 외부 키 관리자 문서를 참조하세요.

백업 및 복원

데이터베이스와 마찬가지로 Spanner 백업은 CMEK 또는 Google 소유 및 Google 관리 키로 보호될 수 있습니다. 기본적으로 백업은 해당 데이터베이스와 동일한 암호화 구성을 사용하지만, 백업을 만들 때 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. 백업에 CMEK가 사용 설정되었으면 백업을 만들 때 KMS 키의 기본 버전을 사용하여 암호화됩니다. 백업을 만든 후에는 KMS 키가 순환되어도 해당 키 및 키 버전을 수정할 수 없습니다. 자세한 내용은 데이터베이스 백업을 참조하세요.

백업에서 데이터베이스를 restore할 때 복원된 데이터베이스는 기본적으로 백업과 동일한 암호화 구성을 사용합니다. 데이터베이스를 복원할 때 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. CMEK 사용 백업을 복원하려면 백업 암호화에 사용된 키 및 키 버전을 모두 사용할 수 있어야 합니다. 자세한 내용은 백업에서 복원을 참조하세요.

로깅

프로젝트에서 Cloud KMS API에 대해 감사 로깅을 사용 설정한 경우 Cloud Logging에서 사용자 대신 Spanner가 Cloud KMS에 전송하는 요청을 감사할 수 있습니다. 이러한 Cloud KMS 로그 항목Cloud Logging에서 확인할 수 있습니다.

조직 내 CMEK 요구 또는 제한

Spanner를 포함하여 다양한 Google Cloud 제품에 대한 CMEK 보호 사용과 관련하여 조직 전체 정책을 설정할 수 있습니다. 이러한 정책을 통해 다음을 수행할 수 있습니다.

  • 조직에서 만든 새 Spanner 데이터베이스에 CMEK 보호가 사용되도록 요구합니다.

  • CMEK 보호를 위해 제공되는 조직의 Cloud KMS 키를 제한합니다.

자세한 정보는 CMEK 조직 정책을 참조하세요.