Azure Managed HSM – Biblioteca de Descarregamento TLS
O Azure Managed HSM oferece uma biblioteca TLS Offload, que está em conformidade com o PKCS#11 versão 2.40. O Azure Managed HSM não suporta todas as funções listadas na especificação PKCS#11; em vez disso, a biblioteca TLS Offload suporta um conjunto limitado de mecanismos e funções de interface para Descarga de SSL/TLS apenas com F5 (BigIP) e Nginx, principalmente para gerar chaves de certificado do servidor TLS e gerar assinaturas digitais durante handshakes TLS.
Para obter mais informações, veja GitHub da Biblioteca de Descarga de TLS do Azure Managed HSM.
A Biblioteca de Descarga de TLS utiliza internamente a API REST do Azure Key Vault para interagir com o Azure Managed HSM.
Introdução
Atributos PKCS#11
Para integrar corretamente com o PKCS#11, gerar chaves (através de C_GenerateKeyPair) e localizar objetos-chave (através de C_FindObjectsInit/C_FindObjects) requer uma solução para armazenar atributos PKCS#11 no objeto de chave Key Vault do Azure. A Biblioteca de Descarga de TLS converte estes atributos PKCS#11 necessários em Etiquetas de Key Vault do Azure.
Estas "Etiquetas de Atributo" têm um prefixo especial:
- p11_pri_{P11 Attribute Name} - Atributos de Chave Privada
- p11_pub_{P11 Attribute Name} - Atributos de Chave Pública
A biblioteca TLS Offload define corretamente os atributos Azure Key Vault Key Operations e Key Lifetime para que o serviço possa impor corretamente estas restrições nas chaves geradas. Estes atributos também são armazenados como etiquetas, como outros atributos PKCS#11, para suportar capacidades de consulta.
As aplicações que utilizam a Biblioteca de Descarga de TLS utilizam um ou mais atributos PKCS#11 para localizar e utilizar os objetos-chave.
Aviso
As chaves geradas pela Biblioteca de Descarga de TLS e as respetivas Etiquetas estão acessíveis através da API REST do Azure Key Vault. Manipular estas Etiquetas de Atributo P11 com o Azure Key Vault API REST pode interromper as aplicações da Biblioteca de Descarga de TLS.
Geração de chaves
A Biblioteca de Descarga de TLS inclui uma ferramenta de criação de chaves, mhsm_p11_create_key. Executar a ferramenta sem argumentos de linha de comandos mostra a utilização correta da ferramenta.
A ferramenta de criação de chaves requer um principal de serviço, que é atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".
A ferramenta de criação de chaves lê as credenciais do principal de serviço das variáveis de ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET:
- MHSM_CLIENT_ID – tem de ser definido para o ID de aplicação (cliente) do principal de serviço
- MHSM_CLIENT_SECRET – tem de ser definido como a palavra-passe do principal de serviço (segredo do cliente)
Para identidades geridas, as variáveis de ambiente acima não são necessárias.
- Utilize o
--identity
argumento para ativar a identidade gerida com a ferramenta mhsm_p11_create_key. - A
client_id
identidade gerida atribuída pelo utilizador deve ser citada no ficheiro de configuração MHSM (mhsm-pkcs11.conf). Se aclient_id
de uma identidade gerida atribuída pelo utilizador não for fornecida, irá considerá-la como identidade gerida atribuída pelo sistema.
A ferramenta de criação de chaves gera aleatoriamente um nome para a chave no momento da criação. O ID completo da chave do Azure Key Vault e o nome da chave são impressos na consola para sua comodidade.
MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey
Key is generated successfully. \
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f
O --label
argumento para a ferramenta de criação de chaves especifica a CKA_LABEL pretendida para as chaves privadas e públicas geradas. Normalmente, estes atributos são necessários para configurar soluções de Descarga de TLS suportadas (por exemplo, a definição de configuração SSL nginx "ssl_certificate_key").
Precisa do nome da chave para quaisquer alterações de atribuição de funções através da CLI do Azure.
Controlo de acesso
A Biblioteca de Descarga de TLS traduz o C_FindObjectsInit numa chamada à API REST do Azure Key Vault, que funciona no âmbito /keys. O serviço MHSM requer a permissão de Leitura neste âmbito para que o Utilizador da Biblioteca de Descarga de TLS autorize a operação de localização para as chaves criadas através da ferramenta de criação de chaves.
Para obter mais informações sobre o RBAC local do Azure Managed HSM, veja:
A secção seguinte descreve diferentes abordagens para implementar o controlo de acesso para o principal de serviço biblioteca de descarga de TLS e Identidade Gerida.
Principal de serviço de Descarga de TLS
O principal de serviço TLS Offload é utilizado pela aplicação que utiliza a Biblioteca de Descarga de TLS para aceder a chaves e deve ter, no mínimo, a seguinte permissão através de atribuições de funções:
- Permissão KeyRead para todas as chaves no HSM gerido
- Permissão KeySign para as chaves necessárias para a descarga de TLS
Utilizador Administrador
O utilizador Administração irá criar uma definição de função personalizada e atribuições de funções. Por conseguinte, o utilizador Administração deve ser atribuído a uma das seguintes funções incorporadas no âmbito "/":
- Managed HSM Crypto Officer
- Administrador da Política HSM Gerida
- Administrador do HSM Gerido
Principal de serviço de geração de chaves
O principal de serviço de geração de chaves é utilizado com a ferramenta de criação de chaves (mhsm_p11_create_key) para gerar chaves de descarga TLS. Este principal de serviço deve ser atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".
CLI do Azure
A CLI do Azure pode ser utilizada para executar tarefas como a atribuição de funções.
Abordagem permissiva
A abordagem permissiva é mais simples e adequada quando o Azure Managed HSM é utilizado exclusivamente para a descarga de TLS.
Atribua a função Utilizador Cripto ao principal de serviço TLS Offload no âmbito "/keys". Isto dá ao principal de serviço TLS Offload a permissão para gerar chaves e encontrá-las para Descarga de TLS.
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User" \
--assignee TLSOffloadServicePrincipal@contoso.com \
--scope /keys
Para Identidades Geridas, especifique os argumentos de comando da seguinte forma:
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User" \
--assignee-object-id <object_id> \
--assignee-principal-type MSI \
--scope /keys
Abordagem granular
A abordagem granular implementa o controlo de acesso detalhado. Requer dois principais de serviço (principal de serviço TLS Offload e principal de serviço de Geração de Chaves) e um Utilizador Administração.
O objetivo é restringir as permissões do principal de serviço TLS Offload para suportar o mínimo necessário para a descarga de TLS. O utilizador tem de ter a permissão de Leitura para outras chaves para suportar a função C_FindObject* da biblioteca.
Função de Leitura do Utilizador da Biblioteca de Descarga de TLS
O primeiro passo para implementar a abordagem granular é criar uma função personalizada. Esta operação só tem de ser efetuada uma vez.
A função utilizador do Administração (com o Managed HSM Crypto Officer, Administrador HSM Gerido ou Administrador de Políticas HSM Geridas) cria uma definição de função personalizada de função "Função de Leitura do Utilizador da Biblioteca TLS":
az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \
"roleName": "TLS Library User Read Role", \
"description": "Grant Read access to keys", \
"actions": [], \
"notActions": [], \
"dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \
"notDataActions": [] \
}'
Gerar chaves
As chaves podem ser geradas com o principal de serviço Geração de Chaves com a ferramenta de criação de chaves (mhsm_p11_create_key).
Conceder permissão
O utilizador Administração atribui as seguintes funções ao principal de serviço TLS Offload.
- Atribuir a função "Função de Leitura do Utilizador da Biblioteca TLS" no âmbito "/keys"
- Atribuir a função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys/{key name}"
No exemplo seguinte, o nome da chave é "p11-6a2155dc40c94367a0f97ab452dc216f".
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "TLS Library User Read Role" \
--assignee TLSOffloadServicePrincipal@contoso.com \
--scope /keys
az keyvault role assignment create --hsm-name ContosoMHSM \
--role "Managed HSM Crypto User" \
--assignee TLSOffloadServicePrincipal@contoso.com \
--scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f
Colocação em Cache de Ligação
Para melhorar o desempenho das Chamadas de sinal para o Serviço HSM Gerido, a Biblioteca de Descarga de TLS coloca em cache as respetivas ligações TLS para os servidores de serviço HSM Geridos. Por predefinição, a Biblioteca de Descarga de TLS coloca em cache até 20 ligações TLS. A Colocação em Cache de Ligação pode ser controlada através do ficheiro de configuração MHSM (mhsm-pkcs11.conf).
"ConnectionCache": {
"Disable": false,
"MaxConnections": 20
}
Desativar
Se este valor for verdadeiro, a Colocação em Cache de Ligação será desativada. Está ativada por predefinição.
MaxConnections
Especifica o número máximo de ligações à cache. O limite máximo de ligação deve ser configurado com base no número de sessões PKCS11 simultâneas que estão a ser utilizadas pela aplicação. Normalmente, as aplicações criam um conjunto de sessões PKCS11 e utilizam-nas a partir de um conjunto de threads para gerar pedidos de assinatura em paralelo. As MaxConnections devem corresponder ao número de pedidos de assinatura simultâneos gerados pelas aplicações.
O Pedido de Assinatura por Segundo (RPS) depende do número de pedidos simultâneos e do número de ligações em cache. Especificar um número mais elevado ou mesmo o limite predefinido não melhorará o RPS de assinatura se o número de pedidos de assinatura PKCS11 simultâneos for inferior a este limite. O número máximo de ligações simultâneas para alcançar o modo de expansão do conjunto de HSM Standard B1 é de cerca de 30, dependendo do tipo de instância. Mas deve tentar com números diferentes para descobrir o número ideal de ligações simultâneas.
Consulte a documentação da sua aplicação ou contacte o fornecedor da aplicação para saber mais sobre como a aplicação utiliza a biblioteca PKCS11.
Utilizar a Biblioteca de Descarga de TLS
Gerar chaves
A Biblioteca de Descarga de TLS inclui uma ferramenta de criação de chaves, mhsm_p11_create_key. Executar a ferramenta sem argumentos de linha de comandos mostra a utilização correta da ferramenta.
A ferramenta de criação de chaves requer um principal de serviço, que é atribuído à função "Utilizador Criptografo do HSM Gerido" no âmbito "/keys".
A ferramenta de criação de chaves lê as credenciais do principal de serviço das variáveis de ambiente MHSM_CLIENT_ID e MHSM_CLIENT_SECRET.
- MHSM_CLIENT_ID – tem de ser definido para o ID de aplicação (cliente) do principal de serviço
- MHSM_CLIENT_SECRET – tem de ser definido como a palavra-passe do principal de serviço (segredo do cliente)
A ferramenta de criação de chaves gera aleatoriamente um nome para a chave no momento da criação. O ID completo da Chave do Azure Key Vault e o Nome da Chave são impressos na consola para sua comodidade.
MHSM_CLIENT_ID="<service-principal-application-id>" \
MHSM_CLIENT_SECRET="<service-principal-password>" \
mhsm_p11_create_key --RSA 4K --label tlsKey
Key is generated successfully.
Managed HSM Key ID: https://myhsm.managedhsm.azure.net/keys/p11-6a2155dc40c94367a0f97ab452dc216f/92f8aa2f1e2f4dc1be334c09a2639908 \
Key Name: p11-6a2155dc40c94367a0f97ab452dc216f
O --label
argumento para a ferramenta de criação de chaves especifica a CKA_LABEL pretendida para as chaves privadas e públicas geradas. Normalmente, estes atributos são necessários para configurar soluções de Descarga de TLS suportadas (por exemplo, a definição de configuração SSL nginx "ssl_certificate_key").
O nome da chave é necessário se estiver a planear implementar o acesso granular às chaves.
Implementar o TLS sem chave
Existem duas abordagens para gerar uma chave e utilizar a chave para o TLS Key Less: uma abordagem mais simples, mais permissiva e uma abordagem granular, que oferece uma melhor segurança. As abordagens diferem no esforço de implementação e na imposição de segurança.
Abordagem mais simples
- Criar um principal de serviço para a Biblioteca de Descarga de TLS (por exemplo, TLSOffload ServicePrincipal)
- Atribua a função "Utilizador Criptocrito do HSM Gerido" ao principal de serviço TLS Offload no âmbito "/keys".
az keyvault role assignment create --hsm-name ContosoMHSM \ --role "Managed HSM Crypto User" \ --assignee TLSOffloadServicePrincipal@contoso.com \ --scope /keys
- Gere a chave com a etiqueta necessária ao seguir os passos em Como gerar chaves com a Biblioteca de Descarga de TLS.
- Configurar o servidor TLS para utilizar a Biblioteca de Descarga de TLS do HSM Gerido como a biblioteca de interfaces PKCS#11
- Configurar o servidor TLS (por exemplo, a definição de configuração SSL nginx 'ssl_certificate_key') com a etiqueta de chave e as credenciais do principal de serviço de Descarga de TLS
Abordagem granular
- Crie um Utilizador Administração (por exemplo, TLSOffloadAdminUser) com a seguinte função:
- Função "Managed HSM Crypto Officer" no âmbito "/"
- Crie um principal de serviço de Geração de Chaves (por exemplo, TLSOffloadKeyGenServicePrincipal) para a geração da Chave de Descarga TLS e atribua a seguinte função:
- Função "Utilizador Criptografo HSM Gerido" no âmbito "/keys".
- Criar um principal de serviço para a Descarga de TLS (por exemplo, TLSOffload ServicePrincipal)
- O utilizador Administração cria a seguinte definição de função personalizada:
az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{ \ "roleName": "TLS Library User Read Role", \ "description": "Grant Read access to keys", \ "actions": [], \ "notActions": [], \ "dataActions": ["Microsoft.KeyVault/managedHsm/keys/read/action"], \ "notDataActions": [] }'
- Gere uma chave com a etiqueta necessária a seguir a "Como gerar chaves com a Biblioteca de Descarga de TLS". Utilize o principal de serviço de Geração de Chaves (por exemplo, TLSOffloadKeyGenServicePrincipal) ao gerar chaves. Anote a Etiqueta de Chave e o Nome da Chave. Por exemplo:
- Etiqueta da Chave: tlsKey
- Nome da Chave: p11-6a2155dc40c94367a0f97ab452dc216f
- Administração Utilizador atribui as seguintes funções ao principal de serviço TLS Offload
- Função "Função de Leitura do Utilizador da Biblioteca TLS" no âmbito "/keys"
- Função "Utilizador Criptografo HSM Gerido" no âmbito "/keys/{key name}"
az keyvault role assignment create --hsm-name ContosoMHSM \ --role " TLS Library User Read Role" \ --assignee TLSOffloadServicePrincipal @contoso.com \ --scope /keys az keyvault role assignment create --hsm-name ContosoMHSM \ --role "Managed HSM Crypto User" \ --assignee TLSOffloadServicePrincipal@contoso.com \ --scope /keys/p11-6a2155dc40c94367a0f97ab452dc216f
- Configurar o servidor TLS para utilizar a Biblioteca de Descarga de TLS do Azure Managed HSM como a biblioteca de interfaces PKCS#11
- Configurar o servidor TLS (por exemplo, a definição de configuração SSL nginx 'ssl_certificate_key') com a etiqueta de chave e as credenciais do principal de serviço de Descarga de TLS