03 - Criptografia com CMEK

Continuação do 02 - Deixando a function inacessível publicamente

Para criptografar automaticamente os seus dumps SQL no GCS usando CMEK (Customer-Managed Encryption Keys), você precisa:

  1. Criar uma chave KMS (KeyRing + Key).
  2. Configurar o bucket GCS para usar essa chave como CMEK padrão.
  3. Garantir que a Service Account usada no export tenha permissão de Encrypt/Decrypt na chave.
  4. Exportar normalmente — o Cloud SQL já vai gravar o arquivo usando a CMEK.

Abaixo o passo a passo completo.


✅ 1️⃣ Criar o KeyRing e a Chave CMEK

Ajuste SEU_PROJETO, us, my-keyring, mysql-backup-key.

gcloud kms keyrings create my-keyring \
    --location=us \
    --project=SEU_PROJETO
gcloud kms keys create mysql-backup-key \
    --location=us \
    --keyring=my-keyring \
    --purpose=encryption \
    --project=SEU_PROJETO

✅ 2️⃣ Aplicar a CMEK no bucket do GCS

O GCS permite definir uma CMEK padrão para todos os objetos futuros daquele bucket.

Comando:

gsutil kms encryption -k projects/SEU_PROJETO/locations/us/keyRings/my-keyring/cryptoKeys/mysql-backup-key gs://backups-mysql-producao

Isso faz com que:


✅ 3️⃣ Dar permissão à Service Account para usar a CMEK

A service account responsável pelo export precisará das permissões:

Adicionando permissões:

gcloud kms keys add-iam-policy-binding mysql-backup-key \
  --location=us \
  --keyring=my-keyring \
  --member="serviceAccount:cloudsql-backup@SEU_PROJETO.iam.gserviceaccount.com" \
  --role="roles/cloudkms.cryptoKeyEncrypterDecrypter" \
  --project=SEU_PROJETO

✅ 4️⃣ Exportar como sempre — a criptografia CMEK será aplicada automaticamente

Nenhuma alteração no código da Cloud Function é necessária.
Nenhuma flag adicional no Cloud SQL Export.

Se o bucket tem CMEK padrão → todo arquivo recebido é criptografado com CMEK.


❗ 5️⃣ Verificar se a criptografia CMEK está aplicada

Execute:

gsutil stat gs://backups-mysql-producao/backup-2025-01-01-123000.sql.gz

E procure algo assim:

Encryption key:
  type: kms
  kmsKeyName: projects/SEU_PROJETO/locations/us/keyRings/my-keyring/cryptoKeys/mysql-backup-key

Se aparecer → está usando CMEK.


🛡️ 6️⃣ Benefícios reais da CMEK


🔥 Config adicional opcional (muito recomendada)

Bloquear uploads SEM CMEK

Para evitar que alguém envie arquivos pra esse bucket sem CMEK:

gsutil bucketpolicyonly set on gs://backups-mysql-producao