Acerca da encriptação CMEK da Cópia de segurança do GKE

Por predefinição, a Cópia de segurança do GKE encripta o conteúdo do cliente em repouso. A Cópia de segurança do GKE processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.

Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Backup for GKE. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização, autorizações de acesso e limites criptográficos. A utilização do Cloud KMS também permite ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.

Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos recursos do Backup for GKE é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

Vista geral

Existem dois tipos de artefactos de dados do utilizador que são produzidos e armazenados pelo Backup for GKE:

  • Cópia de segurança da configuração: um conjunto de descrições de recursos do Kubernetes extraídas do servidor da API do cluster em cópia de segurança, que captam o estado do cluster.
  • Cópias de segurança de volumes: um conjunto de cópias de segurança de volumes que correspondem aos recursos PersistentVolumeClaim encontrados na cópia de segurança da configuração.

Por predefinição, todos os artefactos de cópia de segurança produzidos pela Cópia de segurança do GKE são encriptados em repouso através de uma chave fornecida pela Google.

No entanto, pode optar por encriptar estes artefactos com uma chave de encriptação gerida pelo cliente (CMEK) gerida com o Cloud Key Management Service.

Ative a encriptação CMEK

A ativação da encriptação CMEK envolve dois passos:

  • Designar uma chave para encriptar cópias de segurança produzidas para um BackupPlan.

  • Conceda acesso às chaves adequadas pelas contas de serviço apropriadas.

Para qualquer cenário de cópia de segurança específico, existem potencialmente três chaves CMEK envolvidas:

  • bplan_key: esta é a chave que referencia quando cria ou atualiza o elemento BackupPlan. Quando possível, esta chave é usada quando encripta todos os artefactos de cópia de segurança. Esta chave tem de estar na mesma região que o BackupPlan em si (consulte o artigo Acerca das localizações de recursos).

  • orig_disk_key: se tiver encriptado os volumes de disco persistente com uma chave CMEK, as cópias de segurança de volumes que o Backup for GKE produz para esses volumes são encriptadas com esta chave, mesmo que uma chave diferente esteja registada no BackupPlan.

  • new_disk_key: Esta é a chave CMEK que quer usar para encriptar volumes que restaurou a partir da cópia de segurança. Isto é referenciado por StorageClass no cluster de destino da restauração.

Existem quatro contas de serviço diferentes que podem exigir acesso a chaves CMEK:

  • agent_robot: esta conta de serviço tem de ter acesso concedido ao bplan_key. Esta conta de serviço tem o seguinte formato: service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com, onde PROJECT_NUMBER é o número do seu projeto Google Cloud .

  • non_cmek_service_agent: ao fazer uma cópia de segurança de volumes encriptados que não sejam CMEK, esta conta de serviço tem de ter acesso concedido ao bplan_key. Esta conta de serviço tem o seguinte formato: service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com, em que PROJECT_NUMBER é o número do seu projeto Google Cloud .

  • cmek_service_agent: Quando fizer uma cópia de segurança de volumes encriptados com CMEK, esta conta de serviço tem de ter acesso concedido ao orig_disk_key. Esta conta de serviço tem o seguinte formato: service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, onde TENANT_PROJECT_NUMBER é o número do projeto de inquilino atribuído ao seu BackupPlan.

  • compute_service_agent: esta conta de serviço é usada quando cria novos volumes encriptados para um cluster e tem de ter acesso concedido ao new_disk_key. Esta conta de serviço tem o seguinte formato: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, em que PROJECT_NUMBER é o número do seu projeto Google Cloud .

Se diskEncryptionKey.kmsKeyServiceAccount estiver definido para os discos, tem de realizar os seguintes passos antes de criar uma cópia de segurança:

  • Desative a política da organização iam.disableCrossProjectServiceAccountUsage para ativar a representação da conta de serviço em todos os projetos:

      gcloud resource-manager org-policies disable-enforce \
          iam.disableCrossProjectServiceAccountUsage
          --project=PROJECT_ID
    
  • Conceda a cmek_service_agent a função de roles/iam.serviceAccountTokenCreator para criar credenciais de curta duração:

      gcloud iam service-accounts add-iam-policy-binding \
        # Replace the email with the value from
        # `diskEncryptionKey.kmsKeyServiceAccount`
        your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \
        --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Se estiver a realizar uma operação de cópia de segurança ou restauro entre projetos, tem de indicar três nomes de projetos:

  • cluster_project: o projeto que contém o cluster do qual quer fazer uma cópia de segurança.

  • backup_project: o projeto onde quer que as suas cópias de segurança sejam armazenadas.

  • restore_project: o projeto que contém o cluster de destino do restauro.

A tabela seguinte resume a que contas de serviço tem de ser concedido acesso em vários cenários:

Artefacto Conta de serviço Número do projeto Chave
config backup cluster agent_robot
  • cluster_project (durante a cópia de segurança)
  • restore_project (durante o restauro)
bplan_key
cópia de segurança do volume encriptado com CMEK cmek_service_agent backup_project orig_disk_key
cópia de segurança do volume encriptado pela Google non_cmek_service_agent backup_project bplan_key
Novo volume encriptado com CMEK criado durante o restauro compute_service_agent restore_project new_disk_key

Pode optar por conceder acesso a chaves ao nível do projeto, o que concede acesso a todas as chaves nesse projeto, ou à chave individual.

Conceda acesso ao nível do projeto

Pode conceder acesso a chaves ao nível do projeto, o que concede acesso a todas as chaves nesse projeto.

Siga as instruções abaixo para conceder acesso ao nível do projeto.

Consola

  1. Na Google Cloud consola, aceda à página IAM.

    Aceder ao IAM

  2. Clique em Conceder acesso.

  3. No campo Novos membros, introduza o endereço de email da conta de serviço.

  4. Na lista Selecionar uma função, selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.

  5. Clique em Guardar.

gcloud

  1. Conceda acesso ao nível do projeto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto ao qual quer conceder acesso.
    • PROJECT_NUMBER: o número do projeto ao qual quer conceder acesso.

Terraform

  1. Conceda acesso ao nível do projeto.

    resource "google_project_iam_member" "example_iam_member" {
    project = "PROJECT_ID"
    role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member  = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com"
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto ao qual quer conceder acesso.
    • PROJECT_NUMBER: o número do projeto ao qual quer conceder acesso.

Conceda acesso ao nível da chave

Siga as instruções abaixo para conceder acesso ao nível da chave individual.

Consola

  1. Na Google Cloud consola, aceda à página Gestão de chaves.

    Aceda à gestão de chaves

  2. Clique no nome do conjunto de chaves.

  3. Clique no nome da chave.

  4. Clique no separador Autorizações.

  5. Clique em Conceder acesso.

  6. No campo Novos membros, introduza o endereço de email da conta de serviço.

  7. Na lista Selecionar uma função, selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.

  8. Clique em Guardar.

gcloud

  1. Conceda acesso ao nível da chave individual.

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua o seguinte:

    • KEY_NAME: o nome da chave.
    • KEY_RING: o nome do conjunto de chaves que contém a chave.
    • LOCATION: a localização do Cloud KMS do conjunto de chaves.
    • PROJECT_NUMBER: o número do projeto ao qual quer conceder acesso.

Terraform

  1. Conceda acesso ao nível da chave individual.

    resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" {
    crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
    role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member        = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" 
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto ao qual quer conceder acesso.
    • LOCATION: a localização do Cloud KMS do conjunto de chaves.
    • KEY_RING: o nome do conjunto de chaves que contém a chave.
    • KEY_NAME: o nome da chave.
    • PROJECT_NUMBER: o número do projeto ao qual quer conceder acesso.

Considerações e limitações de utilização

  • Se quiser fazer uma cópia de segurança de um volume encriptado com CMEK, tem de conceder acesso à chave desse disco, mesmo que não ative a encriptação com CMEK no seu BackupPlan.

  • As chaves CMEK têm de estar na mesma região que o BackupPlan para garantir que uma indisponibilidade regional não remove o acesso à chave enquanto as cópias de segurança continuam acessíveis. No entanto, esta restrição não pode ser aplicada a chaves partilhadas com volumes encriptados. Quando estão envolvidos volumes encriptados, é possível que uma restauração falhe, mesmo quando está disponível uma cópia de segurança, porque a chave de encriptação do disco pode não estar armazenada na mesma região que a cópia de segurança.

Utilize e faça a gestão de chaves externas

Pode usar o Cloud External Key Manager (Cloud EKM) para criar e gerir chaves externas. As chaves externas são ponteiros para chaves que residem fora de Google Cloud. Estas chaves residem num parceiro de gestão de chaves externo compatível. Para mais informações, consulte o Cloud External Key Manager.

Depois de criar uma chave externa com o EKM do Google Cloud, pode aplicá-la a um novo plano de cópia de segurança fornecendo o ID dessa chave quando criar um novo plano de cópia de segurança. Este procedimento é igual ao da aplicação de uma chave do Cloud KMS a um novo plano de cópia de segurança.

Pode usar as Justificações de acesso às chaves como parte do Cloud EKM. As justificações de acesso às chaves permitem-lhe ver o motivo de cada pedido do Cloud EKM. Além disso, com base na justificação apresentada, pode aprovar ou recusar automaticamente um pedido. Para mais informações, consulte o artigo Vista geral.