Importar e exportar chaves

Esta página inclui instruções para o operador de aplicativos (AO, na sigla em inglês) realizar operações importantes de importação de chaves exportadas de sistemas de gerenciamento de chaves (KMS, na sigla em inglês). O AO realiza as operações de importação e exportação usando a interface de linha de comando (CLI) kubectl dos seguintes recursos:

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

Consulte a seção Chaves compatíveis na página Sistemas de gerenciamento de chaves (KMS) para conferir a lista completa e os detalhes das chaves compatíveis com o KMS.

Antes de começar

Antes de continuar, verifique se você tem o seguinte:

  • O comando kubectl configurado para acessar o servidor da API Management. Para fazer isso, siga as seções Receber um arquivo kubeconfig e Interface de linha de comando (CLI) gdcloud.

  • Os papéis de administrador de importação e exportação de chaves do KMS. Para receber as permissões necessárias para importar uma chave exportada, peça ao administrador da plataforma (PA, na sigla em inglês) que conceda a você os papéis de administrador de importação de chaves do KMS (kms-keyimport-admin) e administrador de exportação de chaves do KMS (kms-keyexport-admin).

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, confira o status do recurso e obtenha 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 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 namespace do projeto. Por exemplo: kms-test1.

    Depois de executar o comando, você vai ver uma saída semelhante a 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 próxima etapa.

  4. Crie outro arquivo YAML, adicione o recurso KeyExport como o valor do objeto kind e o conteúdo a seguir:

    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: o 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 receber a chave exportada, consulte o status do recurso.

  6. Para conferir o status 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 namespace do projeto. Por exemplo, kms-test1.

    Depois de executar o comando, você vai ver uma saída semelhante a 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 com a próxima etapa.

  7. Edite o arquivo YAML que contém o recurso KeyImport e adicione o conteúdo copiado 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 conferir 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.