이 페이지에서는 Spanner의 고객 관리 암호화 키(CMEK)에 대해 설명합니다. CMEK를 사용 설정하는 시기와 이유를 포함한 일반적인 CMEK에 대한 자세한 내용은 Cloud KMS 문서를 참조하세요.
기본적으로 Spanner는 저장 중 고객 콘텐츠를 암호화합니다. Spanner는 사용자 측의 추가 작업 없이 자동으로 암호화를 처리합니다. 이 옵션을 Google 기본 암호화라고 부릅니다.
암호화 키를 제어하려면 Spanner를 포함한 CMEK 통합 서비스와 함께 Cloud KMS에서 고객 관리 암호화 키(CMEK)를 사용하면 됩니다. Cloud KMS 키를 사용하면 보호 수준, 위치, 순환 일정, 사용 및 액세스 권한, 암호화 경계를 관리할 수 있습니다. Cloud KMS를 사용하면 키 사용을 추적하고, 감사 로그를 보고, 키 수명 주기를 제어할 수도 있습니다. Google에서 데이터를 보호하는 대칭 키 암호화 키(KEK)를 소유하고 관리하는 대신 사용자가 Cloud KMS에서 이러한 키를 제어하고 관리할 수 있습니다.
CMEK로 리소스를 설정한 후 Spanner 리소스에 액세스하는 환경은 Google 기본 암호화를 사용하는 것과 유사합니다. 암호화 옵션에 대한 자세한 내용은 고객 관리 암호화 키(CMEK)를 참조하세요.
Spanner 리소스 보호를 위해 수동으로 생성된 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와 호환됩니다. Cloud KMS Autokey를 사용해서는 Spanner 데이터베이스에 대해 여러 개의 리전(단일 리전) Cloud KMS 키를 만들 수 없습니다.
Cloud KMS Autokey에서 만든 CMEK를 사용하여 Spanner 리소스를 보호하려면 Secret Manager 리소스에 Autokey 사용에서 Secret Manager에 대해 예시로 제공된 단계를 사용합니다.
기능
- 데이터 액세스 제어: 관리자가 Spanner에서 저장 데이터 보호를 위해 사용되는 키를 순환하고, 액세스 권한을 관리하고, 중지하거나 삭제할 수 있습니다.
- 감사 기능: 프로젝트에서 Cloud KMS API에 대해 감사 로깅을 사용 설정할 경우 Spanner에서 수행되는 것을 포함하여 키에 대한 모든 작업을 Cloud Logging에서 로깅하고 확인할 수 있습니다. Cloud EKM 키는 모든 키 요청에 근거 필드를 추가하는 키 액세스 근거를 지원합니다. 일부 외부 키 관리 파트너를 사용하면 근거에 따라 이러한 요청을 자동으로 승인하거나 거부할 수 있습니다.
- 성능: CMEK를 사용할 때 Spanner 성능 또는 서비스수준계약에는 변화가 없습니다.
- 여러 리전 키 지원: Spanner 커스텀, 이중 리전, 멀티 리전 인스턴스 구성에서 데이터베이스 보호를 위해 여러 리전(단일 리전) Cloud KMS 키를 만들 수 있습니다.
가격 책정
Spanner는 다른 데이터베이스와 같은 방식으로 CMEK 사용 데이터베이스 비용을 청구합니다. CMEK를 사용 설정하는 데에는 Spanner 비용이 추가 발생하지 않습니다. 자세한 내용은 Spanner 가격 책정을 참조하세요.
키 비용 및 해당 키를 사용한 모든 암호화 작업에 대해 Cloud KMS에서 비용이 청구됩니다(Spanner가 암호화/복호화를 위해 키를 사용하는 경우). 이러한 비용은 Spanner에서 생성되는 예상 암호화 작업 수를 기준으로 최소한으로 예상할 수 있습니다. 자세한 내용은 Cloud KMS 가격 책정을 참조하세요.
CMEK로 보호되는 대상
CMEK 사용 데이터베이스에서 Spanner는 Cloud KMS 키를 사용하여 저장 데이터를 보호합니다. 여기에는 디스크 또는 플래시에 저장되는 데이터베이스의 데이터가 포함됩니다.
일부 예외가 적용됩니다. 다음 유형의 데이터는 CMEK 키가 아닌 Google 기본 저장 데이터 암호화로 보호됩니다.
- 범위 경계를 표시하는 행 키의 하위 집합
- 코어 덤프 및 운영 로그를 포함한 디버깅 데이터
- 전송 중 데이터 또는 메모리에 있는 데이터
- 데이터베이스 메타데이터
Spanner에는 세 가지 암호화 레이어가 있습니다. 저장 데이터는 하위 파일 단위로 분리되어 저장되고 각 단위는 스토리지 수준에서 개별 암호화 키로 암호화됩니다. 청크에 포함된 데이터를 암호화하기 위해 사용되는 키를 DEK(데이터 암호화 키)라고 부릅니다. Google에는 많은 양의 키가 사용되고, 짧은 지연 시간과 고가용성이 요구되기 때문에, 이러한 키는 암호화 대상 데이터 근처에 저장됩니다. DEK는 키 암호화 키(KEK)로 다시 암호화(또는 래핑)됩니다. 마지막으로 각 KEK는 CMEK로 암호화됩니다.
CMEK 키를 순환할 때 Spanner는 CMEK 키의 최신 주 버전을 포함하는 중간 KEK만 다시 암호화합니다. 다시 암호화가 완료된 후 이전 버전의 CMEK 키를 사용 중지하거나 삭제하면 데이터베이스에 대한 액세스가 사용 중지되지 않습니다. 또한 데이터베이스 보호를 위해 사용되는 키 버전도 확인할 수 있습니다.
CMEK를 사용하는 경우
CMEK를 사용하지 않는 경우
CMEK 사용 설정
Spanner 데이터베이스에 CMEK를 사용하려면 새 데이터베이스를 만들고 데이터베이스 생성 시 Cloud KMS 키를 지정해야 합니다.
Google 관리 Spanner 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter
) 역할을 부여한 후 Spanner가 키에 액세스할 수 있습니다.
자세한 내용은 CMEK로 데이터베이스 보호를 참조하세요.
세션 관리 및 데이터에 대한 트랜잭션 수행을 위해 사용되는 것과 같은 Spanner의 데이터 액세스 API는 CMEK와 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.
Cloud KMS에 대한 Spanner 호출로 이전에 사용 중지된 키가 다시 사용 설정된 것으로 감지되면 Cloud KMS가 Spanner 데이터베이스에 대한 액세스를 자동으로 복원합니다.
또한 데이터베이스가 여러 리전 키로 보호되고 모든 키가 사용 중지 또는 폐기되었다면 Spanner가 즉시 해당 데이터베이스를 액세스할 수 없도록 만듭니다. Spanner에서 데이터베이스 키 중 일부만 사용 중지되거나 폐기된 것으로 감지되면 12시간 이내의 기간 동안 데이터베이스를 사용 중지합니다. CMEK 사용 데이터베이스에서 키 일부만 사용 중지하거나 폐기하는 것은 피하는 것이 좋으며 불확실한 동작을 일으킬 수 있습니다. 이를 방지하려면 Spanner CMEK 키 측정항목(instance/replica/cmek/total_keys
)을 사용하여 키 일부가 사용 중지되거나 폐기된 경우 알림을 트리거할 수 있습니다. 자세한 내용은 CMEK 하위 집합 사용 중지를 위한 알림 만들기를 참조하세요.
CMEK 하위 집합 사용 중지를 위한 알림 만들기
CMEK 하위 집합이 사용 중지되거나 폐기된 경우 Spanner CMEK 키(/instance/replica/cmek/total_keys
) 측정항목을 사용하여 알림을 트리거할 수 있습니다. 이 알림 정책을 만들려면 다음 단계에 따라 설정을 조정합니다.
CMEK 알림 정책 설정
새 조건 필드 |
값 |
---|---|
리소스 및 측정항목 | 리소스 메뉴에서 Spanner 인스턴스를 선택합니다. 측정항목 카테고리 메뉴에서 인스턴스를 선택합니다. 측정항목 메뉴에서 CMEK 키를 선택합니다. (측정항목 유형은 spanner.googleapis.com/instance/replica/cmek/total_keys 입니다.)
|
필터 | instance_id = INSTANCE_ID is_key_revoked = TRUE |
시계열 시계열 그룹화 기준 |
database |
시계열 시계열 집계 |
sum |
순환 기간 | 10 m |
순환 윈도우 함수 | mean |
알림 트리거 구성 필드 |
값 |
---|---|
조건 유형 | Threshold |
알림 트리거 | Any time series violates |
기준 위치 | Above threshold |
기준 | 0
|
재테스트 범위 | 1 hr |
새 조건 필드 |
값 |
---|---|
리소스 및 측정항목 | 리소스 메뉴에서 Spanner 인스턴스를 선택합니다. 측정항목 카테고리 메뉴에서 인스턴스를 선택합니다. 측정항목 메뉴에서 CMEK 키를 선택합니다. (측정항목 유형은 spanner.googleapis.com/instance/replica/cmek/total_keys 입니다.)
|
필터 | instance_id = INSTANCE_ID is_key_revoked = FALSE |
시계열 시계열 그룹화 기준 |
database |
시계열 시계열 집계 |
sum |
순환 기간 | 10 m |
순환 윈도우 함수 | mean |
알림 트리거 구성 필드 |
값 |
---|---|
조건 유형 | Threshold |
알림 트리거 | Any time series violates |
기준 위치 | Above threshold |
기준 | 0
|
재테스트 범위 | 1 hr |
알림 트리거 구성 필드 |
값 |
---|---|
다중 조건 트리거 | All conditions are met |
알림을 만든 후 Spanner에서 CMEK 하위 집합이 사용 중지된 것으로 감지되면 알림의 정책 세부정보 페이지에서 이슈 테이블 아래에 이슈 요약 항목이 표시됩니다. 선택적 알림 채널을 설정할 수도 있습니다. 자세한 내용은 알림 채널 만들기 및 관리를 참조하세요.
사용할 수 없는 키 상태의 처리 방법
드문 경우지만 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에 다시 연결할 수 있고 사용자가 키를 다시 사용 설정할 때까지 데이터베이스가 액세스할 수 없는 상태로 유지됩니다.
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.
)가 표시되면서 실패합니다.
Spanner 데이터베이스 보호를 위해 여러 Cloud EKM 키를 사용하는 경우, 사용할 수 없는 키로 보호되는 복제본만 서비스 이용 불가능의 영향을 받습니다.
외부 키를 사용할 때의 추가 고려사항은 Cloud 외부 키 관리자 문서를 참조하세요.
백업 및 복원
CMEK 또는 Google 소유 및 Google 관리 키를 사용하여 Spanner 백업을 보호할 수 있습니다. 기본적으로 백업은 해당 데이터베이스와 동일한 암호화 구성을 사용하지만, 백업을 만들 때 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. 백업에 CMEK가 사용 설정되었으면 백업을 만들 때 KMS 키의 기본 버전을 사용하여 암호화됩니다. 백업을 만든 후에는 KMS 키가 순환되어도 해당 키 및 키 버전을 수정할 수 없습니다. 자세한 내용은 데이터베이스 백업을 참조하세요.
백업에서 데이터베이스를 restore할 때 복원된 데이터베이스는 기본적으로 백업과 동일한 암호화 구성을 사용합니다. 데이터베이스를 복원할 때 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. CMEK 사용 백업을 복원하려면 백업 암호화에 사용된 키 및 키 버전을 모두 사용할 수 있어야 합니다. 자세한 내용은 백업에서 복원을 참조하세요.
여러 리전 키로 암호화된 데이터베이스에서 만들기, 복사, 복원과 같은 백업 작업을 수행할 수 있습니다.
백업 일정으로 생성된 모든 백업은 CMEK 또는 Google 소유 및 Google 관리 키로 보호될 수 있습니다. 하지만 증분 백업 일정은 Google 소유 및 Google 관리 키만 사용하여 암호화할 수 있습니다.
로깅
프로젝트에서 Cloud KMS API에 대해 감사 로깅을 사용 설정한 경우 Cloud Logging에서 사용자 대신 Spanner가 Cloud KMS에 전송하는 요청을 감사할 수 있습니다. 이러한 Cloud KMS 로그 항목은 Cloud Logging에서 확인할 수 있습니다.
조직 내 CMEK 요구 또는 제한
Spanner를 포함하여 다양한 Google Cloud 제품에 대한 CMEK 보호 사용과 관련하여 조직 전체 정책을 설정할 수 있습니다. 이러한 정책을 통해 다음을 수행할 수 있습니다.
조직에서 만든 새 Spanner 데이터베이스에 CMEK 보호가 사용되도록 요구합니다.
CMEK 보호를 위해 제공되는 조직의 Cloud KMS 키를 제한합니다.
자세한 정보는 CMEK 조직 정책을 참조하세요.
다음 단계
- CMEK로 데이터베이스 보호 방법 알아보기