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

이 페이지에서는 Bigtable용 고객 관리 암호화 키(CMEK)와 관련된 태스크를 수행하는 방법을 설명합니다. CMEK를 사용 설정하는 시기와 이유를 포함한 일반적인 CMEK에 대한 자세한 내용은 Cloud KMS 문서를 참조하세요.

모든 키 관리 작업에는 Google Cloud Console을 사용하는 것이 좋습니다. Google Cloud CLI를 사용하려는 경우 Bigtable용 gcloud CLI를 설치하세요.

CMEK 키 준비

CMEK로 보호되는 Bigtable 리소스를 만들려면 먼저 다음 단계를 완료하여 인스턴스의 클러스터가 위치하는 각 리전에 CMEK 키를 만들어야 합니다.

  1. Bigtable 서비스 에이전트를 만들거나 가져옵니다.
  2. CMEK 키를 만듭니다.
  3. 해당 키의 IAM 설정을 구성합니다.

Bigtable 서비스 에이전트 만들기

CMEK 키를 만들기 전에 Bigtable 서비스 에이전트가 있어야 하는데 이는 Bigtable이 키에 액세스하는 데 사용하는 Google 관리 서비스 계정의 유형입니다.

Console

Google Cloud Console에서 서비스 에이전트를 만들 수 없습니다. 하지만 Google Cloud Console에서 키를 생성하는 경우 Cloud KMS 암호화/복호화 역할을 부여하라는 메시지가 표시되며 서비스 에이전트가 아직 존재하지 않는 경우 해당 시점에 생성됩니다.

gcloud

  1. gcloud services identity create 명령어를 실행하여 Bigtable에서 사용자 대신 CMEK 키에 액세스하는 데 사용하는 서비스 에이전트를 확인합니다. 이 명령어는 서비스 계정이 아직 존재하지 않는 경우 해당 계정을 만든 후 표시합니다.

    gcloud beta services identity create \
        --service=bigtableadmin.googleapis.com \
        --project CBT_PROJECT
    

    CBT_PROJECT를 Bigtable 리소스가 포함된 프로젝트로 바꿉니다.

    이 명령어는 이메일 주소와 같은 형식의 서비스 에이전트 ID를 표시합니다. 나중 단계에서 사용하기 때문에 출력 이메일 문자열을 기록합니다.

    Service identity created:
    service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
    

키 만들기

Cloud KMS에서 직접 생성된 키 또는 Cloud 외부 키 관리자에서 사용할 수 있는 외부 관리 키를 사용할 수 있습니다.

  1. 키를 관리할 Google Cloud 프로젝트에서 다음을 수행합니다.

    1. Cloud KMS API를 사용 설정합니다.

    2. 다음 옵션 중 하나를 사용하여 키링과 키를 만듭니다.

      Cloud KMS 키 위치는 함께 사용할 Bigtable 클러스터와 동일해야 합니다. 예를 들어 us-central1(아이오와)에 키링과 키를 만드는 경우 us-central1-a, us-central1-b, us-central1-c의 클러스터를 해당 키링의 키로 보호할 수 있습니다.

키의 IAM 설정 구성

Console

서비스 에이전트에 Cloud KMS 역할을 부여하려면 다음을 수행합니다. 더 낮은 세분화를 원하는 경우 키 또는 키링 수준에서 권한을 부여할 수도 있습니다.

  1. Google Cloud Console에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 추가를 클릭합니다.

  3. Bigtable 서비스 에이전트의 이메일 형식 ID를 입력합니다.

  4. Cloud KMS CryptoKey 암호화/복호화 역할을 선택합니다.

  5. 저장을 클릭합니다.

gcloud

  1. 서비스 에이전트에 cloudkms.cryptoKeyEncrypterDecrypter 역할을 부여합니다.

    gcloud kms keys add-iam-policy-binding KMS_KEY \
        --keyring KMS_KEYRING\
        --location KMS_LOCATION \
        --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT
    

    다음을 제공합니다.

    • KMS_KEY: 키에 할당한 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링
    • KMS_LOCATION : 키링이 포함된 리전
    • SERVICE_ACCOUNT_EMAIL: 액세스 권한을 부여하는 서비스 에이전트의 이메일 형식 식별자
    • KMS_PROJECT: 키가 포함된 프로젝트

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

CMEK 키를 만들고 구성한 후에는 CMEK로 보호되는 인스턴스를 만들 수 있습니다. Google 기본 암호화로 보호되는 기존 Bigtable 인스턴스는 CMEK를 사용하도록 변환될 수 없으며 만들 때에 암호화 유형과 키만 선택할 수 있습니다.

인스턴스 만들기의 단계에 따라 CMEK로 보호되는 인스턴스를 만드세요.

사용 중인 키 보기

키 버전에 대한 정보는 encryption_info 필드에서 옵니다.

테이블의 CMEK 키 버전 정보를 보려면 다음 단계를 완료하세요.

Console

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

    인스턴스 목록 열기

  2. 테이블이 포함된 인스턴스의 이름을 클릭하여 인스턴스 세부정보 페이지를 열고 인스턴스의 클러스터 목록을 확인합니다.

  3. 클러스터 ID 옆의 암호화 키에서 키 이름을 클릭하여 클러스터 키의 버전 페이지를 확인합니다.

gcloud

각 클러스터의 경우 다음과 같이 CMEK 구성을 확인할 수 있습니다.

    gcloud bigtable clusters describe CLUSTER_ID \
        --instance INSTANCE_ID --project CBT_PROJECT

다음을 제공합니다.

  • CLUSTER_ID: 클러스터의 영구 식별자
  • INSTANCE_ID: 인스턴스의 영구 식별자
  • CBT_PROJECT: Bigtable 리소스가 포함된 프로젝트

이 명령어는 다음과 비슷한 출력을 표시합니다.

    defaultStorageType: SSD
    encryptionConfig:
      kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
    location: projects/cloud-bigtable-project/locations/us-central1-a
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
    serveNodes: 1
    state: READY

키 중지

CMEK 키 버전을 사용 중지하면 이 키 버전으로 보호되는 모든 데이터에 대한 액세스가 정지됩니다. 키 버전 폐기는 이 작업의 영구적(24시간 후) 대응입니다. 하나 또는 일부 클러스터의 키만 사용 중지하는 대신 인스턴스의 모든 키를 항상 사용 중지하세요.

Console

권장되는 방법입니다. Google Cloud Console을 사용하면 키의 모든 버전을 한 번에 사용 중지할 수 있습니다.

각 키 버전에 대한 안내를 따르세요.

gcloud

Google Cloud Console을 사용하여 키를 사용 중지하는 것이 좋습니다. 대신에 Google Cloud CLI를 사용하려면 다음 명령어를 실행합니다.

  1. CMEK 키의 모든 버전을 나열합니다.

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    다음을 제공합니다.

    • KMS_KEY: CMEK 키의 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링
    • KMS_LOCATION : 키링이 포함된 리전
    • KMS_PROJECT: 키가 포함된 프로젝트

    출력은 다음과 비슷합니다.

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      ENABLED
    
  2. 모든 버전을 사용 중지합니다.

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions disable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    다음을 제공합니다.

    • 1 2 3 4: 사용 중지하는 버전
    • KMS_KEY: CMEK 키의 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링
    • KMS_LOCATION : 키링이 포함된 리전
    • KMS_PROJECT: 키가 포함된 프로젝트

    모든 키 버전을 다시 나열하면 상태가 DISABLED으로 바뀌지만 Bigtable가 이 상태 변경을 처리하는 데 최대 4시간이 걸릴 수 있습니다.

  3. [선택사항] 4시간을 기다린 후에 사용 중지된 CMEK의 상태를 확인하려면 다음 명령어를 실행합니다.

     gcloud bigtable instances tables describe TABLE_ID \
         --instance INSTANCE_ID --view ENCRYPTION \
         --project CBT_PROJECT
    

    다음을 제공합니다.

    • TABLE_ID: 테이블의 영구 식별자
    • INSTANCE_ID: 인스턴스의 영구 식별자
    • CBT_PROJECT: Bigtable 리소스가 포함된 프로젝트

    이 명령어는 다음과 비슷한 출력을 표시합니다.

    clusterStates:
      CLUSTER:
        encryptionInfo:
        - encryptionStatus:
            code: 9
            details:
            - '@type': type.googleapis.com/google.rpc.PreconditionFailure
              violations:
              - subject: KMS_KEY_NAME/cryptoKeyVersions/<int>
                type: KEY_DISABLED
            message: KMS_KEY_NAME is not enabled, current state is: DISABLED.
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int>
    name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
    
  4. [선택사항] 인스턴스의 클러스터가 사용 중지되었는지 확인하려면 다음 명령어를 실행합니다.

    gcloud bigtable clusters list --instances INSTANCE_ID
        --project CBT_PROJECT
    

    다음을 제공합니다.

    • INSTANCE_ID: 인스턴스의 영구 식별자
    • CBT_PROJECT: Bigtable 리소스가 포함된 프로젝트

    이 명령어는 다음과 비슷한 출력을 표시합니다.

    NAME              ZONE           NODES  STORAGE    STATE
    my-cluster        us-central1-a  1      SSD        DISABLED
    my-other-cluster  us-central1-b  1      SSD        DISABLED
    

키 사용 설정

키 버전이 사용 중지된 경우 Bigtable 리소스에 대한 액세스 권한을 다시 가져올 수 있도록 다시 사용 설정할 수 있습니다. 이 옵션은 키 버전이 사용 중지된 후 30일 동안 사용할 수 있습니다.

Console

권장되는 방법입니다. Google Cloud Console을 사용하면 키의 모든 버전을 한 번에 사용 설정할 수 있습니다.

각 키 버전에 대한 안내를 따르세요.

gcloud

Google Cloud Console을 사용하여 키를 사용 설정하는 것이 좋습니다. 대신에 Google Cloud CLI를 사용하려면 다음 명령어를 실행합니다.

  1. 버전 목록을 보고 키의 모든 버전을 확인합니다.

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    다음을 제공합니다.

    • KMS_KEY: CMEK 키의 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링
    • KMS_LOCATION : 키링이 포함된 리전
    • KMS_PROJECT: 키가 포함된 프로젝트

    이 명령어는 다음과 비슷한 출력을 표시합니다.

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      DISABLED
    

    kms keys versions enable 명령어를 실행하여 나열된 모든 버전을 제공합니다. 예시 출력을 사용하면 명령어는 다음과 유사합니다.

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions enable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    다음을 제공합니다.

    • 1 2 3 4: 사용 중지하는 버전
    • KMS_KEY: CMEK 키의 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링
    • KMS_LOCATION : 키링이 포함된 리전
    • KMS_PROJECT: 키가 포함된 프로젝트

    키 버전을 다시 나열하면 상태가 ENABLED으로 바뀝니다.

Cloud KMS 키의 감사 로그 보기

Cloud KMS 데이터 액세스 감사 로그를 사용 설정하기 전에 Cloud 감사 로그를 숙지해야 합니다.

Cloud KMS 데이터 액세스 감사 로그는 Bigtable 또는 CMEK 키를 사용하도록 구성된 다른 제품이 Cloud KMS에 암호화/복호화 호출을 하는 시점을 보여줍니다. Bigtable은 모든 데이터 요청에 암호화/복호화 호출을 실행하지 않으며, 대신에 정기적으로 키를 확인하는 폴러를 유지합니다. 폴링 결과는 감사 로그에 표시됩니다.

Google Cloud Console에서 감사 로그를 설정하고 상호작용할 수 있습니다.

  1. 프로젝트에서 Cloud KMS API에 대해 로깅이 사용 설정되었는지 확인합니다.

  2. Google Cloud Console에서 Cloud Logging으로 이동합니다.

    Cloud Logging으로 이동

  3. 쿼리 빌더에 다음 줄을 추가하여 로그 항목을 Cloud KMS로 제한합니다.

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    

    다음을 제공합니다.

    • KMS_KEY: CMEK 키의 이름
    • KMS_KEYRING: 키가 포함된 KMS 키링

    로그는 각 클러스터의 테이블당 약 5분마다 일부 로그 항목을 표시합니다. 로그 항목은 다음 예시와 유사하게 표시됩니다.

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
    

감사 로그 해석에 대한 자세한 내용은 감사 로그 이해를 참조하세요.

키 사용량 보기

Cloud KMS를 사용하면 키가 보호하는 Bigtable 리소스에 대해 다음 정보를 볼 수 있습니다.

  • 키 사용량 요약: 키를 사용하는 보호 리소스 및 프로젝트에 대한 정보를 포함합니다.
  • 키 사용량 세부정보: 키가 보호하는 리소스 및 이 키에 의존하는 리소스를 식별합니다.

다음 Bigtable 리소스가 지원됩니다.

  • bigtableadmin.googleapis.com/Backup
  • bigtableadmin.googleapis.com/Cluster
  • bigtableadmin.googleapis.com/Table

키 사용량 보기에 대한 자세한 내용은 키 사용량 정보 보기를 참조하세요.

테이블의 암호화 상태 보기

Console

Google Cloud Console에서 테이블의 암호화 상태를 볼 수 없습니다.

gcloud

테이블의 CMEK 세부정보를 보려면 viewENCRYPTION 또는 FULL로 설정합니다. 응답에는 사용 중인 키 버전과 Bigtable에서 보여지는 상태가 포함됩니다.

    gcloud alpha bigtable instances tables describe TABLE_ID \
        --instance INSTANCE_ID --view ENCRYPTION \
        --project CBT_PROJECT

다음을 제공합니다.

  • TABLE_ID: 클러스터의 영구 식별자
  • INSTANCE_ID: 백업이 포함된 인스턴스의 영구 식별자
  • CBT_PROJECT: Bigtable 리소스가 포함된 프로젝트

이 명령어는 다음과 비슷한 출력을 표시합니다.

    clusterStates:
      my-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      my-other-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table

백업의 암호화 세부정보 보기

백업은 원래 키 버전에 고정된 상태로 유지됩니다. Cloud KMS의 키 버전 순환은 백업 복호화에 사용되는 버전을 순환하지 않습니다.

Console

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

    인스턴스 목록 열기

  2. 인스턴스 이름을 클릭하여 인스턴스 세부정보 페이지를 엽니다.

  3. 왼쪽 탐색창에서 백업을 클릭합니다.

각 백업의 키 이름과 키 버전은 고객 관리 키에 나열됩니다.

gcloud

다음 명령어를 실행하여 백업의 암호화 정보를 확인합니다.

    gcloud alpha bigtable backups describe BACKUP_ID \
        --instance INSTANCE_ID --cluster CLUSTER_ID \
        --project CBT_PROJECT

다음을 제공합니다.

  • BACKUP_ID: 백업에 할당된 ID
  • CLUSTER_ID: 클러스터의 영구 식별자
  • INSTANCE_ID: 백업이 포함된 인스턴스의 영구 식별자
  • CBT_PROJECT: Bigtable 리소스가 포함된 프로젝트

이 명령어는 다음과 유사한 출력을 반환합니다. kmsKeyVersion는 백업이 고정된 CMEK 키 버전입니다. 키 버전 상태는 보고되지 않습니다.

    encryptionInfo:
      encryptionStatus:
        code: 2
        message: Status of the associated key version is not tracked.
      encryptionType: CUSTOMER_MANAGED_ENCRYPTION
      kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
    endTime: '2020-09-01T00:03:26.568600Z'
    expireTime: '2020-09-02T00:03:25.436473Z'
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
    sizeBytes: '3780'

다음 단계