Veja nesta página como usar as chaves de criptografia gerenciadas pelo cliente (CMEKs, na sigla em inglês) no Google Kubernetes Engine (GKE). Se você precisa controlar o gerenciamento das suas chaves, use o Cloud Key Management Service e as CMEKs para proteger os discos permanentes e os discos de inicialização personalizados no cluster do GKE.
Visão geral
Por padrão, o Google Cloud 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 chaves de criptografia, use as CMEKs. Elas criptografam as chaves de criptografia dos seus dados. Para mais informações, consulte Gerenciamento de chaves. Também é possível criptografar chaves secretas no cluster usando chaves que você gerencia. Para mais detalhes, consulte Criptografia de secrets da camada de aplicativos.
No GKE, as CMEKs podem proteger dados de dois tipos de disco de armazenamento: discos anexados e de inicialização de nós.
- Discos de inicialização de nós
- Os discos de inicialização de nós fazem parte dos pools de nós do cluster. É possível criar um disco de inicialização de nós criptografado por CMEKs ao criar clusters e pools de nós.
- Discos anexados
- Os discos anexados são PersistentVolumes usados por pods para armazenamento durável. Os discos permanentes anexados e criptografados por CMEKs estão disponíveis no GKE como um PersistentVolume provisionado dinamicamente.
Para saber mais sobre os discos de armazenamento, consulte Opções de armazenamento. Os discos do plano de controle, usados em planos de controle do GKE, não podem ser protegidos com CMEKs.
Antes de começar
Para fazer os exercícios neste tópico, você precisa de dois projetos do Google Cloud:
Projeto principal: é onde você cria uma chave de criptografia.
Projeto do cluster: é onde você cria um cluster que ativa as CMEKs.
Verifique se você ativou a API do Cloud KMS no seu projeto de chave.
No projeto principal, o usuário que cria o keyring e a chave precisa das seguintes permissões do IAM:
cloudkms.keyRings.getIamPolicy
cloudkms.keyRings.setIamPolicy
Essas permissões são concedidas ao papel predefinido
roles/cloudkms.admin
do gerenciamento de identidade e acesso. Saiba mais sobre a concessão de permissões para gerenciar chaves na documentação do Cloud KMS.No projeto do cluster, verifique se você ativou a API Cloud KMS.
Verifique se o SDK do Cloud está instalado.
Atualize
gcloud
para a versão mais recente:gcloud components update
Criar uma chave do Cloud KMS
Antes de proteger o disco de inicialização do nó ou o disco anexado com uma CMEK, você precisa do keyring e da chave do Cloud KMS.
O keyring e a chave têm os seguintes requisitos:
Sua chave precisa usar criptografia simétrica.
Você precisa conceder permissões à conta de serviço do GKE para usar a chave.
O keyring precisa ter um local que corresponda ao local do cluster do GKE:
Um cluster zonal precisa usar um keyring de um local de superconjunto. Por exemplo, um cluster na zona
us-central1-a
só pode usar uma chave na regiãous-central1
.Um cluster regional precisa usar um keyring do mesmo local. Por exemplo, um cluster na região
asia-northeast1
precisa ser protegido por um keyring da regiãoasia-northeast1
.A região
global
do Cloud KMS não é compatível com o GKE.
Para instruções sobre como criar um keyring e uma chave, consulte Como criar chaves simétricas.
Conceder permissão para usar a chave
É preciso atribuir o papel de criptografia/descriptografia de CryptoKey do Cloud KMS à conta de serviço do Compute Engine usada pelos nós do seu cluster. Essa ação é necessária para que os discos permanentes do GKE acessem e usem a chave de criptografia.
O nome da conta de serviço do Compute Engine tem o seguinte formato:
service-project-number@compute-system.iam.gserviceaccount.com
Substitua project-number pelo número do projeto do cluster.
Para conceder acesso à conta de serviço, use o comando gcloud
ou o Console do Google Cloud.
gcloud
Conceda à conta de serviço do Compute Engine o papel de criptografia/descriptografia de CryptoKey do Cloud KMS:
gcloud kms keys add-iam-policy-binding key \
--location location \
--keyring key-ring \
--member serviceAccount:service-account \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project key-project-id
Substitua:
- key é o nome da chave;
- location é a região em que o keyring foi criado;
- key-ring é o nome do keyring;
- service-account é o nome da sua conta de serviço do Compute Engine;
- key-project-id é o ID do projeto de chave.
Console
Conceda à conta de serviço do Compute Engine o papel de criptografia/descriptografia de CryptoKey do Cloud KMS:
- Abra o navegador de chaves do Cloud Key Management Service no Console do Google Cloud.
Abrir o navegador de Chaves do Cloud KMS Clique no nome do keyring que contém a chave que você quer.
Marque a caixa de seleção da chave.
A guia Permissões no painel da janela à direita fica disponível.
Na caixa de diálogo Adicionar membros, especifique o endereço de e-mail da conta de serviço do Compute Engine a que você está concedendo acesso.
Na lista suspensa Selecionar um papel, escolha Criptografador/Descriptografador do Cloud KMS CryptoKey.
Clique em Salvar.
Criar um disco de inicialização protegido por CMEKs
Nesta seção, você cria um novo cluster ou pool de nós com um disco de inicialização protegido por CMEKs.
Não é possível ativar a criptografia gerenciada pelo cliente para discos de inicialização de nós em um cluster existente, já que não é permitido alterar o tipo de disco de inicialização de um pool de nós ou um cluster existente. No entanto, você consegue criar um novo pool de nós para o cluster com a criptografia gerenciada pelo cliente ativada e excluir o pool de nós antigo.
Também não é possível desativar a criptografia gerenciada pelo cliente para discos de inicialização de nós em um cluster ou pool de nós existente. No entanto, você consegue criar um novo pool de nós para o cluster com a criptografia gerenciada pelo cliente desativada e excluir o pool de nós antigo.
Criar um cluster com um disco de inicialização de nós protegido por CMEKs
É possível criar um cluster com um disco de inicialização de nós protegido por CMEKs usando o comando gcloud
ou o Console do Google Cloud.
Somente um disco permanente padrão (pd-standard
) ou um disco permanente SSD
(pd-ssd
) pode ser criptografado com uma chave CMEK.
gcloud
Para criar um cluster com disco de inicialização criptografado por uma chave CMEK,
especifique um valor para --boot-disk-kms-key parameter
no seu comando de criação.
gcloud container clusters create cluster \
--cluster-version=latest \
--zone zone \
--boot-disk-kms-key projects/key-project-id/locations/location/keyRings/key-ring/cryptoKeys/key \
--project cluster-project-id\
--disk-type disk-type
Substitua:
- cluster é o nome escolhido para o cluster;
- zone é a zona em que você quer criar o cluster;
- key-project-id é o ID do projeto de chave;
- location é a localização do keyring;
- key-ring é o nome do keyring;
- key é o nome da chave;
- cluster-project-id é o ID do projeto de cluster.
- disk-type é
pd-standard
(padrão) oupd-ssd
.
Console
Acesse o menu do Cloud Key Management Service no Console do Cloud.
Clique no botão Criar cluster.
Configure o cluster como quiser.
No painel de navegação, em Pools de nós, clique em Nós.
Na lista suspensa Tipo de disco de inicialização, selecione Disco permanente padrão ou Disco permanente SSD.
Marque a caixa de seleção Ativar a criptografia gerenciada pelo cliente para o disco de inicialização e escolha a chave de criptografia do Cloud KMS que você criou acima.
Clique em Criar
Atualizar um cluster com discos de inicialização de nó protegidos por CMEK
Para criar um novo pool de nós com CMEKs ativadas em um cluster existente, use
o comando gcloud
ou o Console do Google Cloud.
gcloud
Para criar um pool de nós com criptografia gerenciada pelo cliente para discos de inicialização de nós, especifique um valor para --boot-disk-kms-key parameter
no seu comando de criação.
gcloud container node-pools create node-pool-name \
--zone zone \
--disk-type disk-type \
--boot-disk-kms-key projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/<var>key-name \
--project cluster-project-id \
--cluster cluster-name
Substitua:
- node-pool-name é um nome escolhido para o pool de nós;
- zone é a zona em que você quer criar o cluster;
- disk-type é
pd-standard
(padrão) oupd-ssd
. - key-project-id é o ID do projeto de chave;
- location é a localização do keyring;
- ring-name é o nome do keyring;
- key-name é o nome da chave;
- cluster-project-id é o ID do projeto de cluster.
- cluster-name é o nome do cluster que você criou na etapa anterior.
Console
Acesse o menu do GKE no Console do Cloud.
Selecione o cluster em que você quer adicionar um pool de nós.
Clique em Adicionar pool de nós.
Verifique se o tipo de disco de inicialização é disco permanente padrão ou disco permanente SSD.
Selecione Ativar a criptografia gerenciada pelo cliente para o disco de inicialização e escolha a chave de criptografia do Cloud KMS que você criou.
Clique em Salvar.
Criar um disco anexado protegido por CMEKs
Siga 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:
- Crie um cluster do GKE, se você ainda não tiver um.
- Implante o driver CSI do disco permanente do Compute Engine no cluster (em inglês).
- Crie uma versão do keyring e da chave do Cloud KMS, se você ainda não tiver uma.
- Crie uma StorageClass que permita que os discos provisionados pelo Kubernetes sejam automaticamente criptografados com essa chave do Cloud KMS. Para detalhes sobre como fazer isso, consulte a seção a seguir.
Criar uma StorageClass que faça referência à chave do Cloud KMS
Copie o conteúdo abaixo para um arquivo YAML chamado
gcepd-sc.yaml
. Essa configuração permite o provisionamento dinâmico de volumes criptografados.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-gce-pd-cmek provisioner: pd.csi.storage.gke.io volumeBindingMode: "WaitForFirstConsumer" allowVolumeExpansion: true parameters: type: pd-standard disk-encryption-kms-key: projects/key-project-id/locations/location/keyRings/key-ring/cryptoKeys/key
- O campo
disk-encryption-kms-key
precisa ser o identificador de recurso totalmente qualificado da chave que será usada para criptografar discos novos. - Os valores em
disk-encryption-kms-key
diferenciam maiúsculas de minúsculas (por exemplo:keyRings
ecryptoKeys
). O provisionamento de um novo volume com valores incorretos resulta em um erroinvalidResourceUsage
. - Defina o StorageClass como padrão (em inglês).
Não é possível adicionar o parâmetro
disk-encryption-kms-key
a um StorageClass existente. No entanto, você pode excluir o StorageClass e recriá-lo com o mesmo nome, mas com um conjunto diferente de parâmetros. Se você fizer isso, certifique-se que o provisionador da classe existente épd.csi.storage.gke.io
.- O campo
Implante o
StorageClass
no cluster do GKE usandokubectl
:kubectl apply -f gcepd-sc.yaml
Verifique se o
StorageClass
usou o driver CSI do disco permanente do Compute Engine e se inclui o ID da chave:kubectl describe storageclass csi-gce-pd-cmek
Na resposta ao comando, verifique:
- O provisionador está definido como
pd.csi.storage.gke.io
. - O ID da chave segue a
disk-encryption-kms-key
.
Name: csi-gce-pd-cmek IsDefaultClass: No Annotations: None Provisioner: pd.csi.storage.gke.io Parameters: disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard AllowVolumeExpansion: unset MountOptions: none ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: none
- O provisionador está definido como
Criar um disco permanente criptografado no GKE
Nesta seção, você provisiona dinamicamente volumes de armazenamento do Kubernetes criptografados com o novo StorageClass
e a chave do Cloud KMS.
Copie o conteúdo a seguir para um novo arquivo chamado
pvc.yaml
e verifique se o valor destorageClassName
corresponde ao nome do objetoStorageClass
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: csi-gce-pd-cmek resources: requests: storage: 6Gi
Aplique o
PersistentVolumeClaim
(PVC) no cluster do GKE:kubectl apply -f pvc.yaml
Receba o status de
PersistentVolumeClaim
do cluster e verifique se o PVC foi criado e vinculado a umPersistentVolume
provisionado recentemente.kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 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
- Leia as Perguntas frequentes do Cloud Key Management Service.
- Saiba mais sobre como proteger recursos com as chaves do Cloud KMS.