Como usar chaves de criptografia gerenciadas pelo cliente (CMEK)

Neste tópico, você aprenderá como usar as chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) no Google Kubernetes Engine (GKE). Se você precisa controlar a gestão de suas chaves, use o Cloud Key Management Service e CMEK para proteger discos permanentes no seu cluster do GKE.

Visão geral

Por padrão, o Google Cloud Platform criptografa conteúdo de cliente em repouso, e o GKE administra a criptografia para você automaticamente.

Se você quiser controlar e gerenciar a rotação de chave de criptografia, use as chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês). Essas chaves são usadas para criptografar as chaves de criptografia que criptografam seus dados. Para mais informações, consulte Gerenciamento de chaves.

Discos criptografados por CMEK estão disponíveis no GKE como um PersistentVolume dinamicamente provisionado.

No GKE, CMEK pode proteger dados em discos permanentes anexados a nós no cluster. Discos de inicialização e discos de plano de controle não podem ser protegidos com CMEK.

Antes de começar

Conclua estas instruções para criptografar discos permanentes recém-criados. É possível ativar CMEK em um cluster novo ou atual, usando uma chave nova ou atual do Cloud KMS.

Essas instruções precisam ser concluídas uma vez por cluster do GKE. Elas criam o seguinte:

  • Um novo cluster do GKE (se necessário).
  • Um novo keyring, chave, e versão de chave do Cloud KMS (se necessário).
  • O StorageClass (em inglês) que permite que discos provisionados pelo Kubernetes sejam automaticamente criptografados com a chave do Cloud KMS.
  1. Se necessário, crie um cluster do GKE.
  2. Implante o driver CSI de disco permanente do Compute Engine no cluster. (em inglês)
  3. Preencha a seção "Antes de começar" em Como proteger os recursos com chaves do Cloud KMS para ativar a API Cloud KMS e criar uma chave. Siga os passos a seguir:

    1. Crie um keyring na mesma região do seu cluster do GKE.
    2. Atribua o papel de criptografador/descriptografador CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) ao agente de serviço do Compute Engine (service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com). Isso permite que o GKE acesse a chave.

Criar um StorageClass que faça referência à nova chave KMS

  1. Copie o conteúdo abaixo para um arquivo YAML. Para o restante desta página, vamos chamá-lo de gcepd-sc.yaml. Essa configuração permite o provisionamento dinâmico de volumes criptografados.

    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 precisa ser o identificador de recurso totalmente qualificado para a chave que será usada para criptografar discos novos. Substitua os itens entre colchetes conforme apropriado para fazer referência à chave KMS.
    • Os valores em disk-encryption-kms-key, como keyRings e cryptoKeys, diferenciam maiúsculas e minúsculas. O provisionamento de um novo volume com valores incorretos resulta em um erro invalidResourceUsage.
    • Defina o StorageClass como padrão (em inglês).
  2. Implante o StorageClass no cluster do GKE usando kubectl:

    kubectl apply -f gcepd-sc.yaml
  3. Por fim, verifique se o StorageClass usa o driver CSI de disco persistente do Compute Engine e inclui o ID da sua chave.

Na resposta ao comando, verifique:

  • se o provisionador está definido como pd.csi.storage.gke.io;
  • o ID da sua chave segue disk-encryption-kms-key.

    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
    

Criar um disco permanente criptografado no GKE

Nesta seção, você provisionará dinamicamente volumes de armazenamento criptografados do Kubernetes com o StorageClass e a chave do Cloud KMS.

Provisionar dinamicamente um disco permanente criptografado do Compute Engine

  1. Copie o conteúdo abaixo em um novo arquivo chamado pvc.yaml e atualize storageClassName com o nome do StorageClass recém-criado.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-gce-pd
  resources:
    requests:
      storage: 6Gi
  1. Aplique o PersistentVolumeClaim (PVC) no cluster do GKE usando kubectl:

    kubectl apply -f pvc.yaml
  2. Verifique se o PVC foi criado e vinculado a um PersistentVolume recém-provisionado. Basat atribuir o status de PersistentVolumeClaim do seu cluster.

    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
    

Agora é possível usar o disco permanente protegido por CMEK com o cluster do GKE.

Como remover a proteção CMEK de um disco permanente

Para remover a proteção CMEK de um disco permanente, siga as instruções na documentação do Compute Engine.

A seguir

Para mais informações sobre CMEK, consulte:

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine