이 페이지에서는 Spanner에서 수동으로 만든 고객 관리 암호화 키(CMEK)를 사용하는 방법을 설명합니다.
CMEK에 대한 자세한 내용은 고객 관리 암호화 키(CMEK) 개요를 참고하세요.
CMEK 지원 데이터베이스 만들기
Cloud Key Management Service(Cloud KMS)에서 키를 만듭니다. Spanner는 다음 Cloud KMS 유형에 대한 생성을 지원합니다.
이 키는 Spanner 인스턴스와 동일한 위치에 있어야 합니다. 예를 들어 Spanner 인스턴스 구성이
us-west1
에 있는 경우 Cloud KMS 키링 위치도us-west1
이어야 합니다.모든 Spanner 멀티 리전 인스턴스 구성에 해당 Cloud KMS 키링 위치가 있지는 않습니다. 커스텀, 이중 리전 또는 멀티 리전 인스턴스 구성의 Spanner 데이터베이스의 경우 여러 리전(단일 리전) Cloud KMS 키를 사용하여 데이터베이스를 보호할 수 있습니다. 예를 들면 다음과 같습니다.
- Spanner 데이터베이스가 멀티 리전 인스턴스 구성
nam14
에 있는 경우us-east4
,northamerica-northeast1
,us-east1
에서 Cloud KMS 키를 만들 수 있습니다. - 데이터베이스가
nam3
을 기본 인스턴스 구성으로 사용하고us-central2
에 읽기 전용 복제본을 추가한 커스텀 인스턴스 구성인 경우us-east4
,us-east1
,us-central1
,us-central2
에서 Cloud KMS 키를 만들 수 있습니다.
(선택사항) Spanner 인스턴스 구성의 복제본 위치 목록을 보려면
gcloud spanner instances get-locations
명령어를 사용합니다.gcloud spanner instances get-locations <var>INSTANCE_ID</var>
자세한 내용은 다음 리소스를 참조하세요.
- Spanner 데이터베이스가 멀티 리전 인스턴스 구성
Spanner에 키에 대한 액세스를 부여합니다.
Cloud Shell에서 서비스 에이전트를 만들어 표시하거나, 계정이 이미 있으면 표시합니다.
gcloud beta services identity create --service=spanner.googleapis.com \ --project=PROJECT_ID
gcloud 베타 명령어 구성요소를 설치하라는 메시지가 표시되면
Y
를 입력합니다. 설치가 완료되면 명령어가 자동으로 다시 시작됩니다.gcloud services identity
명령어는 Spanner가 사용자 대신 Cloud KMS 키에 액세스하기 위해 사용할 수 있는 서비스 에이전트를 만들거나 가져옵니다.서비스 계정 ID의 형식은 이메일 주소와 비슷합니다.
Service identity created: service-xxx@gcp-sa-spanner.iam.gserviceaccount.com
Spanner 인스턴스 구성의 각 리전(
--location
) 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화(cloudkms.cryptoKeyEncrypterDecrypter
) 역할을 부여합니다. 이렇게 하려면gcloud kms keys add-iam-policybinding
명령어를 실행하세요.gcloud kms keys add-iam-policy-binding KMS_KEY \ --location KMS_KEY_LOCATION \ --keyring KMS_KEY_RING \ --project=PROJECT_ID \ --member serviceAccount:service-xxx@gcp-sa-spanner.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
다음은 출력 예시입니다.
Updated IAM policy for key [KMS_KEY]
데이터베이스를 보호하기 위해 여러 Cloud KMS 키를 사용하는 경우 모든 키에 대해
gcloud kms keys add-iam-policybinding
명령어를 실행합니다.이 역할은 Cloud KMS 키로 암호화 및 복호화할 수 있는 권한이 서비스 계정에 포함되도록 합니다. 자세한 내용은 Cloud KMS 권한 및 역할을 참조하세요.
데이터베이스를 만들고 Cloud KMS 키를 지정합니다.
콘솔
콘솔을 사용하여 리전 인스턴스 구성에서 데이터베이스를 만듭니다.
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
데이터베이스를 만들 인스턴스를 클릭합니다.
데이터베이스 만들기를 클릭하고 필수 필드를 입력합니다.
암호화 옵션 표시를 클릭합니다.
Cloud KMS 키를 선택합니다.
드롭다운 목록에서 키를 선택합니다.
키 목록은 현재 Google Cloud 프로젝트로 제한됩니다. 다른 Google Cloud 프로젝트의 키를 사용하려면 Google Cloud 콘솔 대신 gcloud CLI를 사용하여 데이터베이스를 만듭니다.
데이터베이스가 생성되면 데이터베이스 개요 페이지를 확인하여 해당 데이터베이스가 CMEK 지원 데이터베이스인지 확인할 수 있습니다.
gcloud
리전, 커스텀 또는 멀티 리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 gcloud spanner databases create
명령어를 실행합니다.
gcloud spanner databases create DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--ddl="CREATE TABLE Users (Id INT64 NOT NULL, FirstName STRING(100) NOT NULL, LastName STRING(100) NOT NULL,) PRIMARY KEY (Id)" \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEYRING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
데이터베이스가 CMEK 지원 데이터베이스인지 확인하려면 gcloud spanner databases describe
명령어를 실행합니다.
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
CMEK 지원 데이터베이스에는 다음 출력 예시에 표시된 것처럼 encryptionConfig
필드가 포함됩니다.
encryptionConfig:
kmsKeyNames:projects/my-kms-project/locations/eur5/keyRings/my-kms-key-ring/cryptoKeys/my-kms-key
name: projects/my-spanner-project/instances/my-instance/databases/my-db
state: READY
클라이언트 라이브러리
C#
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
C++
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
Go
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
Java
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
Node.js
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
PHP
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
Python
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
Ruby
리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 데이터베이스를 만들려면 다음을 사용합니다.
사용 중인 키 버전 보기
데이터베이스의 encryption_info
필드에는 키 버전에 대한 정보가 표시됩니다.
데이터베이스의 키 버전이 변경될 때 변경사항은 encryption_info
에 즉시 전파되지 않습니다. 변경사항이 이 필드에 반영되려면 시간이 걸릴 수 있습니다.
콘솔
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
표시하려는 데이터베이스가 포함된 인스턴스를 클릭합니다.
데이터베이스를 클릭합니다.
암호화 정보는 데이터베이스 세부정보 페이지에 표시됩니다.
gcloud
gcloud spanner databases describe
또는 gcloud spanner databases list
명령어를 실행하여 데이터베이스의 encryption_info
를 가져올 수 있습니다. 예를 들면 다음과 같습니다.
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
다음은 출력 예시입니다.
name: projects/my-project/instances/test-instance/databases/example-db
encryptionInfo:
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key1-location/keyRings/my-kms-key-ring1/cryptoKeys/my-kms-key1/cryptoKeyVersions/1
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key2-location/keyRings/my-kms-key-ring2/cryptoKeys/my-kms-key2/cryptoKeyVersions/1
키 사용 중지
각 키 버전에 대해 이 안내에 따라 사용 중인 키 버전을 사용 중지합니다.
변경사항이 적용될 때까지 기다립니다. 키를 사용 중지하면 변경사항이 전파될 때까지 최대 3시간까지 걸릴 수 있습니다.
데이터베이스에 더 이상 액세스할 수 없는지 확인하려면 CMEK가 사용 중지된 데이터베이스에서 쿼리를 실행합니다.
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
다음과 같은 오류 메시지가 표시됩니다.
KMS key required by the Spanner resource is not accessible.
키 사용 설정
각 키 버전에 대해 이 안내에 따라 데이터베이스에서 현재 사용 중인 키 버전을 사용 설정합니다.
변경사항이 적용될 때까지 기다립니다. 키를 사용 설정하면 변경사항이 전파될 때까지 최대 3시간까지 걸릴 수 있습니다.
데이터베이스에 더 이상 액세스할 수 없는지 확인하려면 CMEK 지원 데이터베이스에서 쿼리를 실행합니다.
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
변경사항이 적용되었으면 명령어가 성공적으로 실행됩니다.
데이터베이스 백업
Spanner 백업을 사용하여 데이터베이스의 백업을 만들 수 있습니다. 기본적으로 데이터베이스에서 생성된 백업에는 데이터베이스 자체와 동일한 암호화 구성이 사용됩니다. 선택적으로 백업에 다른 암호화 구성을 지정할 수 있습니다.
콘솔
콘솔을 사용하여 리전 인스턴스 구성에서 백업을 만듭니다.
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
백업할 데이터베이스가 포함된 인스턴스 이름을 클릭합니다.
데이터베이스를 클릭합니다.
탐색창에서 백업/복원을 클릭합니다.
백업 탭에서 백업 만들기를 클릭합니다.
백업 이름을 입력하고 만료 상태를 선택합니다.
(선택사항) 암호화 옵션 표시를 클릭합니다.
a. 백업에 다른 암호화 구성을 사용하려면 기존 암호화 사용 옆에 있는 슬라이더를 클릭합니다.
a. Cloud KMS 키를 선택합니다.
a. 드롭다운 목록에서 키를 선택합니다.
키 목록은 현재 Google Cloud 프로젝트로 제한됩니다. 다른 Google Cloud 프로젝트의 키를 사용하려면 Google Cloud 콘솔 대신 gcloud CLI를 사용하여 데이터베이스를 만듭니다.
만들기를 클릭합니다.
백업 테이블에 각 백업에 대한 암호화 정보가 표시됩니다.
gcloud
리전, 커스텀 또는 멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 gcloud spanner backups create
명령어를 실행합니다.
gcloud spanner backups create BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--database=DATABASE \
--retention-period=RETENTION_PERIOD \
--encryption-type=customer_managed_encryption \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEY_RING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
--async
생성된 백업이 CMEK로 암호화되었는지 확인하려면 다음 안내를 따르세요.
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
클라이언트 라이브러리
C#
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
C++
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
Go
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
Java
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
Node.js
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
PHP
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
Python
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
Ruby
리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 만들려면 다음을 사용합니다.
백업 복사
Spanner 데이터베이스의 백업을 한 인스턴스에서 다른 리전 또는 프로젝트의 다른 인스턴스로 복사할 수 있습니다. 기본적으로 복사된 백업은 Google 관리나 고객 관리인 경우 소스 백업 암호화와 동일한 암호화 구성을 사용합니다. 백업을 복사할 때 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. 리전 간에 복사할 때 복사된 백업을 CMEK로 암호화하려면 대상 리전에 해당하는 Cloud KMS 키를 지정합니다.
콘솔
콘솔을 사용하여 리전 인스턴스 구성에서 백업을 복사합니다.
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
백업할 데이터베이스가 포함된 인스턴스 이름을 클릭합니다.
데이터베이스를 클릭합니다.
탐색창에서 백업/복원을 클릭합니다.
백업 테이블에서 백업에 대한 작업을 선택하고 복사를 클릭합니다.
대상 인스턴스를 선택하고, 이름을 제공하고, 백업 복사본의 만료 날짜를 선택하여 양식을 작성합니다.
(선택사항) 백업에 다른 암호화 구성을 사용하려면 암호화 옵션 표시를 클릭합니다.
a. Cloud KMS 키를 선택합니다.
a. 드롭다운 목록에서 키를 선택합니다.
키 목록은 현재 Google Cloud 프로젝트로 제한됩니다. 다른 Google Cloud 프로젝트의 키를 사용하려면 Google Cloud 콘솔 대신 gcloud CLI를 사용하여 데이터베이스를 만듭니다.
복사를 클릭합니다.
gcloud
새 암호화 구성을 사용하는 백업을 동일한 프로젝트의 다른 인스턴스로 복사하려면 다음 gcloud spanner backups copy
명령어를 실행합니다.
gcloud spanner backups copy --async \
--source-instance=INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-backup=DESTINATION_BACKUP_NAME \
--expiration-date=EXPIRATION_DATE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
새 암호화 구성을 사용하는 백업을 다른 프로젝트의 다른 인스턴스로 복사하려면 다음 gcloud spanner backups copy
명령어를 실행합니다.
gcloud spanner backups copy --async \
--source-backup=SOURCE_BACKUP_NAME \
--destination-backup=DESTINATION_BACKUP_NAME \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
복사된 백업이 CMEK로 암호화되었는지 확인하려면 다음을 사용합니다.
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
클라이언트 라이브러리
Node.js
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복사하려면 다음을 사용합니다.
PHP
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복사하려면 다음을 사용합니다.
Ruby
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복사하려면 다음을 사용합니다.
백업에서 복원
Spanner 데이터베이스 백업을 새 데이터베이스로 복원할 수 있습니다. 기본적으로 백업에서 복원된 데이터베이스에는 백업 자체와 동일한 암호화 구성이 사용됩니다. 하지만 복원된 데이터베이스에 대해 다른 암호화 구성을 지정하여 이 동작을 재정의할 수 있습니다. 백업이 CMEK로 보호되는 경우 백업을 만들기 위해 사용된 키 버전을 복호화 작업에 사용할 수 있어야 합니다.
콘솔
콘솔을 사용하여 리전 인스턴스 구성에서 백업을 복원합니다.
Google Cloud 콘솔에서 인스턴스 페이지로 이동합니다.
복원할 데이터베이스가 포함된 인스턴스를 클릭합니다.
데이터베이스를 클릭합니다.
탐색창에서 백업/복원을 클릭합니다.
백업 테이블에서 백업에 대한 작업을 선택하고 복원을 클릭합니다.
복원할 인스턴스를 선택하고 복원된 데이터베이스의 이름을 지정합니다.
(선택사항) 복원된 데이터베이스에 다른 암호화 구성을 사용하려면 기존 암호화 사용 옆에 있는 슬라이더를 클릭합니다.
a. Cloud KMS 키를 선택합니다.
a. 드롭다운 목록에서 키를 선택합니다.
키 목록은 현재 Google Cloud 프로젝트로 제한됩니다. 다른 Google Cloud 프로젝트의 키를 사용하려면 Google Cloud 콘솔 대신 gcloud CLI를 사용하여 데이터베이스를 만듭니다.
복원을 클릭합니다.
gcloud
새 암호화 구성으로 백업을 복원하려면 다음 gcloud spanner databases restore
명령어를 실행합니다.
gcloud spanner databases restore --async \
--project=SPANNER_PROJECT_ID \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-database=DESTINATION_DATABASE_ID \
--source-instance=SOURCE_INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME
복원된 데이터베이스가 CMEK로 암호화되었는지 확인하려면 다음을 사용합니다.
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
자세한 내용은 백업에서 복원을 참조하세요.
클라이언트 라이브러리
C#
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
C++
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Go
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Java
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Node.js
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
PHP
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Python
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Ruby
리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
멀티 리전 인스턴스 구성에서 CMEK 지원 백업을 복원하려면 다음을 사용합니다.
Cloud KMS 키의 감사 로그 보기
프로젝트에서 Cloud KMS API에 대해 로깅이 사용 설정되었는지 확인합니다.
Google Cloud 콘솔에서 로그 탐색기로 이동합니다.
쿼리 빌더에 다음 줄을 추가하여 로그 항목을 Cloud KMS로 제한합니다.
resource.type="cloudkms_cryptokey" resource.labels.location="KMS_KEY_LOCATION" resource.labels.key_ring_id="KMS_KEY_RING_ID" resource.labels.crypto_key_id="KMS_KEY_ID"
일반 작업 아래에서 암호화 및 복호화 작업이
INFO
심각도로 로깅됩니다. 이러한 항목은 Spanner 인스턴스의 영역이 약 5분 간격으로 Cloud KMS 키를 폴링할 때 로깅됩니다.Spanner가 키에 액세스하지 못하면 작업이
ERROR
로 로깅됩니다.