고객 관리 암호화 키(CMEK) 사용

이 페이지에서는 고객 관리 암호화 키의 서비스 계정 및 키를 설정하는 방법과 고객 관리 암호화 키를 사용하는 인스턴스를 만드는 방법을 설명합니다. Cloud SQL에서 고객 관리 암호화 키 사용에 대한 자세한 내용은 고객 관리 암호화 키 개요를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Google Cloud CLI를 설치합니다.
  5. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  6. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  7. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  8. Google Cloud CLI를 설치합니다.
  9. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  10. 사용자 계정에 Cloud SQL 관리자 역할이 있는지 확인합니다.

    IAM 페이지로 이동

  11. Cloud Key Management Service API 사용 설정

    API 사용 설정

  12. Cloud SQL Admin API 사용 설정

    API 사용 설정

CMEK로 Cloud SQL 인스턴스를 만들기 위한 워크플로

  1. gcloud 및 API 사용자만 해당: 고객 관리 암호화 키가 필요한 각 프로젝트의 서비스 계정을 만듭니다.
  2. 키링과 키를 만들고 각 키의 위치를 설정합니다. 위치는 Google Cloud 리전입니다.
  3. gcloud 및 API 사용자만: 서비스 계정에 키에 대한 액세스 권한을 부여합니다.
  4. 키에 대한 키 ID(KMS_KEY_ID) 및 위치와 키링의 ID(KMS_KEYRING_ID)를 복사하거나 기록해 둡니다. 서비스 계정에 키에 대한 액세스 권한을 부여할 때 이 정보가 필요합니다.
  5. 프로젝트로 이동하여 다음 옵션으로 Cloud SQL 인스턴스를 만듭니다.
    1. 고객 관리 암호화 키와 동일한 위치
    2. 고객 관리 키 구성
    3. 고객 관리 암호화 키 ID

이제 CMEK로 Cloud SQL 인스턴스가 사용 설정되었습니다.

서비스 계정 만들기

고객 관리 암호화 키가 필요한 각 프로젝트에 서비스 계정을 만들어야 합니다.

사용자가 서비스 계정을 관리할 수 있도록 다음 역할 중 하나를 부여합니다.

  • 서비스 계정 사용자(roles/iam.serviceAccountUser): 서비스 계정을 나열하고, 서비스 계정 세부정보를 가져오고, 서비스 계정을 가장할 수 있는 권한을 포함합니다.
  • 서비스 계정 관리자(roles/iam.serviceAccountAdmin): 서비스 계정을 나열하고 서비스 계정 세부정보를 가져올 수 있는 권한을 포함합니다. 서비스 계정을 생성, 업데이트, 삭제하고 서비스 계정에서 MySQL용 Cloud SQL 정책을 보거나 변경할 수 있는 권한도 포함합니다.

현재는 gcloud CLI 명령어로만 고객 관리 암호화 키에 필요한 서비스 계정 유형을 만들 수 있습니다. 콘솔을 사용하는 경우 Cloud SQL이 자동으로 이 서비스 계정을 만듭니다.

gcloud

gcloud beta services identity create \
--service=sqladmin.googleapis.com \
--project=PROJECT_ID

Terraform

서비스 계정을 만들려면 Terraform 리소스를 사용합니다.

resource "google_project_service_identity" "gcp_sa_cloud_sql" {
  provider = google-beta
  service  = "sqladmin.googleapis.com"
}

변경사항 적용

Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.

Cloud Shell 준비

  1. Cloud Shell을 실행합니다.
  2. Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

디렉터리 준비

각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.

  1. Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는 .tf 확장자가 있어야 합니다(예: main.tf). 이 튜토리얼에서는 파일을 main.tf라고 합니다.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.

    샘플 코드를 새로 만든 main.tf에 복사합니다.

    필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.

  3. 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
  4. 변경사항을 저장합니다.
  5. Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  3. 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.

이전 명령어는 서비스 계정 이름을 반환합니다. 서비스 계정에 키에 대한 액세스 권한 부여의 절차 중에 이 서비스 계정 이름을 사용합니다.

키 만들기

Cloud SQL 인스턴스와 동일한 Google Cloud 프로젝트 또는 별도의 사용자 프로젝트에 키를 만들 수 있습니다. Cloud KMS 키링 위치는 Cloud SQL 인스턴스를 만들려는 리전과 일치해야 합니다. 멀티 리전 또는 전역 리전 키는 작동하지 않습니다. 리전이 일치하지 않으면 Cloud SQL 인스턴스 생성 요청이 실패합니다.

Cloud KMS 키를 만들려면 다음 안내를 따르세요.

Console

  1. Google Cloud 콘솔에서 키 관리 페이지로 이동합니다.

    키 관리로 이동

  2. 키링 만들기를 클릭합니다.
  3. 키링 이름을 추가합니다. 이 이름을 기록해 둡니다. 서비스 계정에 키에 대한 액세스 권한을 부여할 때 필요하기 때문입니다.
  4. 키링 위치를 추가합니다.
  5. 만들기를 클릭합니다. 키 만들기 페이지가 열립니다.
  6. 키 이름을 추가합니다.
  7. 용도를 선택합니다(대칭 또는 비대칭).
  8. 순환 기간시작 날짜를 선택합니다.
  9. 만들기를 클릭합니다.
  10. 표에서 마지막 열에 있는 3개의 점을 클릭하고 리소스 ID 복사를 선택하거나 기록해 둡니다. 이것은 KMS_KEY_ID입니다. 서비스 계정에 키 액세스 권한을 부여할 때 KMS_KEY_ID가 필요합니다.

gcloud

  1. 새 키링을 만듭니다.
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    서비스 계정에 키 액세스 권한을 부여할 때 필요하므로 이 이름을 기록해 둡니다.
  2. 키링에 키를 만듭니다.
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    서비스 계정에 키 액세스 권한을 부여할 때 필요하므로 이 이름을 기록해 둡니다.

Terraform

키링을 만들려면 Terraform 리소스를 사용합니다.

resource "google_kms_key_ring" "keyring" {
  provider = google-beta
  name     = "keyring-name"
  location = "us-central1"
}

사용자를 만들려면 Terraform 리소스를 사용합니다.

resource "google_kms_crypto_key" "key" {
  provider = google-beta
  name     = "crypto-key-name"
  key_ring = google_kms_key_ring.keyring.id
  purpose  = "ENCRYPT_DECRYPT"
}

Terraform 구성을 적용합니다.

terraform apply

서비스 계정에 키에 대한 액세스 권한 부여

이 절차는 gcloud 또는 API를 사용하는 경우에만 수행하면 됩니다.

서비스 계정에 액세스 권한을 부여하려면 다음 명령을 실행합니다.

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloud-sql.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Terraform

키에 대한 액세스 권한을 부여하려면 Terraform 리소스를 사용합니다.

resource "google_kms_crypto_key_iam_binding" "crypto_key" {
  provider      = google-beta
  crypto_key_id = google_kms_crypto_key.key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

  members = [
    "serviceAccount:${google_project_service_identity.gcp_sa_cloud_sql.email}",
  ]
}

Terraform 구성을 적용합니다.

terraform apply

CMEK를 사용하여 Cloud SQL 인스턴스 만들기

고객 관리 암호화 키로 인스턴스를 만들려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. 데이터베이스 엔진을 선택합니다.
  4. 인스턴스의 이름을 입력합니다. 인스턴스 이름은 외부에 공개되므로 민감한 정보나 개인 식별 정보는 포함하지 마세요. 인스턴스 이름에 프로젝트 ID를 포함하지 않아도 됩니다. 필요한 경우 자동으로 생성됩니다(예: 로그 파일에서).
  5. 'root'@'%' 사용자의 비밀번호를 입력합니다.
  6. 인스턴스의 리전을 설정합니다. 인스턴스를 인스턴스에 액세스하는 리소스와 같은 리전에 배치합니다. 대부분의 경우 영역을 지정할 필요가 없습니다.
  7. 구성 옵션 섹션에서 머신 유형 및 스토리지에 도달할 때까지 모든 구성 옵션을 선택합니다.
  8. 머신 유형 및 스토리지를 펼칩니다.
  9. 암호화 섹션에서 고객 관리 키를 선택합니다.
  10. 드롭다운 메뉴에서 KMS 키를 선택하거나 KMS_KEY_ID를 직접 입력합니다. 인스턴스와 동일한 프로젝트 및 리전에 있는 KMS 키만 표시됩니다. 다른 프로젝트에 속하지만 동일한 리전에 있는 KMS 키를 선택하려면 키가 표시되지 않나요? 키 리소스 ID를 입력하세요를 선택하고 앞에서 기록한 KMS_KEY_ID를 입력합니다.
  11. 서비스 계정에 선택한 키를 사용하여 암호화 및 복호화할 수 있는 권한이 없으면 메시지가 표시됩니다. 이 경우 권한 부여를 클릭하여 서비스 계정에 선택한 KMS 키의 roles/cloudkms.cryptoKeyEncrypterDecrypter> IAM 역할을 부여합니다.
  12. 구성 옵션이 선택되면 만들기를 클릭합니다.
  13. 고객 관리 암호화 키 사용이 미치는 영향을 설명하는 메시지가 표시됩니다. 읽고 확인한 다음 인스턴스 만들기를 계속 진행합니다.

gcloud

gcloud sql instances create INSTANCE_NAME \
--project=PROJECT_ID \
--disk-encryption-key=KMS_KEY_ID \
--database-version=VERSION \
--tier=MACHINE_TYPE \
--region=REGION \
--root-password=INSERT-PASSWORD-HERE

Terraform

CMEK로 인스턴스를 만들려면 Terraform 리소스를 사용합니다.

resource "google_sql_database_instance" "mysql_instance_with_cmek" {
  name                = "mysql-instance-cmek"
  provider            = google-beta
  region              = "us-central1"
  database_version    = "MYSQL_8_0"
  encryption_key_name = google_kms_crypto_key.key.id
  settings {
    tier = "db-n1-standard-2"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

변경사항 삭제

변경사항을 삭제하려면 다음 단계를 따르세요.

  1. Terraform 구성 파일에서 삭제 보호를 사용 중지하려면 deletion_protection 인수를 false로 설정합니다.
    deletion_protection =  "false"
  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 업데이트된 Terraform 구성을 적용합니다.
    terraform apply
  1. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 이전에 Terraform 구성에 적용된 리소스를 삭제합니다.

    terraform destroy

REST v1

고객 관리 암호화 키를 사용하여 인스턴스를 만들려면 명령어에 diskEncryptionConfiguration을 전달합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: 프로젝트 ID
  • instance-id: 인스턴스 ID
  • region: 리전
  • database-version: Enumum 버전 문자열(예: MYSQL_8_0)
  • kms-resource-id: 키를 만들 때 받은 ID

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

JSON 요청 본문:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
이 예시에서는 instances:insert가 사용됩니다.

REST v1beta4

고객 관리 암호화 키를 사용하여 인스턴스를 만들려면 명령어에 diskEncryptionConfiguration을 전달합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • project-id: 프로젝트 ID
  • instance-id: 인스턴스 ID
  • region: 리전
  • database-version: Enumum 버전 문자열(예: MYSQL_8_0)
  • kms-resource-id: 키를 만들 때 받은 ID

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

JSON 요청 본문:

{
  "name":"instance-id",
  "region":"region",
  "databaseVersion": "database-version",
  "diskEncryptionConfiguration" :
  {
      "kmsKeyName" : "kms-resource-id"
  },
  "settings":
  {
     "backupConfiguration":
      {
         "binaryLogEnabled": true,
         "enabled":true
      }
   }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
이 예시에서는 instances:insert가 사용됩니다.

CMEK가 사용 설정된 인스턴스의 백업 만들기

Cloud SQL 인스턴스의 백업을 만들면 기본 인스턴스의 고객 관리 키와 동일한 기본 키 버전으로 백업이 암호화됩니다.

주문형 백업과 자동 백업 만들기 및 관리를 참조하세요.

백업 만들기 양식에 다음 메시지가 표시됩니다. '백업이 인스턴스의 고객 관리 암호화 키의 기본 버전으로 암호화됩니다. 키 버전을 폐기하거나 사용 중지하면 이 키 버전으로 암호화한 모든 백업 데이터가 영구적으로 사라집니다. Cloud KMS에서 키의 기본 버전을 확인할 수 있습니다.'

백업 페이지에서 고객 관리 암호화 키로 사용 설정된 백업 목록에는 두 개의 추가 열이 있습니다. 한 개의 열은 CMEK가 사용 설정된 인스턴스를 위한 백업을 나타내고, 다른 한 개의 열은 백업을 암호화하는 데 사용되는 키 버전을 표시합니다.

CMEK가 사용 설정된 인스턴스의 복제본 만들기

같은 리전에서 Cloud SQL 인스턴스의 읽기 복제본을 만들면 복제본은 상위 인스턴스와 동일한 고객 관리 암호화 키를 상속합니다. 다른 리전에 읽기 복제본을 만드는 경우 선택할 수 있는 새로운 고객 관리 암호화 키 목록이 제공됩니다. 각 리전은 자체 키 모음을 사용합니다.

읽기 복제본 만들기를 참조하세요.

읽기 복제본 만들기 페이지에 다음 정보가 표시됩니다.

  1. 암호화에는 고객 관리가 표시됩니다.
  2. 복제본의 암호화 키가 표시됩니다.
  3. 다음 메시지가 표시됩니다. '복제본이 기본 인스턴스의 고객 관리 키로 암호화됩니다. 키를 폐기하면 이 키로 암호화한 모든 데이터가 영구적으로 사라집니다.'

리전 간 복제본의 경우 다음 메시지가 표시됩니다.

'리전 간 복제본은 선택된 고객 관리 키로 암호화됩니다. 키를 폐기하면 이 키로 암호화한 모든 데이터가 영구적으로 사라집니다.'

CMEK가 사용 설정된 인스턴스의 클론 만들기

Cloud SQL 인스턴스의 클론을 만들면 클론은 소스 인스턴스를 암호화하는 데 사용된 것과 동일한 고객 관리 암호화 키를 상속합니다.

인스턴스 클론을 참조하세요.

클론 만들기 페이지에 다음 정보가 표시됩니다.

  1. 암호화에는 고객 관리가 표시됩니다.
  2. 클론의 암호화 키가 표시됩니다.
  3. 다음 메시지가 표시됩니다. '클론이 소스 인스턴스의 고객 관리 키로 암호화됩니다. 키를 폐기하면 이 키로 암호화한 모든 데이터가 영구적으로 사라집니다.'

CMEK가 사용 설정된 인스턴스의 키 정보 보기

Cloud SQL 인스턴스를 성공적으로 만들면 인스턴스 목록 또는 인스턴스 개요 페이지에서 고객 관리 암호화 키를 사용하여 생성된 인스턴스를 확인할 수 있습니다. 세부정보에는 인스턴스를 만드는 데 사용된 키도 표시됩니다.

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스 목록에서 암호화 열이 표시될 때까지 오른쪽으로 스크롤합니다. 이 열에는 Google 관리고객 관리가 표시됩니다.
  3. 인스턴스 이름을 클릭하여 개요 페이지를 엽니다. 고객 관리 암호화 키가 구성 창에 나열됩니다.

CMEK가 사용 설정된 기존 인스턴스 또는 복제본 다시 암호화

최신 기본 키 버전으로 기존 Cloud SQL 인스턴스 및 복제본을 다시 암호화할 수 있습니다. CMEK가 사용 설정된 기존 인스턴스 또는 복제본을 다시 암호화하는 방법에 대한 자세한 내용은 키 정보를 참조하세요.

새 기본 키 버전 가져오기

  • 인스턴스 또는 복제본을 새 버전으로 다시 암호화하려면 새 기본 키 버전이 필요합니다. 인스턴스의 새 키 버전이 필요하면 Cloud Key Management Service를 사용하여 키를 순환해야 합니다. 기본 키를 순환하려면 키 순환을 참조하세요.

  • 키 순환이 완료되면 인스턴스를 다시 암호화하기 전에 기본 키 변경사항이 전파될 때까지 기다립니다. 키 버전 변경이 일관되지 않으면 다시 암호화한 후에도 인스턴스가 이전 키 버전을 계속 사용합니다. 자세한 내용은 키 버전의 일관성을 참조하세요.

CMEK가 사용 설정된 인스턴스 다시 암호화

키 순환이 완료되면 기존 CMEK가 사용 설정된 인스턴스 또는 복제본을 다시 암호화합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. 구성 섹션에서 인스턴스 다시 암호화를 클릭합니다.
  4. 대화상자가 나타나면 다시 암호화를 클릭하여 선택을 확인합니다.

gcloud

인스턴스 또는 복제본을 다시 암호화하려면 다음 명령어를 실행합니다.

gcloud sql instances reencrypt INSTANCE_NAME
INSTANCE_NAME을 다시 암호화하려는 인스턴스 또는 복제본의 이름으로 바꿉니다.

REST v1

새 키로 인스턴스 또는 복제본을 다시 암호화하려면 다음 명령어를 실행합니다.

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:19:09.503Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

REST v1beta4

새 키로 인스턴스 또는 복제본을 다시 암호화하려면 다음 명령어를 실행합니다.
    POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID

HTTP 메서드 및 URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/reencrypt

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2023-06-28T21:22:13.663Z",
  "operationType": "REENCRYPT",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

다시 암호화 자동 백업

기본 인스턴스를 새 기본 키 버전으로 다시 암호화하면 Cloud SQL에서 다시 암호화 백업이라는 주문형 백업을 자동으로 만듭니다.

Cloud SQL 인스턴스의 백업 목록에서 다시 암호화 백업은 on-demand 유형으로 나열되고 backup created automatically for data before CMEK re-encryption 라벨이 지정됩니다.

다른 주문형 백업과 마찬가지로 백업을 삭제하거나 인스턴스를 삭제할 때까지 다시 암호화 백업은 유지됩니다.

다시 암호화 제한사항

인스턴스를 다시 암호화할 때는 다음 제한사항에 유의하세요.

  • 다시 암호화 작업이 진행되는 동안에는 인스턴스에서 다른 관리 작업을 수행할 수 없습니다.
  • 다시 암호화 작업은 인스턴스 또는 복제본 크기에 따라 다운타임을 트리거합니다.
  • 인스턴스의 복제본은 인스턴스가 암호화될 때 다시 암호화되지 않습니다. 각 복제본을 개별적으로 다시 암호화해야 합니다.
  • 백업은 인스턴스를 다시 암호화할 때 새 키 버전으로 자동으로 다시 암호화되지 않습니다. 백업이 완료된 후 백업 또는 point-in-time recovery를 복원하려면 백업이 암호화된 Cloud KMS 키 버전을 유지해야 합니다.

문제 해결은 다시 암호화 문제 해결 표를 참조하세요.

Cloud 외부 키 관리자(Cloud EKM) 사용

Cloud SQL 인스턴스의 데이터를 보호하려면 지원되는 외부 키 관리 파트너 내에서 관리하는 키를 사용하면 됩니다. 자세한 내용은 고려사항 섹션을 포함한 Cloud 외부 키 관리자를 참조하세요.

Cloud EKM 키를 만들 준비가 되면 Cloud EKM 키 관리를 참조하세요. 키가 생성된 후 Cloud SQL 인스턴스를 만들 때 키 이름을 제공합니다.

키 액세스 근거(KAJ)를 Cloud EKM의 일부로 사용할 수 있습니다. KAJ를 사용하면 각 Cloud EKM 요청의 이유를 볼 수 있습니다. 또한 제공된 근거에 따라 요청을 자동으로 승인하거나 거부할 수 있습니다. 자세한 내용은 개요를 참조하세요.

따라서 KAJ는 각 데이터 복호화 시도에 대한 근거를 제공하여 데이터를 추가로 제어합니다.

Google은 외부 키 관리 파트너 시스템에서 키의 가용성을 제어할 수 없습니다.

키 버전 중지 및 다시 사용 설정

다음 주제를 참조하세요.

문제 해결

이 섹션에서는 CMEK가 사용 설정된 인스턴스를 설정하거나 사용하는 중에 오류 메시지가 표시될 때 수행할 작업을 설명합니다.

Cloud KMS 오류, 역할 또는 권한 누락으로 인해 생성, 클론, 업데이트와 같은 Cloud SQL 관리자 작업이 실패할 수 있습니다. Cloud KMS 키 버전이 누락되거나, Cloud KMS 키 버전이 중지 또는 삭제되거나, Cloud KMS 키 버전에 액세스할 수 있는 IAM 권한이 없거나, Cloud KMS 키 버전이 Cloud SQL 인스턴스와 다른 리전에 있는 경우 등에는 일반적으로 작업이 실패하게 됩니다. 일반적인 문제를 진단하고 해결하려면 다음 문제 해결 표를 사용하세요.

고객 관리 암호화 키 문제 해결 표

발생 오류 문제 원인 해결 방법
제품별, 프로젝트별 서비스 계정을 찾을 수 없음 서비스 계정 이름이 잘못되었습니다. 올바른 사용자 프로젝트의 서비스 계정을 만들었는지 확인합니다.

서비스 계정 페이지로 이동

서비스 계정에 액세스 권한을 부여할 수 없음 사용자 계정에 이 키 버전에 대한 액세스 권한을 부여할 수 있는 권한이 없습니다. 사용자 계정 또는 서비스 계정에 조직 관리자 역할을 추가합니다.

IAM 계정 페이지로 이동

Cloud KMS 키 버전이 삭제됨 키 버전이 삭제되었습니다. 키 버전이 삭제되면 데이터를 암호화하거나 복호화하는 데 사용할 수 없습니다.
Cloud KMS 키 버전이 사용 중지됨 키 버전이 사용 중지되었습니다. Cloud KMS 키 버전을 다시 사용 설정합니다.

암호화 키 페이지로 이동

Cloud KMS 키를 사용할 수 있는 권한이 없음 Cloud SQL 인스턴스에서 작업을 실행하는 데 사용하는 사용자 또는 서비스 계정에 cloudkms.cryptoKeyEncrypterDecrypter 역할이 없거나 Cloud KMS 키 버전이 없습니다. 사용자 또는 서비스 계정에 cloudkms.cryptoKeyEncrypterDecrypter 역할을 추가합니다.

IAM 계정 페이지로 이동


이 역할이 계정에 이미 있으면 키 만들기를 참조하여 새 키 버전을 만드는 방법을 알아보세요. 참고를 참조하세요.
Cloud KMS 키를 찾을 수 없음 키 버전이 존재하지 않습니다. 새 키 버전을 만듭니다. 키 만들기를 참조하세요. 참고를 참조하세요.
Cloud SQL 인스턴스와 Cloud KMS 키 버전이 서로 다른 리전에 있음 Cloud KMS 키 버전과 Cloud SQL 인스턴스는 같은 리전에 있어야 합니다. Cloud KMS 키 버전이 전역 리전 또는 멀티 리전에 있는 경우에는 작동하지 않습니다. 인스턴스를 만들려는 리전에 키 버전을 만듭니다. 키 만들기를 참조하세요. 참고를 참조하세요.

다시 암호화 문제 해결 표

발생 오류 문제 원인 해결 방법
Cloud KMS 키에 액세스할 수 없으므로 CMEK 리소스 다시 암호화가 실패했습니다. 기본 키 버전이 사용 설정되어 있고 권한이 올바르게 부여되었는지 확인하세요. 키 버전이 사용 설정되지 않았거나 적절한 권한이 없습니다.

Cloud KMS 키 버전을 다시 사용 설정합니다.

암호화 키 페이지로 이동

적절한 권한이 있는지 확인합니다.

IAM 계정 페이지로 이동

내부 서버 오류로 인해 CMEK 리소스 다시 암호화가 실패했습니다. 나중에 다시 시도해 주세요. 내부 서버 오류가 발생했습니다. 다시 암호화를 재시도합니다. 자세한 내용은 기존 CMEK가 사용 설정된 인스턴스 또는 복제본 다시 암호화를 참조하세요.

다음 단계