Importare ed esportare chiavi

Questo documento mostra come importare ed esportare le chiavi del sistema di gestione delle chiavi (KMS). Queste operazioni utilizzano l'interfaccia a riga di comando (CLI) kubectl e interagiscono con le seguenti risorse Kubernetes:

Per visualizzare ulteriori dettagli su queste risorse, consulta la panoramica dell'API KMS.

Consulta la sezione Chiavi supportate nel documento Sistema di gestione delle chiavi per visualizzare l'elenco completo e i dettagli delle chiavi supportate da KMS.

Questo documento è rivolto ai membri del gruppo di operatori di applicazioni che eseguono operazioni di gestione delle chiavi in Google Distributed Cloud (GDC) con air gap. Per saperne di più, consulta Pubblico per la documentazione di GDC con air gap.

Prima di iniziare

Prima di importare o esportare le chiavi, devi disporre delle autorizzazioni necessarie e preparare l'ambiente.

Richiedi ruoli IAM

Contatta l'amministratore dell'organizzazione IAM per richiedere i seguenti ruoli nel tuo progetto:

  • KMS Key Import Admin (kms-keyimport-admin): crea, aggiorna ed elimina le risorse KeyImport.
  • KMS Key Export Admin (kms-keyexport-admin): crea, aggiorna ed elimina le risorse KeyExport.

prepara l'ambiente

Importa una chiave esportata

Per importare una chiave esportata, segui questi passaggi:

  1. Crea un file YAML e aggiungi la risorsa KeyImport come valore dell'oggetto kind:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: KEY_IMPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
    

    Sostituisci le seguenti variabili:

    • KEY_IMPORT_NAME: il nome della risorsa KeyImport, ad esempio: key-import-test.
    • PROJECT: il nome dello spazio dei nomi del progetto, ad esempio kms-test1.
    • MECHANISM: il meccanismo di condivisione della chiave, ad esempio: `EDCH_P521_AES256` .
  2. Applica i contenuti del file YAML a KMS e crea la risorsa KeyImport:

    kubectl apply -f FILENAME.yaml
    

    Sostituisci FILENAME con il nome del file YAML.

    Con la chiave pubblica di una coppia di chiavi generata internamente, il KMS aggiorna lo stato della risorsa KeyImport in AwaitingKeyToImport. Per continuare, devi visualizzare lo stato della risorsa e ottenere la chiave pubblica generata da KMS.

  3. Per visualizzare lo stato della risorsa KeyImport e ottenere la chiave pubblica generata da KMS, esegui questo comando:

    kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT
    

    Sostituisci le seguenti variabili:

    • KEY_IMPORT_NAME: il nome della risorsa KeyImport, ad esempio key-import-test.
    • PROJECT: il nome dello spazio dei nomi del progetto, ad esempio kms-test1.

    Dopo aver eseguito il comando, visualizzi un output simile al seguente:

    ...
    Status:
      Conditions:
        Last Transition Time:  2022-12-14T20:43:50Z
        Message:               waiting for user to provide KeyToImport
        Observed Generation:   1
        Reason:                AwaitingKeyToImport
        Status:                False
        Type:                  Ready
      Imported Key Ref:
        Kind: KeyImport
        Name: key-import-test
      Peer Context:
        Private Key:
        Public Key: PUBLIC_KEY
    Events:           <none>
    

    Il valore PUBLIC_KEY rappresenta la chiave pubblica generata da KMS. Copia la chiave pubblica e aggiungila alla risorsa KeyExport nel passaggio successivo.

  4. Crea un altro file YAML, aggiungi la risorsa KeyExport come valore dell'oggetto kind e i seguenti contenuti:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyExport
    metadata:
      name: KEY_EXPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
        publicKey: PUBLIC_KEY
      keyToExport:
        kind: KEY_PRIMITIVE
        name: KEY_NAME
    

    Sostituisci le seguenti variabili:

    • KEY_EXPORT_NAME: il nome della risorsa KeyExport, ad esempio: key-export-test.
    • PROJECT: il nome dello spazio dei nomi del progetto, ad esempio kms-test1.

    • MECHANISM: il meccanismo di condivisione della chiave, ad esempio: `EDCH_P521_AES256` .

    • PUBLIC_KEY: la chiave pubblica di keyImport.Status.PeerContext.PublicKey.

    • KEY_PRIMITIVE: il CRD della chiave, ad esempio aeadkey e signingkey.

    • KEY_NAME: il nome della chiave, ad esempio key-1.

  5. Applica i contenuti del file YAML a KMS e crea la risorsa KeyExport:

    kubectl apply -f FILENAME.yaml
    

    Sostituisci FILENAME con il nome del file YAML.

    Dopo aver eseguito il comando, il KMS aggiorna lo stato della risorsa KeyExport e genera una chiave esportata. Per ottenere la chiave esportata, visualizza lo stato della risorsa.

  6. Per visualizzare lo stato della risorsa, esegui questo comando:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    Sostituisci le seguenti variabili:

    • KEY_EXPORT_NAME: il nome della risorsa KeyExport, ad esempio key-export-test.
    • PROJECT: il nome dello spazio dei nomi del progetto, ad esempio kms-test1.

    Dopo aver eseguito il comando, viene visualizzato un output simile al seguente:

    ...
    Status:
    Conditions:
    Last Transition Time:  2022-12-14T20:45:57Z
    Message:               key successfully exported
    Observed Generation:   1
    Reason:                KeyExportCompleted
    Status:                True
    Type:                  Ready
    Exported Key: EXPORTED_KEY
    

    EXPORTED_KEY rappresenta i metadati della chiave esportata. Copia i contenuti in EXPORTED_KEY per continuare con il passaggio successivo.

  7. Modifica il file YAML che contiene la risorsa KeyImport e aggiungi i contenuti copiati dall'output in keyexport.status.exportedkey.

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: key-import-test
      namespace: kms-test1
    spec:
      context:
        mechanism: EDCH_P521_AES256
      keyToImport: EXPORTED_KEY
    
  8. Dopo aver modificato il file YAML, applica i contenuti al KMS:

    kubectl apply -f FILENAME.yaml
    

    Dopo aver eseguito il comando, il KMS importa la chiave esportata che hai fornito.

  9. Per visualizzare i dettagli della chiave importata, esegui questo comando:

    kubectl get keyimport KEY_IMPORT_NAME
    

    Viene visualizzato un output simile al seguente:

    NAMESPACE   NAME             AGE    READY   REASON              KEY KIND
    kms-test1  KEY_IMPORT_NAME   60s    True    KeyImportCompleted  KEY_PRIMITIVE
    

    KEY_PRIMITIVE rappresenta il tipo di chiave che hai importato, tra le chiavi AEAD e di firma.