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

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

시작하기 전에

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

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud SDK 설치 및 초기화
  5. 사용자 계정에 Cloud SQL 관리자 역할이 있는지 확인합니다.

    IAM 페이지로 이동

  6. Cloud Key Management Service API를 사용 설정합니다.

    API 사용 설정

  7. Cloud SQL Admin API를 사용 설정합니다.

    API 사용 설정

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

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

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

서비스 계정 만들기

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

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

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

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

gcloud 명령줄 도구로 서비스 계정을 만들려면 다음 명령어를 실행합니다.

gcloud beta services identity create --service=sqladmin.googleapis.com \
             --project=[USER_PROJECT]

이전 명령어는 다음 형식을 사용하여 서비스 계정 이름을 반환합니다.

service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com

예를 들면 다음과 같습니다.

service-534582264470@gcp-sa-cloud-sql.iam.gserviceaccount.com

이 서비스 계정 이름은 서비스 계정에 키 액세스 권한 부여의 절차를 진행하면서 사용합니다.

키 만들기

참고: Cloud EKM 서비스를 통해 CMEK로 외부 관리 키를 사용하여 Cloud KMS를 통해 이용 가능한 키를 생성할 수 있습니다. 자세한 내용은 외부 키 만들기를 참조하세요.

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

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

Console

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

gcloud

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

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

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

서비스 계정에 액세스 권한을 부여하려면 다음 안내를 따르세요.

  gcloud kms keys add-iam-policy-binding 
[KEY_NAME] --location [LOCATION] --keyring [KEY_RING_NAME]
--member serviceAccount:service-[PROJECT_NUMBER]@gcp-sa-cloud-sql.iam.gserviceaccount.com
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

CMEK로 Cloud SQL 인스턴스 만들기

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

Console

  1. Google Cloud Console의 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스 페이지로 이동

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

gcloud

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

REST v1beta4

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

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

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

HTTP 메서드 및 URL:

POST https://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
이 REST API는 Instances:Insert를 사용합니다.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스 페이지로 이동

  2. 인스턴스 목록에서 암호화 열이 표시될 때까지 오른쪽으로 스크롤합니다. 이 열에는 Google 관리고객 관리가 표시됩니다.

  3. 인스턴스 이름을 클릭하여 개요 페이지를 엽니다. 고객 관리 암호화 키가 구성 창에 나열됩니다.

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

다음 주제를 참조하세요.

문제해결

이 섹션에서는 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 키 버전이 전역 리전 또는 멀티 리전에 있는 경우에는 작동하지 않습니다. 인스턴스를 만들려는 리전에 키 버전을 만듭니다. 키 만들기를 참조하세요. 참고를 참조하세요.

다음 단계