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

이 항목에서는 Google Kubernetes Engine(GKE)에서 고객 관리 암호화 키(CMEK)를 사용하는 방법을 설명합니다. 키 관리 방식을 제어해야 하는 경우 키 관리 서비스 및 CMEK를 사용하여 GKE 클러스터의 Persistent Disk를 보호할 수 있습니다.

개요

기본적으로 Google Cloud는 미사용 고객 콘텐츠를 암호화하고 GKE는 사용자의 별도 조치 없이도 암호화를 자동으로 관리합니다.

암호화 키 순환을 직접 제어하고 관리하려면 고객 관리 암호화 키(CMEK)를 사용하면 됩니다. 이러한 키는 데이터 암호화용으로 사용되는 데이터 암호화 키를 암호화하는 데 사용됩니다. 자세한 내용은 키 관리를 참조하세요.

CMEK로 암호화된 디스크는 GKE에서 동적으로 프로비저닝된 PersistentVolume으로 사용할 수 있습니다.

GKE에서 CMEK는 클러스터의 노드에 연결된 영구 디스크의 데이터를 보호할 수 있습니다. 부팅 디스크 및 제어 영역 디스크는 CMEK로 보호할 수 없습니다.

시작하기 전에

새로 생성된 Persistent Disk를 암호화하려면 다음 안내를 따르세요. 새 KMS 키 또는 기존 KMS 키를 사용하여 새 클러스터나 기존 클러스터에서 CMEK를 사용 설정할 수 있습니다.

이러한 안내는 GKE 클러스터당 한 번만 수행해야 합니다. 그러면 다음 항목이 생성됩니다.

  • 새 GKE 클러스터(필요한 경우)
  • 새 KMS 키 링, 키, 키 버전(필요한 경우)
  • Kubernetes에 의해 프로비저닝된 디스크가 해당 KMS 키를 사용하여 자동으로 암호화되도록 하는 StorageClass
  1. 필요한 경우 GKE 클러스터를 만듭니다.
  2. Compute Engine Persistent Disk CSI 드라이버를 클러스터에 배포합니다.
  3. 아래에 설명된 다음 단계에 따라 Cloud KMS 키로 리소스 보호의 '시작하기 전에' 섹션을 완료하여 KMS API를 사용 설정하고 키를 만듭니다.

    1. GKE 클러스터와 같은 리전에 키링을 만듭니다.
    2. Compute Engine 서비스 에이전트(service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com)에 KMS CryptoKey 암호화/복호화 역할(roles/cloudkms.cryptoKeyEncrypterDecrypter)을 할당합니다. 이렇게 하면 GKE에서 키에 액세스할 수 있습니다.

새 KMS 키를 참조하는 StorageClass 만들기

  1. 아래 내용을 YAML 파일에 복사합니다. 이 페이지의 나머지 부분에서는 이를 gcepd-sc.yaml이라고 합니다. 이 구성을 사용하면 암호화된 볼륨을 동적으로 프로비저닝할 수 있습니다.

    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: csi-gce-pd
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]
    
    • disk-encryption-kms-key는 새 디스크를 암호화하는 데 사용할 키의 정규화된 리소스 식별자여야 합니다. KMS 키를 참조하도록 대괄호 안의 항목을 적절하게 바꿉니다.
    • disk-encryption-kms-key의 값(예: keyRingscryptoKeys)은 대소문자를 구분합니다. 잘못된 값으로 새 볼륨을 프로비저닝하면 invalidResourceUsage 오류가 발생합니다.
    • StorageClass를 기본값으로 설정할 수 있습니다.
  2. kubectl을 사용하여 GKE 클러스터에서 StorageClass를 배포합니다.

    kubectl apply -f gcepd-sc.yaml
  3. 마지막으로 StorageClass가 Compute Engine Persistent Disk CSI 드라이버를 사용했으며 키의 ID를 포함하는지 확인합니다.

명령어의 출력에서 다음을 확인합니다.

  • 준비자가 pd.csi.storage.gke.io로 설정되어 있습니다.
  • disk-encryption-kms-key 다음에 키의 ID가 나옵니다.

    kubectl describe storageclass csi-gce-pd
    Name:                  csi-gce-pd
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:
    **disk-encryption-kms-key=projects/my-project/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key,type=pd-standard**
    AllowVolumeExpansion:  unset
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none
    

GKE에서 암호화된 Persistent Disk 만들기

이 섹션에서는 새 StorageClass 및 KMS 키를 사용하여 암호화된 Kubernetes 스토리지 볼륨을 동적으로 프로비저닝합니다.

암호화된 Compute Engine Persistent Disk를 동적으로 프로비저닝

  1. 아래 내용을 pvc.yaml이라는 새 파일에 복사하고 storageClassName을 새로 만든 StorageClass의 이름으로 업데이트합니다.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-gce-pd
  resources:
    requests:
      storage: 6Gi
  1. kubectl을 사용하여 GKE 클러스터에 PersistentVolumeClaim(PVC)을 적용합니다.

    kubectl apply -f pvc.yaml
  2. 클러스터 PersistentVolumeClaim의 상태를 확인하여 PVC가 생성되었고 새로 프로비저닝된 PersistentVolume에 바인딩되었는지 확인합니다.

    kubectl get pvc
    NAME      STATUS    VOLUME
    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    podpvc     Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi
        RWO            csi-gce-pd     9s
    

이제 CMEK로 보호되는 Persistent Disk를 GKE 클러스터와 함께 사용할 수 있습니다.

Persistent Disk에서 CMEK 보호 제거

Persistent Disk에서 CMEK 보호를 제거하려면 Compute Engine 문서 의 지침을 따르세요.

다음 단계

CMEK에 대한 자세한 내용은 다음을 참조하세요.