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:
- Criar uma chave KMS (KeyRing + Key).
- Configurar o bucket GCS para usar essa chave como CMEK padrão.
- Garantir que a Service Account usada no export tenha permissão de Encrypt/Decrypt na chave.
- 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:
-
Todo arquivo novo gravado nesse bucket seja criptografado automaticamente com CMEK.
-
Os dumps
.sql.gzenviados pela Cloud Function já fiquem protegidos com sua chave.
✅ 3️⃣ Dar permissão à Service Account para usar a CMEK
A service account responsável pelo export precisará das permissões:
roles/cloudkms.cryptoKeyEncrypterDecrypter
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
-
Você controla a chave (Google não).
-
Pode revogar a chave e tornar o arquivo irrecuperável.
-
Pode gerar logs de auditoria (
Cloud Audit Logs). -
Conformidade: LGPD, ISO, SOC, PCI, HIPAA, etc.
-
Separação de papéis: backup num bucket, chave no KMS.
🔥 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