Importar y exportar claves

En esta página se incluyen instrucciones para que el operador de aplicaciones (AO) realice operaciones de importación de claves desde sistemas de gestión de claves (KMS) exportados. La AO realiza las operaciones de importación y exportación mediante la interfaz de línea de comandos (CLI) kubectl de los siguientes recursos:

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

Consulta la sección Claves admitidas de la página Sistemas de gestión de claves (KMS) para ver la lista completa y los detalles de las claves admitidas por KMS.

Antes de empezar

Antes de continuar, asegúrate de que tienes lo siguiente:

  • El comando kubectl configurado para acceder al servidor de la API Management. Para ello, sigue las secciones Obtener un archivo kubeconfig y Interfaz de línea de comandos (CLI) de gdcloud.

  • Los roles Administrador de importación de claves de KMS y Administrador de exportación de claves de KMS. Para obtener los permisos que necesitas para importar una clave exportada, pide a tu administrador de la plataforma que te conceda los roles de administrador de importación de claves de KMS (kms-keyimport-admin) y administrador de exportación de claves de KMS (kms-keyexport-admin).

Importar una clave exportada

Para importar una clave exportada, sigue estos pasos:

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

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

    Sustituye las siguientes variables:

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

    kubectl apply -f FILENAME.yaml
    

    Sustituye FILENAME por el nombre del archivo YAML.

    Con la clave pública de un par de claves generado internamente, 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
    

    Sustituye las siguientes variables:

    • KEY_IMPORT_NAME: 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 añádela al recurso KeyExport en el paso siguiente.

  4. Crea otro archivo YAML, añade el recurso KeyExport como 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
    

    Sustituye las siguientes variables:

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

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

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

    • KEY_PRIMITIVE: el CRD de la clave (por ejemplo, aeadkey y signingkey).

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

  5. Aplica el contenido del archivo YAML a KMS y crea el KeyExportrecurso:

    kubectl apply -f FILENAME.yaml
    

    Sustituye 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, ejecute lo siguiente:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    Sustituye las siguientes variables:

    • KEY_EXPORT_NAME: el nombre del KeyExport recurso (por ejemplo, key-export-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: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 de EXPORTED_KEY para continuar con el siguiente paso.

  7. Edita el archivo YAML que contiene el recurso KeyImport y añade el contenido que has copiado 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, KMS importa la clave exportada que has proporcionado.

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

    kubectl get keyimport KEY_IMPORT_NAME
    

    Verá 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 has importado, entre las claves AEAD y de firma.