Importar e exportar chaves

Neste documento, mostramos como importar e exportar chaves do sistema de gerenciamento de chaves (KMS, na sigla em inglês). Essas operações usam a interface de linha de comando (CLI) kubectl e interagem com os seguintes recursos do Kubernetes:

Para mais detalhes sobre esses recursos, consulte a visão geral da API KMS.

Consulte a seção Chaves compatíveis no documento do sistema de gerenciamento de chaves para ver a lista completa e os detalhes das chaves compatíveis com o KMS.

Este documento é destinado a públicos-alvo do grupo de operadores de aplicativos ao realizar operações de gerenciamento de chaves no Google Distributed Cloud (GDC) com isolamento físico. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

Antes de importar ou exportar chaves, você precisa ter as permissões necessárias e preparar o ambiente.

Solicitar papéis do IAM

Entre em contato com o admin. da organização do IAM para solicitar os seguintes papéis no seu projeto:

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

Preparar o ambiente

Importar uma chave exportada

Para importar uma chave exportada, siga estas etapas:

  1. Crie um arquivo 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 namespace do projeto, por exemplo: kms-test1.
    • MECHANISM: o mecanismo de compartilhamento da chave, por exemplo: `EDCH_P521_AES256` .
  2. Aplique o conteúdo do arquivo YAML ao KMS e crie o recurso KeyImport:

    kubectl apply -f FILENAME.yaml
    

    Substitua FILENAME pelo nome do arquivo YAML.

    Com a chave pública de um par de chaves gerado internamente, o KMS atualiza o status do recurso KeyImport para AwaitingKeyToImport. Para continuar, você precisa ver o status do recurso e receber a chave pública gerada pelo KMS.

  3. Para conferir o status do recurso KeyImport e receber a chave pública gerada pelo KMS, execute o seguinte:

    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 namespace do projeto, por exemplo: kms-test1.

    Depois de executar o comando, você verá uma saída parecida com esta:

    ...
    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 na etapa a seguir.

  4. Crie outro arquivo 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 namespace do projeto, por exemplo: kms-test1.

    • MECHANISM: o mecanismo de compartilhamento 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 arquivo YAML ao KMS e crie o recurso KeyExport:

    kubectl apply -f FILENAME.yaml
    

    Substitua FILENAME pelo nome do arquivo YAML.

    Depois de executar o comando, o KMS atualiza o status do recurso KeyExport e gera uma chave exportada. Para acessar a chave exportada, confira o status do recurso.

  6. Para ver o status do recurso, execute o seguinte:

    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 namespace do projeto. Por exemplo: kms-test1.

    Depois de executar o comando, você vai receber uma saída como esta:

    ...
    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 a próxima etapa.

  7. Edite o arquivo YAML que contém o recurso KeyImport e adicione o conteúdo que você copiou da saída 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 arquivo YAML, aplique o conteúdo ao KMS:

    kubectl apply -f FILENAME.yaml
    

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

  9. Para ver detalhes sobre a chave importada, execute o seguinte:

    kubectl get keyimport KEY_IMPORT_NAME
    

    Você verá uma saída semelhante a esta:

    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 você importou, entre as chaves AEAD e de assinatura.