Configurar chaves gerenciadas pelo cliente para sua conta do Azure Cosmos DB com o Key Vault de HSM Gerenciado do Azure

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Table

Consulte o link Configurar chaves gerenciadas pelo cliente com o Azure Key Vault

Observação

Atualmente, as chaves gerenciadas pelo cliente estão disponíveis apenas para novas contas do Azure Cosmos DB. Você deve configurá-las durante a criação da conta.

Registrar o provedor de recursos do Azure Cosmos DB para sua assinatura do Azure

  1. Entre no portal do Azure, acesse sua assinatura do Azure e selecione Provedores de recursos na guia configurações:

    Captura de tela da opção Provedores de recursos no menu de navegação de recursos.

  2. Pesquise o provedor de recursos do Microsoft.DocumentDB. Verifique se o provedor de recursos já está marcado como registrado. Caso contrário, escolha o provedor de recursos e selecione Registrar:

    Captura de tela da opção Registrar para o provedor de recursos do Microsoft.DocumentDB.

Configurar o Key Vault de HSM Gerenciado do Azure

O uso de chaves gerenciadas pelo cliente com Azure Cosmos DB exige que você defina duas propriedades na instância do Azure Key Vault que você planeja usar para hospedar suas chaves de criptografia: Exclusão reversível e Proteção de limpeza.

Como a exclusão temporária está ativada por padrão, somente a proteção contra limpeza deve ser habilitada. Ao criar o HSM gerenciado, use o seguinte comando da CLI:

objectId = az ad signed-in-user show --query id -o tsv
az keyvault create --hsm-name $hsmName --resource-group $rgName --location $location --enable-purge-protection true --administrators $objectId --retention-days 7

Se estiver usando uma instância existente de Key Vault de HSM Gerenciado do Azure, você poderá verificar se essas propriedades estão habilitadas examinando a seção Propriedades com o seguinte comando:

az keyvault show $hsmName $rgName

Se a proteção contra limpeza não estiver habilitada, o seguinte comando poderá ser usado:

az keyvault update-hsm --enable-purge-protection true --hsm-name $hsmName --resource-group $rgName

Para obter mais informações sobre os comandos da CLI disponíveis para o HSM gerenciado, consulte o Azure Key Vault a seguir

Como criar a chave de criptografia e atribuir as funções correspondentes

Depois que o HSM Gerenciado for ativado, a chave que será usada para a conta CMK precisará ser criada. Para isso, a função "Usuário de Criptografia do HSM Gerenciado" é atribuída ao administrador. Para ler mais sobre como o RBAC (controle de acesso baseado em função) funciona com o HSM Gerenciado, consulte os seguintes artigos: Funções internas do RBAC locais do HSM gerenciado – Azure Key Vault | e Controle de acesso do HSM Gerenciado do Azure | Microsoft Learn

objectId = az ad signed-in-user show --query id -o tsv
$keyName = "Name of your key"
az keyvault role assignment create --hsm-name $hsmName --role "Managed HSM Crypto User" --assignee $objectId --scope /keys
az keyvault key create --hsm-name $hsmName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 3072

Agora que a chave foi criada, a função correspondente precisa ser atribuída à ID da Entidade de segurança do Cosmos DB ou à Identidade Gerenciada do Azure para provisionar a conta. A função "Usuário de Criptografia de Serviço de Criptografia do HSM Gerenciado" é usada porque tem as únicas três permissões necessárias para trabalhar com uma conta CMK, que são: get, wrap e unwrap. Essas permissões também têm o escopo definido para serem úteis apenas nas chaves armazenadas no HSM Gerenciado do Azure.

Sem a identidade gerenciada do Azure:

$cosmosPrincipal = az ad sp show --id a232010e-820c-4083-83bb-3ace5fc29d0b --query id -o tsv
az keyvault role assignment create --hsm-name $hsmName --role "Managed HSM Crypto Service Encryption User" --assignee $cosmosPrincipal --scope /keys
$keyURI = "https://{0}.managedhsm.azure.net/keys/{1}" -f $hsmName, $keyName
az cosmosdb create -n $cosmosName -g $rgName --key-uri $keyURI

Com a identidade gerenciada do Azure:

$identityResourceID = az identity show -g $rgName -n $identityName --query id -o tsv
$identityPrincipal = az identity show -g $rgName -n $identityName --query principalId -o tsv
$defaultIdentity = "UserAssignedIdentity={0}" -f $identityResourceID
az keyvault role assignment create --hsm-name $hsmName --role "Managed HSM Crypto Service Encryption User" --assignee $cosmosPrincipal --scope /keys
$keyURI = "https://{0}.managedhsm.azure.net/keys/{1}" -f $hsmName, $keyName
az cosmosdb create -n $cosmosName -g $rgName --key-uri $keyURI --assign-identity $identityResourceID --default-identity $defaultIdentity

Isso provisionará uma conta CMK do Cosmos DB com uma chave armazenada em um Key Vault do HSM Gerenciado do Azure.

Alternar para identidade gerenciada atribuída pelo sistema.

O Cosmos DB dá suporte ao uso de uma identidade gerenciada atribuída pelo sistema para uma conta CMK do Cosmos DB. Para obter mais informações sobre a CMK de identidade gerenciada atribuída pelo sistema, consulte: Configurar chaves gerenciadas pelo cliente para sua conta do Azure Cosmos DB

Execute os seguintes comandos para alternar da identidade padrão para a identidade gerenciada atribuída pelo sistema:

az cosmosdb identity assign -n $cosmosName -g $rgName
$principalMSIId = az cosmosdb identity show -n $cosmosName -g $rgName --query principalId -o tsv
az keyvault role assignment create --hsm-name $hsmName --role "Managed HSM Crypto Service Encryption User" --assignee $principalMSIId --scope /keys
az cosmosdb update --resource-group $rgName --name $cosmosName --default-identity "SystemAssignedIdentity"

Como uma observação opcional, a atribuição de função original à ID da entidade de segurança do Cosmos DB ou à Identidade Gerenciada do Azure pode ser removida.

az keyvault role assignment delete --hsm-name $hsmName --role "Managed HSM Crypto Service Encryption User" --assignee $cosmosPrincipal --scope /keys

Próximas etapas