Importa y exporta claves

En este documento, se muestra cómo importar y exportar claves del sistema de administración de claves (KMS). Estas operaciones usan la interfaz de línea de comandos (CLI) de kubectl y se comunican con los siguientes recursos de Kubernetes:

Para ver más detalles sobre estos recursos, consulta la descripción general de la API de KMS.

Consulta la sección Claves compatibles en el documento del sistema de administración de claves para ver la lista completa y los detalles de las claves compatibles con KMS.

Este documento está dirigido a los públicos del grupo de operadores de aplicaciones cuando realizan operaciones de administración de claves en Google Distributed Cloud (GDC) aislado. Para obtener más información, consulta Públicos de la documentación de GDC aislado.

Antes de comenzar

Antes de importar o exportar claves, debes tener los permisos necesarios y preparar tu entorno.

Solicita roles de IAM

Comunícate con el administrador de la organización de IAM para solicitar los siguientes roles en tu proyecto:

  • Administrador de importación de claves de KMS (kms-keyimport-admin): Crea, actualiza y borra recursos de KeyImport.
  • Administrador de exportación de claves de KMS (kms-keyexport-admin): Crea, actualiza y borra recursos de KeyExport.

Prepara el entorno

Importa una clave exportada

Para importar una clave exportada, completa los siguientes pasos:

  1. Crea un archivo YAML y agrega el recurso KeyImport como el valor del objeto kind:

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

    Reemplaza las siguientes variables:

    • KEY_IMPORT_NAME: Es el nombre del recurso KeyImport, por ejemplo: key-import-test.
    • PROJECT: Es el nombre del espacio de nombres del proyecto, por ejemplo: kms-test1.
    • MECHANISM: Es el mecanismo de uso compartido de la clave, por ejemplo, `EDCH_P521_AES256` .
  2. Aplica el contenido del archivo YAML al KMS y crea el recurso KeyImport:

    kubectl apply -f FILENAME.yaml
    

    Reemplaza FILENAME por el nombre del archivo YAML.

    Con la clave pública de un par de claves generado de forma interna, el KMS actualiza el estado del recurso KeyImport a AwaitingKeyToImport. Para continuar, debes ver el estado del recurso y obtener la clave pública generada por KMS.

  3. Para ver el estado del recurso KeyImport y obtener la clave pública generada por KMS, ejecuta lo siguiente:

    kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT
    

    Reemplaza las siguientes variables:

    • KEY_IMPORT_NAME: Es el nombre del recurso KeyImport, por ejemplo, key-import-test.
    • PROJECT: el nombre del espacio de nombres del proyecto, por ejemplo, kms-test1.

    Después de ejecutar el comando, verás un resultado similar al siguiente:

    ...
    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>
    

    El valor PUBLIC_KEY representa la clave pública generada por KMS. Copia la clave pública y agrégala al recurso KeyExport en el siguiente paso.

  4. Crea otro archivo YAML, agrega el recurso KeyExport como el valor del objeto kind y el siguiente contenido:

    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
    

    Reemplaza las siguientes variables:

    • KEY_EXPORT_NAME: Es el nombre del recurso KeyExport, por ejemplo: key-export-test.
    • PROJECT: Es el nombre del espacio de nombres del proyecto, por ejemplo, kms-test1.

    • MECHANISM: Es el mecanismo de uso compartido de la clave, por ejemplo, `EDCH_P521_AES256` .

    • PUBLIC_KEY: Es la clave pública de keyImport.Status.PeerContext.PublicKey.

    • KEY_PRIMITIVE: Es la CRD de la clave, por ejemplo, aeadkey y signingkey.

    • KEY_NAME: Es el nombre de la clave, por ejemplo, key-1.

  5. Aplica el contenido del archivo YAML al KMS y crea el recurso KeyExport:

    kubectl apply -f FILENAME.yaml
    

    Reemplaza FILENAME por el nombre del archivo YAML.

    Después de ejecutar el comando, KMS actualiza el estado del recurso KeyExport y genera una clave exportada. Para obtener la clave exportada, consulta el estado del recurso.

  6. Para ver el estado del recurso, ejecuta el siguiente comando:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    Reemplaza las siguientes variables:

    • KEY_EXPORT_NAME: Es el nombre del recurso de KeyExport, por ejemplo, key-export-test.
    • PROJECT: Es el nombre del espacio de nombres del proyecto, por ejemplo, kms-test1.

    Después de ejecutar el comando, verás un resultado similar al siguiente:

    ...
    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 representa los metadatos de la clave exportada. Copia el contenido en EXPORTED_KEY para continuar con el siguiente paso.

  7. Edita el archivo YAML que contiene el recurso KeyImport y agrega el contenido que copiaste del resultado en 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. Después de editar el archivo YAML, aplica el contenido al KMS:

    kubectl apply -f FILENAME.yaml
    

    Después de ejecutar el comando, el KMS importará la clave exportada que proporcionaste.

  9. Para ver los detalles de la clave importada, ejecuta lo siguiente:

    kubectl get keyimport KEY_IMPORT_NAME
    

    Verás un resultado similar al siguiente:

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

    KEY_PRIMITIVE representa el tipo de clave que importaste, entre las claves de AEAD y de firma.