.
Esta página mostra como criptografar dados armazenados no plano de controle do Google Kubernetes Engine (GKE) usando chaves gerenciadas no Cloud Key Management Service (Cloud KMS). Você já deve estar familiarizado com conceitos como etcd, a arquitetura de cluster do GKE e o Cloud KMS.
Esta página descreve uma parte de um conjunto de recursos opcionais do plano de controle no GKE que permite realizar tarefas como verificar a postura de segurança do plano de controle ou configurar a criptografia e a assinatura de credenciais no plano de controle usando chaves gerenciadas. Para mais detalhes, consulte Sobre a autoridade do plano de controle do GKE.
Por padrão, Google Cloud aplica várias medidas de segurança ao plano de controle gerenciado. Esta página descreve os recursos opcionais que oferecem mais visibilidade ou controle sobre o plano de controle do GKE.
Sobre o disco de inicialização do plano de controle e a criptografia do etcd
Por padrão, o GKE criptografa o disco de inicialização de um nó do plano de controle, o disco que armazena dados no etcd e o Google Cloud backup operacional interno do etcd usando chaves de criptografia que Google Cloud gerencia. Para saber mais sobre essa criptografia padrão, consulte Criptografia padrão em repouso. É possível opcionalmente usar suas próprias chaves de criptografia gerenciadas pelo Cloud KMS para criptografar esses recursos. Para saber mais, consulte Disco de inicialização do plano de controle e criptografia etcd.
Você cria chaves no Cloud KMS que o GKE usa para criptografar seus recursos de plano de controle. Considere o seguinte ao criar esses recursos:
- É possível usar um chaveiro para todas as chaves em um cluster, independentemente da finalidade de cada uma. Se você tiver um keyring usado para outra finalidade, como configurar suas próprias autoridades certificadoras, use esse keyring para este guia.
- Crie as chaves no mesmo local Google Cloud do cluster para melhorar a latência.
- Para a maioria dos casos de uso, é possível usar o nível de proteção de chave do software do Cloud KMS. Também é possível usar chaves de hardware com o Cloud HSM.
- É necessário especificar a flag
--purpose
com o valorencryption
porque essas chaves são usadas para criptografia simétrica. - Não modifique a duração padrão para a destruição de chaves.
Uso com outros recursos de autoridade do plano de controle do GKE
A autoridade do plano de controle do GKE oferece os seguintes recursos relacionados a chaves autogerenciadas que você precisa ativar ao mesmo tempo em que cria um cluster:
- Criptografar componentes do plano de controle (esta página)
- Executar suas próprias autoridades certificadoras (ACs) e chaves
Só é possível ativar esses recursos ao criar um novo cluster do GKE. Não é possível atualizar clusters atuais para usar esses recursos. Para usar esses recursos no mesmo cluster, execute todos os procedimentos de configuração de chaves e CA nos dois guias e, em seguida, execute o comando de criação de cluster que ativa os dois conjuntos de recursos, conforme descrito na seção Criar um cluster.
Antes de começar
Antes de começar, veja se você realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão
mais recente executando
gcloud components update
.
- Verifique se o projeto de chaves tem um keyring do Cloud KMS para o cluster. Você pode usar qualquer chaveiro no local do cluster. Para criar um novo keyring, consulte Criar um keyring.
-
Enable the Cloud Key Management Service API.
Identificar projetos
Recomendamos que você use projetos Google Cloud separados da seguinte maneira:
- Projeto de chaves: contém todas as chaves.
- Projeto de cluster: contém seus clusters do GKE.
Você pode usar o mesmo projeto para suas chaves e clusters do GKE, mas recomendamos que você use projetos separados para que as equipes que gerenciam suas chaves e operações criptográficas sejam separadas das equipes que gerenciam seus clusters.
Papéis e permissões necessárias
Para receber as permissões necessárias para executar suas próprias chaves de criptografia, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Criar chaves do Cloud KMS:
Administrador do Cloud KMS (
roles/cloudkms.admin
) no seu projeto de chave -
Criar clusters do GKE:
Administrador de cluster do Kubernetes Engine (
roles/container.clusterAdmin
) no projeto do cluster
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Requisitos
Seu cluster precisa executar o GKE versão 1.31.1-gke.1846000 ou posterior.
Limitações
- Só é possível configurar o disco de inicialização e as chaves de criptografia do etcd durante a criação do cluster.
Para clusters regionais no modo padrão e clusters do Autopilot, a região em que você cria um cluster precisa ter capacidade para o modo confidencial do Hyperdisk Balanced em pelo menos três zonas.
Para clusters no modo padrão zonal, a zona do cluster precisa ter capacidade do Hyperdisk equilibrado. Para receber ajuda com a capacidade, entre em contato com o Cloud Customer Care.
O modo confidencial do Hyperdisk equilibrado está disponível apenas em regiões específicas. Para saber mais, consulte Regiões com suporte para volumes do Hyperdisk Balanced no modo confidencial.
O GKE só é compatível com chaves do Cloud KMS. Não é possível usar outro provedor KMS do Kubernetes ou outro provedor de criptografia.
Não é possível usar chaves do Cloud External Key Manager (Cloud EKM).
Não é possível acessar ou interagir com os Google Cloud backups operacionais internos do etcd, que são usados apenas para recuperação de desastres.
Não há suporte para chaveiros multirregionais. É necessário usar um keyring regional.
Criar chaves
Nesta seção, você vai criar uma chave de criptografia para os discos de inicialização e etcd no plano de controle e uma chave de criptografia separada para o Google Cloud backup operacional interno do etcd. É possível usar um chaveiro para armazenar todas essas chaves e outras chaves do cluster.
Crie a chave de criptografia para os discos de inicialização do plano de controle e os discos etcd:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Substitua:
KCP_DISK_KEY_NAME
: o nome da chave de criptografia para os discos de inicialização do plano de controle e os discos etcd.KEYRING_NAME
: o nome do keyring que contém as chaves de criptografia do cluster.LOCATION
: o Google Cloud local do keyring. Precisa ser igual ao local do cluster. Para uma lista de regiões, filtre "Região" na tabela de locais do Cloud KMS.PROTECTION_LEVEL
: o nível de proteção da chave, comosoftware
ouhsm
.KEY_PROJECT_ID
: o ID do projeto principal.
Crie a chave de criptografia de backup interno do etcd:
gcloud kms keys create ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Substitua
ETCD_BACKUP_KEY_NAME
por um nome para a chave de criptografia de backup interno do etcd.
Conceder papéis do IAM ao agente de serviço do GKE
Nesta seção, você concede papéis do IAM nas chaves que criou ao agente de serviço do GKE no projeto do cluster. O agente de serviço do GKE exige que essas funções usem essas chaves para criptografar os recursos do plano de controle correspondentes.
Encontre o número do projeto do cluster:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'
Substitua
CLUSTER_PROJECT_ID
pelo ID do projeto do cluster do GKE.O resultado será assim:
1234567890
Conceda o papel Criptografador/Descriptografador do Cloud KMS CryptoKey (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) na chave de criptografia para discos de inicialização e etcd ao agente de serviço do GKE no projeto do cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project=KEY_PROJECT_ID
Substitua:
KCP_DISK_KEY_NAME
: o nome da chave de criptografia do disco.LOCATION
: o Google Cloud local da chave.KEYRING_NAME
: o nome do keyring que contém a chave de criptografia.CLUSTER_PROJECT_NUMBER
: o número do projeto numérico do projeto de cluster, que você encontrou na etapa anterior.KEY_PROJECT_ID
: o ID do projeto principal.
Conceda o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS via delegação (
roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation
) na chave de criptografia para discos de inicialização e etcd ao agente de serviço do GKE no projeto do cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \ --project=KEY_PROJECT_ID
Conceda o papel Criptografador de CryptoKey do Cloud KMS (
roles/cloudkms.cryptoKeyEncrypter
) na chave de criptografia de backup interno do etcd ao agente de serviço do GKE no projeto do cluster:gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypter \ --project=KEY_PROJECT_ID
Substitua
ETCD_BACKUP_KEY_NAME
pelo nome da chave de criptografia de backup operacional do etcd.Conceder o papel
roles/cloudkms.cryptoKeyEncrypter
impede que o GKE realize restaurações de banco de dados em seu nome e aumenta significativamente o tempo para restaurar a funcionalidade quando ocorre um problema no banco de dados. Para permitir que o GKE realize restaurações para você, conceda o papelroles/cloudkms.cryptoKeyEncrypterDecrypter
.
Usar chaves de criptografia em um cluster
Esta seção mostra como identificar os caminhos para suas chaves de criptografia.
Identifique o caminho para a chave de criptografia do disco:
gcloud kms keys describe KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"
Substitua:
KCP_DISK_KEY_NAME
: o nome da chave de criptografia para discos de inicialização do plano de controle e discos etcd.KEYRING_NAME
: o nome do keyring que contém a chave.LOCATION
: o Google Cloud local da chave.KEY_PROJECT_ID
: o ID do projeto principal.
O resultado será assim:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
Identifique o caminho para a chave de criptografia de backup interno do etcd:
gcloud kms keys describe ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"
Substitua
ETCD_BACKUP_KEY_NAME
pelo nome da chave de criptografia de backup operacional do etcd.O resultado será assim:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
Criar um cluster
Nesta seção, você cria um cluster com diferentes opções especificadas, dependendo dos recursos de autoridade do plano de controle do GKE que você quer configurar. Só é possível configurar esses recursos em um cluster durante a criação dele. Os comandos a seguir criam clusters do modo Autopilot. Para
criar clusters no modo padrão, use as mesmas flags com o comando
gcloud container clusters create
.
Para criar um cluster que configure a criptografia de disco e execute suas próprias ACs e chaves de assinatura da conta de serviço, faça o seguinte:
- Execute todas as etapas de configuração da chave e da AC em Executar suas próprias autoridades certificadoras e chaves.
- Encontre os caminhos para cada uma das chaves e ACs da conta de serviço usando as instruções em Configurar ACs e chaves em um novo cluster.
Crie um cluster:
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \ --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \ --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \ --cluster-ca=PATH_TO_CLUSTER_CA \ --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \ --etcd-api-ca=PATH_TO_ETCD_API_CA \ --aggregation-ca=PATH_TO_AGGREGATION_CA
Substitua:
CLUSTER_NAME
: o nome do novo cluster;LOCATION
: o local do novo cluster.CLUSTER_PROJECT_ID
: o ID do projeto do seu projeto de cluster.PATH_TO_DISK_KEY
: o caminho para a chave de criptografia do disco das etapas anteriores desta página.PATH_TO_ETCD_BACKUP_KEY
: o caminho para a chave de criptografia de backup interna do etcd das etapas anteriores desta página.PATH_TO_SIGNING_KEY_VERSION
: o caminho para a versão da chave de assinatura da conta de serviço do Kubernetes no Cloud KMS.PATH_TO_VERIFICATION_KEY_VERSION
: o caminho para a versão da chave de verificação do Kubernetes ServiceAccount no Cloud KMS.PATH_TO_CLUSTER_CA
: o caminho para o pool de AC do cluster.PATH_TO_ETCD_PEER_CA
: o caminho para o pool de ACs de peer do etcd.PATH_TO_ETCD_API_CA
: o caminho para o pool de ACs da API etcd.PATH_TO_AGGREGATION_CA
: o caminho para o pool de ACs de agregação.
Para criar um cluster que só configura a criptografia de disco usando as chaves criadas neste guia, execute o seguinte comando:
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
Substitua:
CLUSTER_NAME
: o nome do novo cluster;LOCATION
: o local do novo cluster.CLUSTER_PROJECT_ID
: o ID do projeto do seu projeto de cluster.PATH_TO_DISK_KEY
: o caminho para a chave de criptografia do disco das etapas anteriores.PATH_TO_ETCD_BACKUP_KEY
: o caminho para a chave de criptografia de backup interna do etcd das etapas anteriores.
Também é possível especificar todas essas flags ao criar um novo cluster no modo padrão.
Verificar o status da chave de criptografia
Esta seção mostra como verificar a chave de criptografia usada durante a criação do cluster. É possível realizar essa verificação usando o Cloud Logging ou a CLI do Google Cloud.
Usar o registro para verificar chaves
Para verificar as chaves usando o Logging, faça o seguinte:
No console do Google Cloud, acesse a página Análise de registros:
Para acessar o registro de criação do cluster, especifique a seguinte consulta:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*
Clique em Executar consulta.
Na saída, verifique se os parâmetros de criação do cluster incluem um caminho de chave que corresponde à chave configurada no Cloud KMS, como no exemplo abaixo:
# lines omitted for clarity
userManagedKeysConfig: {
controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}
Usar a CLI gcloud para verificar chaves
Para usar a CLI gcloud para verificar a chave de criptografia, faça o seguinte:
Para a chave de criptografia do disco, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
Para a chave de criptografia de backup interno do etcd, execute o seguinte comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
A seguir
- Saiba o que mais você pode conferir no plano de controle
- Executar suas próprias autoridades certificadoras e chaves no GKE
- Verificar a integridade da VM do plano de controle