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 deKeyImport. - Administrador de exportación de claves de KMS (
kms-keyexport-admin): Crea, actualiza y borra recursos deKeyExport.
Prepara el entorno
Genera un archivo kubeconfig para configurar el acceso a
kubectl.
Importa una clave exportada
Para importar una clave exportada, completa los siguientes pasos:
Crea un archivo YAML y agrega el recurso
KeyImportcomo el valor del objetokind:apiVersion: "kms.gdc.goog/v1" kind: KeyImport metadata: name: KEY_IMPORT_NAME namespace: PROJECT spec: context: mechanism: MECHANISMReemplaza 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` .
- KEY_IMPORT_NAME: Es el nombre del recurso
Aplica el contenido del archivo YAML al KMS y crea el recurso
KeyImport:kubectl apply -f FILENAME.yamlReemplaza 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
KeyImportaAwaitingKeyToImport. Para continuar, debes ver el estado del recurso y obtener la clave pública generada por KMS.Para ver el estado del recurso
KeyImporty obtener la clave pública generada por KMS, ejecuta lo siguiente:kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECTReemplaza 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
KeyExporten el siguiente paso.- KEY_IMPORT_NAME: Es el nombre del recurso
Crea otro archivo YAML, agrega el recurso
KeyExportcomo el valor del objetokindy 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_NAMEReemplaza 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.
- KEY_EXPORT_NAME: Es el nombre del recurso
Aplica el contenido del archivo YAML al KMS y crea el recurso
KeyExport:kubectl apply -f FILENAME.yamlReemplaza FILENAME por el nombre del archivo YAML.
Después de ejecutar el comando, KMS actualiza el estado del recurso
KeyExporty genera una clave exportada. Para obtener la clave exportada, consulta el estado del recurso.Para ver el estado del recurso, ejecuta el siguiente comando:
kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECTReemplaza 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_KEYEXPORTED_KEY representa los metadatos de la clave exportada. Copia el contenido en EXPORTED_KEY para continuar con el siguiente paso.
- KEY_EXPORT_NAME: Es el nombre del recurso de
Edita el archivo YAML que contiene el recurso
KeyImporty agrega el contenido que copiaste del resultado enkeyexport.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_KEYDespués de editar el archivo YAML, aplica el contenido al KMS:
kubectl apply -f FILENAME.yamlDespués de ejecutar el comando, el KMS importará la clave exportada que proporcionaste.
Para ver los detalles de la clave importada, ejecuta lo siguiente:
kubectl get keyimport KEY_IMPORT_NAMEVerás un resultado similar al siguiente:
NAMESPACE NAME AGE READY REASON KEY KIND kms-test1 KEY_IMPORT_NAME 60s True KeyImportCompleted KEY_PRIMITIVEKEY_PRIMITIVE representa el tipo de clave que importaste, entre las claves de AEAD y de firma.