DA MASER A MONFUMO | MOTO GUZZI V85TT | PURE SOUND POV 4K

🏍️ Il mio nuovo canale YouTube: giri in moto in POV, solo audio, tra le Dolomiti in 4K. Niente musica, niente parole — solo il motore e le Alpi. Vieni a fare un giro!

Iscriviti

Poiché il mio progetto era già avviato, ho dovuto solo creare un keyring e una crypto key su Cloud KMS che verranno utilizzati per cifrare e decifrare i segreti. Questo può essere fatto tramite Terraform con poche risorse:

data "google_project" "secrets" {
  project_id = "secrets"
}
 
resource "google_kms_key_ring" "this" {
  project  = data.google_project.secrets.project_id
  name     = "default"
  location = "europe-west4"
}
 
resource "google_kms_crypto_key" "this" {
  name     = "default"
  key_ring = google_kms_key_ring.this.self_link
}
 
resource "google_project_iam_member" "this" {
  project = data.google_project.secrets.project_id
  role    = "roles/cloudkms.cryptoKeyEncrypter"
  member  = "group:encrypter@example.com"
}

In questo esempio, sto anche assegnando il ruolo cloudkms.cryptoKeyEncrypter a un gruppo fittizio encrypter@example.com in modo che i membri possano cifrare nuovi segreti.

Cifrare i segreti

Ho poi usato questo comando per cifrare un segreto da utilizzare in Terraform tramite Cloud KMS:

bash
echo -n <your-secret> | gcloud kms encrypt --project <project-name> --location <region> --keyring default --key default --plaintext-file - --ciphertext-file - | base64

Per cifrare un intero file, puoi eseguire:

bash
cat <path-to-your-secret> | gcloud kms encrypt --project <project-name> --location <region> --keyring default --key default --plaintext-file - --ciphertext-file - | base64
  • <your-secret> è la stringa o il file che vuoi cifrare

  • <project-name> è il progetto le cui chiavi KMS devono essere usate per cifrare il segreto.

  • <region> è la regione in cui è configurato il keyring KMS.

Se stai lavorando su macOS, puoi aggiungere | pbcopy al comando in modo che l'output risultante venga aggiunto automaticamente agli appunti.

Infine, una stringa cifrata si presenta così:

YmlueGlzYXdlc29tZWJpbnhpc2F3ZXNvbWViaW54aXNhd2Vzb21lYmlueGlzYXdlc29tZWJpbnhpc2F3ZXNvbWViaW54aXNhd2Vzb21lYmlueGlzYXdlc29tZQ

Configurare il data source Cloud KMS

La stringa cifrata non viene archiviata da nessuna parte. Quello che ho fatto invece è usare il data source Cloud KMS per decifrarla al volo.

data "google_kms_secret" "secret_key" {
  crypto_key = data.google_kms_crypto_key.this.self_link
  ciphertext = "YmlueGlzYXdlc29tZWJpbnhpc2F3ZXNvbWViaW54aXNhd2Vzb21lYmlueGlzYXdlc29tZWJpbnhpc2F3ZXNvbWViaW54aXNhd2Vzb21lYmlueGlzYXdlc29tZQ"
}

Il valore decifrato può essere referenziato con:

data.google_kms_secret.secret_key.plaintext

Terraform decifrerà la stringa automaticamente e la sostituirà con il valore effettivo dove viene referenziata.

In questo breve post ho spiegato come ho usato Cloud KMS per cifrare stringhe che possono essere committate in sicurezza su git e usate in Terraform. Se hai più ambienti da supportare, ricorda che le chiavi KMS sono diverse per ogni progetto, quindi dovrai cifrare la stessa stringa di nuovo, una volta per ogni progetto. Se hai bisogno di indicazioni su come organizzare un repository Terraform multi-progetto, dai un'occhiata al mio recente articolo Come usare i workspace Terraform per gestire la configurazione basata sull'ambiente.