Informazioni sulle chiavi di crittografia Apigee

Questa pagina si applica ad Apigee, ma non ad Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Questa sezione descrive i tipi di chiavi di crittografia e come crearle.

Durante la procedura di configurazione di Apigee, vengono generate le seguenti chiavi di crittografia Cloud Key Management Service:

Tipo di chiave Data di creazione Descrizione
Chiave di crittografia del control plane

ConsoleGoogle Cloud :

Interfaccia a riga di comando (CLI):

Quando utilizzi la residenza dei dati, Apigee utilizza questa chiave per criptare i dati di Analytics archiviati in BigQuery all'interno del progetto tenant.

Cripta i proxy API, i server di destinazione, i truststore e i keystore, i dati analitici e qualsiasi altro elemento condiviso tra i runtime.

Apigee ti chiederà di fornire due chiavi CMEK del control plane. Questa chiave e una chiave di crittografia dei dati del consumer API.

La posizione della chiave di crittografia del control plane deve corrispondere a quella del control plane.

Chiave di crittografia dei dati del consumer API

ConsoleGoogle Cloud :

Interfaccia a riga di comando (CLI):

Quando utilizzi la residenza dei dati, Apigee ha bisogno di una singola chiave di regione, oltre alla chiave di crittografia del control plane, che viene utilizzata per i servizi disponibili solo in una singola regione. Ad esempio, Dataflow e Cloud SQL.

La posizione della chiave di crittografia dei dati del consumer API deve trovarsi all'interno della posizione del control plane.

Chiave di crittografia del database di runtime

ConsoleGoogle Cloud :

Interfaccia a riga di comando (CLI):

Cripta i dati delle applicazioni, come KVM, cache e client secret, che vengono poi memorizzati nel database.

Esiste una chiave di crittografia del database di runtime per organizzazione : tutte le istanze/regioni di un'organizzazione condividono la stessa chiave di crittografia del database di runtime.

La chiave di crittografia del database di runtime supporta tutte le località Cloud KMS che supportano Cloud HSM e Cloud EKM. Google consiglia di utilizzare una posizione multiregionale (ad esempio us o europe) o una posizione dual-region (eur5, nam4) quando crei questa chiave.

La posizione della chiave di crittografia del database di runtime deve trovarsi all'interno della posizione del control plane quando si utilizza la residenza dei dati.

Chiave di crittografia del disco

ConsoleGoogle Cloud :

Interfaccia a riga di comando (CLI):

Cripta i dati dell'istanza di runtime prima che vengano scritti su disco.

I tipi di dati criptati includono Key Management System (KMS); Key Value Maps (KVM); definizioni, bucket e contatori di quota; e tutti i dati memorizzati nella cache. I dati di KMS includono prodotti API, sviluppatori, app per sviluppatori, token OAuth (inclusi token di accesso, token di aggiornamento e codici di autorizzazione) e chiavi API.

Questa chiave si trova nella stessa regione dell'istanza di runtime. Quando crei una nuova chiave, fai in modo che la posizione della chiave corrisponda a quella dell'istanza di runtime.

Ogni combinazione di istanza/regione ha la propria chiave di crittografia del disco.

Punti chiave

Quando crei le chiavi di crittografia del disco e del database di runtime, tieni presente quanto segue:

  • La posizione della chiave di crittografia del database di runtime Apigee supporta tutte le posizioni Cloud KMS che supportano Cloud HSM e Cloud EKM.
  • La posizione della chiave di crittografia del disco deve corrispondere a quella dell'istanza di runtime in cui viene utilizzata la chiave.
  • Una volta impostata, non puoi modificare la posizione di nessuna delle due chiavi.
  • Tutte le chiavi devono essere in un portachiavi.
  • Le chiavi di tipi diversi devono trovarsi in portachiavi separati; le chiavi di crittografia del disco non possono trovarsi nello stesso portachiavi della chiave di crittografia del database di runtime.
  • Le chiavi devono avere un purpose. Se utilizzi la riga di comando per generare le nuove chiavi, imposta purpose su encryption. Se utilizzi la console Google Cloud , scegli Crittografia/decrittografia simmetrica per la finalità.
  • Le chiavi sono definite da un percorso della chiave, che utilizza il seguente pattern:
    projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

Elenco delle chiavi esistenti

Se hai già creato nuove chiavi di crittografia Cloud KMS per Apigee, puoi utilizzarle anziché crearne di nuove durante la configurazione.

Per elencare tutte le chiavi KMS in un keyring:

Esegui il comando gcloud kms keys list:

gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION

Sostituisci quanto segue:

  • KEY_RING_NAME: il nome del portachiavi. Ad esempio, my-key-ring.
  • KEY_RING_LOCATION: la posizione fisica del portachiavi, ad esempio us-west1.

In alternativa, puoi visualizzare le chiavi nella console Google Cloud .

Generazione di nuove chiavi dalla riga di comando

Puoi creare un portachiavi e una chiave dalla riga di comando o nella console Google Cloud .

Ogni tipo di chiave deve avere il proprio portachiavi. Ad esempio, le chiavi di crittografia del disco possono essere archiviate in un portachiavi, ma la chiave di crittografia del database di runtime deve essere archiviata in un portachiavi separato.

I passaggi seguenti descrivono come creare un keyring e una chiave e come concedere all'agente di servizio Apigee l'accesso per utilizzare la nuova chiave. Crea portachiavi e chiavi per il control plane (se utilizzi la residenza dei dati), il database di runtime e il disco di runtime.

  1. Crea un nuovo portachiavi utilizzando il comando gcloud kms keyrings create:

    Piano di controllo

    Quando la residenza dei dati è abilitata, crea un portachiavi per il control plane e un altro per la regione dei dati dei consumer.

    gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --project PROJECT_ID
    gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --project PROJECT_ID

    Sostituisci quanto segue:

    • CONTROL_PLANE_KEY_RING_NAME: il nome del portachiavi del control plane.
    • CONTROL_PLANE_LOCATION: la località fisica in cui verranno archiviati i dati del control plane Apigee.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • CONSUMER_DATA_KEY_RING_NAME: il nome del portachiavi della chiave dei dati dei consumatori.
    • CONSUMER_DATA_REGION: una sotto-regione della regione del control plane. Devi specificare sia CONTROL_PLANE_LOCATION sia CONSUMER_DATA_REGION.

    Database runtime

    gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDB_KEY_RING_NAME: il nome del portachiavi del database che stai creando.
    • RUNTIMEDB_KEY_LOCATION: la posizione fisica del portachiavi del database.
    • PROJECT_ID: l' Google Cloud ID progetto.

    La posizione della chiave di crittografia Apigee supporta tutte le posizioni Cloud KMS che supportano Cloud HSM e Cloud EKM.

    Disco runtime

    gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDISK_KEY_RING_NAME: il nome del portachiavi del disco che stai creando.
    • RUNTIMEDISK_KEY_LOCATION: la posizione fisica del portachiavi del disco.
    • PROJECT_ID: l' Google Cloud ID progetto.

    Verifica che il portachiavi del disco sia impostato sulla stessa posizione dell'istanza. Ogni istanza e portachiavi deve avere la propria posizione.

    gcloud kms keyrings list \
    --location  \
    --project $PROJECT_ID

    gcloud kms keyrings describe $DISK_KEY_RING_NAME \
    --location  \
    --project $PROJECT_ID
  2. Il nome del portachiavi deve essere univoco per la tua organizzazione. Se crei regioni aggiuntive, i nomi dei keyring per queste regioni non possono essere uguali a quelli dei keyring esistenti.

  3. Crea una chiave utilizzando il comando kms keys create:

    Piano di controllo

    Quando la residenza dei dati è abilitata, crea un portachiavi per il control plane e un altro per la regione dei dati dei consumer.

    gcloud kms keys create CONTROL_PLANE_KEY_NAME \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --purpose "encryption" \
    --project PROJECT_ID
    gcloud kms keys create CONSUMER_DATA_KEY_NAME \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --purpose "encryption" \
    --project PROJECT_ID

    Sostituisci quanto segue:

    • CONTROL_PLANE_KEY_NAME: il nome della chiave del control plane.
    • CONTROL_PLANE_KEY_RING_NAME: il nome del portachiavi del control plane.
    • CONTROL_PLANE_LOCATION: la località fisica in cui verranno archiviati i dati del control plane Apigee.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • CONSUMER_DATA_KEY_NAME: il nome della chiave dei dati dei consumatori.
    • CONSUMER_DATA_KEY_RING_NAME: il nome del portachiavi della chiave dei dati dei consumatori.
    • CONSUMER_DATA_REGION: una sotto-regione della regione del control plane. Devi specificare sia CONTROL_PLANE_LOCATION sia CONSUMER_DATA_REGION.

    Database runtime

    gcloud kms keys create RUNTIMEDB_KEY_NAME \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDB_KEY_NAME: il nome della chiave del database che stai creando.
    • RUNTIMEDB_KEY_RING_NAME: il nome del portachiavi del database che stai creando.
    • RUNTIMEDB_KEY_LOCATION: la posizione fisica del portachiavi del database.
    • PROJECT_ID: l' Google Cloud ID progetto.

    Disco runtime

    gcloud kms keys create RUNTIMEDISK_KEY_NAME \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDISK_KEY_NAME: il nome della chiave del disco che stai creando.
    • RUNTIMEDISK_KEY_RING_NAME: il nome del portachiavi del disco che stai creando.
    • RUNTIMEDISK_KEY_LOCATION: la posizione fisica del portachiavi del disco.
    • PROJECT_ID: l' Google Cloud ID progetto.

    Questo comando crea la chiave e la aggiunge al keyring.

    Quando fai riferimento a una chiave, utilizza l'ID chiave.

  4. Concedi all'agente di servizio Apigee l'accesso per utilizzare la nuova chiave utilizzando il comando gcloud kms keys add-iam-policy-binding:

    Piano di controllo

    Quando la residenza dei dati è abilitata, crea un portachiavi per il control plane e un altro per la regione dei dati dei consumer.

    gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \
    --location CONTROL_PLANE_LOCATION \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \
    --location CONSUMER_DATA_REGION \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    

    Sostituisci quanto segue:

    • CONTROL_PLANE_KEY_NAME: il nome della chiave del control plane.
    • CONTROL_PLANE_LOCATION: la località fisica in cui verranno archiviati i dati del control plane Apigee.
    • CONTROL_PLANE_KEY_RING_NAME: il nome del portachiavi del control plane.
    • PROJECT_NUMBER: il Google Cloud numero di progetto.
    • PROJECT_ID: l' Google Cloud ID progetto.
    • CONSUMER_DATA_KEY_NAME: il nome della chiave dei dati dei consumatori.
    • CONSUMER_DATA_REGION: una sotto-regione della regione del control plane. Devi specificare sia CONTROL_PLANE_LOCATION sia CONSUMER_DATA_REGION.
    • CONSUMER_DATA_KEY_RING_NAME: il nome del portachiavi della chiave dei dati dei consumatori.

    Database runtime

    gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDB_KEY_NAME: il nome della chiave del database che stai creando.
    • RUNTIMEDB_KEY_RING_NAME: il nome del portachiavi del database che stai creando.
    • RUNTIMEDB_KEY_LOCATION: la posizione fisica del portachiavi del database.
    • PROJECT_NUMBER: il Google Cloud numero di progetto.
    • PROJECT_ID: l' Google Cloud ID progetto.

    Disco runtime

    gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    Sostituisci quanto segue:

    • RUNTIMEDISK_KEY_NAME: il nome della chiave del disco che stai creando.
    • RUNTIMEDISK_KEY_RING_NAME: il nome del portachiavi del disco che stai creando.
    • RUNTIMEDISK_KEY_LOCATION: la posizione fisica del portachiavi del disco.
    • PROJECT_NUMBER: il Google Cloud numero di progetto.
    • PROJECT_ID: l' Google Cloud ID progetto.

    Questo comando associa la chiave all'agente di servizio Apigee.

    Al termine della richiesta, gcloud risponde con un risultato simile al seguente:

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

    Se ricevi un errore simile al seguente:

    INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

    Assicurati di aver utilizzato il numero di progetto e non il nome del progetto nell'indirizzo email del account di servizio.

    Per verificare che la chiave sia associata all'agente di servizio Apigee:

    gcloud kms keys get-iam-policy $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

    gcloud kms keys describe $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

Generazione di nuove chiavi utilizzando la console Google Cloud

Puoi generare nuove chiavi utilizzando la console, come descritto in Crea una chiave di crittografia simmetrica.

Quando utilizzi la console per creare una nuova chiave:

  • Per la chiave di crittografia del database di runtime, imposta la posizione su una qualsiasi posizione Cloud KMS che supporti Cloud HSM e Cloud EKM. L'interfaccia utente non ti consente di scegliere un'altra posizione per la chiave, quindi corrisponderà a quella che scegli nel portachiavi.
  • Dopo aver creato la chiave, ottieni il percorso della chiave nel riquadro Chiavi crittografiche facendo clic su Altro accanto alla chiave e selezionando Copia nome risorsa.

Recuperare l'ID chiave

Quando fai riferimento a una risorsa Cloud Key Management Service utilizzando l'API Cloud KMS o Google Cloud CLI, utilizzi l'ID risorsa. Puoi ottenere l'ID chiave con il comando gcloud kms keys list:

Piano di controllo

Quando la residenza dei dati è abilitata, esiste un portachiavi per il piano di controllo e un altro per la regione di dati dei consumatori.

gcloud kms keys list \
--location=CONTROL_PLANE_LOCATION \
--keyring=CONTROL_PLANE_KEY_RING_NAME \
--project=PROJECT_ID

gcloud kms keys list \
--location=CONSUMER_DATA_REGION \
--keyring=CONSUMER_DATA_KEY_RING_NAME \
--project=PROJECT_ID

L'ID chiave ha la seguente sintassi (simile a un percorso file):

projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME

Database runtime

gcloud kms keys list \
--location=RUNTIMEDB_KEY_LOCATION \
--keyring=RUNTIMEDB_KEY_RING_NAME \
--project=PROJECT_ID

L'ID chiave ha la seguente sintassi (simile a un percorso file):

projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME

Disco runtime

gcloud kms keys list \
  --location=RUNTIMEDISK_KEY_LOCATION \
  --keyring=RUNTIMEDISK_KEY_RING_NAME \
  --project=PROJECT_ID

L'ID chiave ha la seguente sintassi (simile a un percorso file):

projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME

Ad esempio:

NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

Puoi anche ottenere l'ID chiave nella Google Cloud console. Per saperne di più, vedi Recupero di un ID risorsa Cloud KMS.