Importe e exporte chaves

Este documento mostra como importar e exportar chaves do Key Management System (KMS). Estas operações usam a interface de linhas de comandos (CLI) kubectl e interagem com os seguintes recursos do Kubernetes:

Para ver mais detalhes sobre estes recursos, consulte a vista geral da API do KMS.

Consulte a secção Chaves compatíveis no documento Key Management System para ver a lista completa e os detalhes das chaves compatíveis com o KMS.

Este documento destina-se a públicos-alvo no grupo de operadores de aplicações quando realizam operações de gestão de chaves no Google Distributed Cloud (GDC) air-gapped. Para mais informações, consulte o artigo Públicos-alvo para a documentação do GDC air-gapped.

Antes de começar

Antes de importar ou exportar chaves, tem de ter as autorizações necessárias e preparar o seu ambiente.

Peça funções de IAM

Contacte o administrador de IAM da sua organização para pedir as seguintes funções no seu projeto:

  • Administrador de importação de chaves do KMS (kms-keyimport-admin): crie, atualize e elimine recursos KeyImport.
  • Administrador de exportação de chaves do KMS (kms-keyexport-admin): crie, atualize e elimine recursos KeyExport.

Prepare o seu ambiente

Importe uma chave exportada

Para importar uma chave exportada, conclua os seguintes passos:

  1. Crie um ficheiro YAML e adicione o recurso KeyImport como o valor do objeto kind:

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

    Substitua as seguintes variáveis:

    • KEY_IMPORT_NAME: o nome do recurso KeyImport— por exemplo: key-import-test.
    • PROJECT: o nome do espaço de nomes do projeto — por exemplo: kms-test1.
    • MECHANISM: o mecanismo de partilha de chaves da chave — por exemplo: `EDCH_P521_AES256` .
  2. Aplique o conteúdo do ficheiro YAML ao KMS e crie o recurso KeyImport:

    kubectl apply -f FILENAME.yaml
    

    Substitua FILENAME pelo nome do ficheiro YAML.

    Com a chave pública de um par de chaves gerado internamente, o KMS atualiza o estado do recurso KeyImport para AwaitingKeyToImport. Para continuar, tem de ver o estado do recurso e obter a chave pública gerada pelo KMS.

  3. Para ver o estado do recurso KeyImport e obter a chave pública gerada pelo KMS, execute o seguinte comando:

    kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT
    

    Substitua as seguintes variáveis:

    • KEY_IMPORT_NAME: o nome do recurso KeyImport — por exemplo: key-import-test.
    • PROJECT: o nome do espaço de nomes do projeto — por exemplo: kms-test1.

    Depois de executar o comando, vê um resultado semelhante ao seguinte:

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

    O valor PUBLIC_KEY representa a chave pública gerada pelo KMS. Copie a chave pública e adicione-a ao recurso KeyExport no passo seguinte.

  4. Crie outro ficheiro YAML, adicione o recurso KeyExport como o valor do objeto kind e o seguinte conteúdo:

    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
    

    Substitua as seguintes variáveis:

    • KEY_EXPORT_NAME: o nome do recurso KeyExport — por exemplo: key-export-test.
    • PROJECT: o nome do espaço de nomes do projeto — por exemplo: kms-test1.

    • MECHANISM: o mecanismo de partilha de chaves da chave — por exemplo: `EDCH_P521_AES256` .

    • PUBLIC_KEY: a chave pública de keyImport.Status.PeerContext.PublicKey.

    • KEY_PRIMITIVE: a CRD da chave — por exemplo, aeadkey e signingkey.

    • KEY_NAME: o nome da chave — por exemplo, key-1.

  5. Aplique o conteúdo do ficheiro YAML ao KMS e crie o recurso KeyExport:

    kubectl apply -f FILENAME.yaml
    

    Substitua FILENAME pelo nome do ficheiro YAML.

    Depois de executar o comando, o KMS atualiza o estado do recurso KeyExport e gera uma chave exportada. Para obter a chave exportada, veja o estado do recurso.

  6. Para ver o estado do recurso, execute o seguinte comando:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    Substitua as seguintes variáveis:

    • KEY_EXPORT_NAME: o nome do recurso KeyExport — por exemplo: key-export-test.
    • PROJECT: o nome do espaço de nomes do projeto — por exemplo: kms-test1.

    Depois de executar o comando, vê um resultado semelhante ao seguinte:

    ...
    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 os metadados da chave exportada. Copie o conteúdo em EXPORTED_KEY para continuar para o passo seguinte.

  7. Edite o ficheiro YAML que contém o recurso KeyImport e adicione o conteúdo que copiou do resultado em 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. Depois de editar o ficheiro YAML, aplique o conteúdo ao KMS:

    kubectl apply -f FILENAME.yaml
    

    Depois de executar o comando, o KMS importa a chave exportada que forneceu.

  9. Para ver os detalhes da chave importada, execute o seguinte comando:

    kubectl get keyimport KEY_IMPORT_NAME
    

    Vê um resultado semelhante ao seguinte:

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

    KEY_PRIMITIVE representa o tipo de chave que importou, entre as chaves AEAD e de assinatura.