Importar e exportar chaves no OVHcloud KMS com BYOK
Saiba como importar e exportar em segurança material de chave encriptado com o OVHcloud KMS através de encapsulamento RSA assimétrico (BYOK)
Objetivo
Bring Your Own Key (BYOK) permite-lhe importar e exportar material de chave criptográfico com o OVHcloud Key Management Service (KMS) sem o enviar em texto claro. Um par de chaves RSA de transporte protege o material em trânsito: a chave pública encapsula-o e apenas o detentor da chave privada o pode desencapsular.
Este guia explica como importar e exportar uma chave com o OVHcloud KMS utilizando encapsulamento de chave RSA assimétrico (BYOK).
Requisitos
- Dispor de uma conta de cliente OVHcloud.
- Ter encomendado um KMS OVHcloud.
- Ter configurado um método de autenticação para o plano de dados OKMS (token de acesso pessoal, conta de serviço ou certificado de acesso).
- Poder aplicar uma política IAM no seu domínio OKMS; as ações BYOK necessárias estão listadas em Configurar o IAM para o BYOK.
- Opcional: a CLI OKMS ou o SDK Go instalado para os exemplos nos separadores.
Instruções
Compreender a cerimónia de encapsulamento RSA
A cerimónia envolve dois ambientes e um operador:
- Destino (Dst): o seu domínio OKMS, onde a chave importada será armazenada.
- Origem (Src): o sistema que detém atualmente o material de chave (outro KMS, uma aplicação ou uma ferramenta como o OpenSSL).
- Operator: a entidade que dispõe das permissões necessárias para aceder tanto ao domínio OKMS como à origem da chave a importar. Pode ser uma pessoa que utiliza o CLI OKMS ou um serviço que atua através da API.
- Gere um par de chaves RSA de transporte no OVHcloud KMS com as operações
wrapKeyeunwrapKey. - Exporte a chave de transporte pública do OVHcloud KMS.
- Importe a chave de transporte pública no ambiente de origem.
- Na origem, exporte o material de chave encapsulado (encriptado) com a chave de transporte utilizando
RSA-OAEPouRSA-OAEP-256. - No destino, importe a chave encapsulada com
POST /api/{okmsId}/v1/servicekeye uma carga útilwrappedKeys. O KMS desencapsula o ciphertext com a chave de transporte privada e armazena a chave de serviço resultante.
As chaves importadas desta forma têm never_extractable definido como false, porque o material existia fora do KMS antes da importação. Para extrair posteriormente uma chave sob forma encapsulada, defina extractable como true e siga Exportar uma chave encapsulada. Consulte Atributos de sensibilidade das chaves de serviço para a lista completa de atributos.
Para seguir este guia precisa de dois valores do seu domínio OKMS: o seu endpoint regional e o seu okmsId. As chamadas à API REST incluem ambos no URL, enquanto o CLI OKMS e o SDK Go os leem da respetiva configuração. Ambos são devolvidos pela seguinte chamada à API:
Também são apresentados no separador Informações gerais do .
Prefira esta cerimónia à importação de chave em texto claro sempre que a chave deva permanecer de confiança durante o trânsito.
Configurar o IAM para o BYOK
Aplique uma política ao recurso do seu domínio OKMS. O respetivo URN é apresentado no separador Informações gerais do . Substitua <identity_urn> e <okms_urn> pelos seus valores. Crie as políticas através da Área de Cliente OVHcloud ou da API OVHcloud.
Importação BYOK — ler, criar ou importar chaves de serviço e desencapsular com uma chave de transporte:
Exportação BYOK — importar uma chave de transporte pública, atualizar a extraibilidade e encapsular uma chave para exportação:
Para a importação, serviceKey/unwrapKey deve estar autorizado na chave de transporte RSA referenciada por wrappingKeyId. Para a exportação, importe primeiro a chave de transporte pública de destino (create / import), depois autorize serviceKey/wrapKey nessa chave de transporte e serviceKey/get na chave exportada. serviceKey/update é necessário para definir extractable antes (e depois) da exportação.
Criar a chave de transporte RSA no KMS de destino
Crie uma chave RSA dedicada ao encapsulamento. Para a cerimónia de importação, defina nesta chave tanto wrapKey como unwrapKey; são mutuamente exclusivas com sign e verify.
Tamanhos de chave RSA suportados: 2048, 3072 ou 4096 bits.
SOFTWARE é o nível de proteção predefinido, pelo que não precisa de o indicar.
Guarde o id da chave devolvida — irá precisar dele como wrappingKeyId durante a importação.
Obter a chave de transporte pública
Exporte a parte pública da chave de transporte e forneça-a ao ambiente de origem. Nunca partilhe a chave privada — ela permanece dentro do KMS de destino.
A resposta inclui o material de chave pública no array keys (JWK).
Encapsular o material de chave de origem
No ambiente de origem, encripte o material de chave com a chave RSA pública de destino.
Este passo é realizado fora do OVHcloud KMS: utilize uma biblioteca JOSE no ambiente de origem.
Algoritmos de encapsulamento suportados (RFC 7518):
keyFormatType descreve o formato do material de chave em texto claro antes do encapsulamento e após o desencapsulamento. O ciphertext é sempre uma cadeia JWE Compact Serialization (o algoritmo de encapsulamento é transportado no cabeçalho JWE).
Após o encapsulamento com a chave pública de destino, envie no pedido de importação o ciphertext JWE Compact Serialization resultante.
Importar a chave encapsulada
Invoque POST /api/{okmsId}/v1/servicekey com um array wrappedKeys em vez de keys em texto claro.
Cada entrada de wrappedKeys:
Pode importar uma chave apenas pública (class passa a PUBLIC_KEY) ou uma chave privada (o KMS reconstrói a parte pública; class passa a KEY_PAIR). O material simétrico é armazenado como SECRET_KEY.
Ações IAM nesta chamada: okms:apikms:serviceKey/create, okms:apikms:serviceKey/import e okms:apikms:serviceKey/unwrapKey na chave de transporte.
Valores de keyFormatType: RAW, JWK, PKCS1 ou PKCS8.
Verificar a chave importada
Confirme que a chave existe e corresponde ao tipo e às operações esperadas.
Verifique que:
- o
stateda chave éactive(ou ative-a se o seu fluxo de trabalho o exigir). type,sizeeoperationscorrespondem ao esperado.- os atributos de sensibilidade em
attributesrefletem uma chave importada (never_extractablevalefalse).
Pode depois utilizar a chave para encrypt, decrypt, sign ou verify, conforme documentado em Utilizar o seu OVHcloud Key Management Service (KMS).
Exportar uma chave encapsulada
A exportação segura é o inverso da importação: o OVHcloud KMS encripta o material de chave com uma chave de transporte RSA e devolve apenas um ciphertext JWE. A chave de transporte privada deve residir no ambiente de destino — aqui o sistema externo que recebe a chave, não o OVHcloud KMS — para que apenas esse ambiente possa desencapsular o material.
Compreender a cerimónia de exportação
- Gere um par de chaves RSA de transporte no ambiente de destino (outro KMS ou uma ferramenta que receberá a chave).
- Importe a chave de transporte pública de destino no OVHcloud KMS com a operação
wrapKey(nível de proteçãoSOFTWARE). Esta chave é owrappingKeyIdutilizado no momento da exportação. - No OVHcloud KMS, defina
extractablecomotruena chave de serviço imediatamente antes da exportação, depois exporte-a encapsulada por essa chave de transporte. Volte a definirextractablecomofalsequando possível. - Transfira o ciphertext para o destino e desencapsule-o com a chave de transporte privada de destino.
Não gere o par de chaves de transporte de exportação no OVHcloud KMS. Se a chave de transporte privada permanecesse no OVHcloud KMS, o destino não conseguiria desencapsular o ciphertext. Apenas a parte pública é importada no OVHcloud KMS para o encapsulamento.
A chave de transporte referenciada por wrappingKeyId deve ser uma chave RSA SOFTWARE no mesmo domínio OKMS, com a utilização wrapKey. As chaves sensíveis (material AES/oct e RSA/EC privado) só podem ser extraídas após encapsulamento — a extração em texto claro não é suportada para essas chaves.
Importar a chave de transporte pública de destino no OVHcloud KMS
Registe a chave pública de destino para que o OVHcloud KMS possa encapsular com ela a chave exportada. Importe-a como chave RSA apenas pública com wrapKey (sem material privado).
Guarde o id da chave devolvida como wrappingKeyId.
Ativar a extração
A chave que exporta deve ser extraível. Prefira definir extractable como true apenas para a operação de exportação (via PATCH) e voltar a defini-lo como false de seguida. Mantenha as chaves não extraíveis na criação sempre que possível: tornar uma chave extraível fixa definitivamente never_extractable como false.
Ativar a extração reduz a fronteira de proteção da chave. Defina extractable como true apenas quando precisar de migrar a chave e volte a defini-lo como false de seguida, quando possível.
Ação IAM: okms:apikms:serviceKey/update.
Após uma exportação encapsulada bem-sucedida (consulte Exportar a chave encapsulada com a chave de transporte), desative novamente a extração:
Exportar a chave encapsulada com a chave de transporte
Invoque GET /api/{okmsId}/v1/servicekey/{keyId} com os parâmetros de consulta de encapsulamento abaixo. Quando estes parâmetros estão presentes, a API devolve wrappedKeys em vez de keys em texto claro.
Ações IAM: okms:apikms:serviceKey/get na chave exportada e okms:apikms:serviceKey/wrapKey na chave de transporte.
Exemplo de resposta:
Desencapsular o ciphertext no destino
Transfira o ciphertext para o ambiente de destino. Desencapsule-o com a chave de transporte privada de destino (a contraparte da chave pública que importou no OVHcloud KMS).
- Se o destino for outro domínio OKMS, importe aí o material encapsulado com
wrappedKeyscomo em Importar a chave encapsulada, utilizando o identificador da chave de transporte desse domínio comowrappingKeyId. - Se o destino for um sistema externo, utilize a respetiva API nativa de desencapsulamento / importação com a chave de transporte privada e o mesmo
keyFormatType/ algoritmo de encapsulamento que na exportação.
Quer saber mais?
Utilizar o seu OVHcloud Key Management Service (KMS)
Primeiros passos com OVHcloud Key Management Service (KMS)
Fale com a nossa comunidade de utilizadores.