Automatize a rotação de um segredo para recursos que tenham dois conjuntos de credenciais de autenticação
A melhor maneira de autenticar nos serviços do Azure é usando uma identidade gerenciada, mas há alguns cenários em que isso não é uma opção. Nesses casos, são utilizadas chaves de acesso ou palavras-passe. Você deve alternar as chaves de acesso e senhas com freqüência.
Este tutorial mostra como automatizar a rotação periódica de segredos para bancos de dados e serviços que usam dois conjuntos de credenciais de autenticação. Especificamente, este tutorial mostra como girar chaves de conta do Armazenamento do Azure armazenadas no Cofre de Chaves do Azure como segredos. Você usará uma função acionada pela notificação da Grade de Eventos do Azure.
Nota
Para serviços de conta de armazenamento, recomenda-se o uso do Microsoft Entra ID para autorizar solicitações. Para obter mais informações, consulte Autorizar acesso a blobs usando a ID do Microsoft Entra. Há serviços que exigem cadeias de conexão de conta de armazenamento com chaves de acesso. Para esse cenário, recomendamos esta solução.
Aqui está a solução de rotação descrita neste tutorial:
Nesta solução, o Azure Key Vault armazena chaves de acesso individuais da conta de armazenamento como versões do mesmo segredo, alternando entre a chave primária e secundária nas versões subsequentes. Quando uma chave de acesso é armazenada na versão mais recente do segredo, a chave alternativa é regenerada e adicionada ao Cofre da Chave como a nova versão mais recente do segredo. A solução fornece todo o ciclo de rotação do aplicativo para atualizar para a chave regenerada mais recente.
- Trinta dias antes da data de expiração de um segredo, o Key Vault publica o evento de quase expiração na Grade de Eventos.
- A Grade de Eventos verifica as assinaturas de eventos e usa HTTP POST para chamar o ponto de extremidade do aplicativo de função que está inscrito no evento.
- O aplicativo de função identifica a chave alternativa (não a mais recente) e chama a conta de armazenamento para regenerá-la.
- O aplicativo de função adiciona a nova chave regenerada ao Cofre de Chaves do Azure como a nova versão do segredo.
Pré-requisitos
- Uma subscrição do Azure. Crie um gratuitamente.
- Azure Cloud Shell. Este tutorial está usando o portal Cloud Shell com PowerShell env
- Azure Key Vault.
- Duas contas de armazenamento do Azure.
Nota
A rotação da chave da conta de armazenamento compartilhado revoga a assinatura de acesso compartilhado (SAS) no nível da conta gerada com base nessa chave. Após a rotação da chave da conta de armazenamento, você deve regenerar os tokens SAS no nível da conta para evitar interrupções nos aplicativos.
Você pode usar este link de implantação se não tiver um cofre de chaves existente e contas de armazenamento existentes:
Em Grupo de recursos, selecione Criar novo. Nomeie a rotação do cofre do grupo e selecione OK.
Selecione Rever + criar.
Selecione Criar.
Agora você terá um cofre de chaves e duas contas de armazenamento. Você pode verificar essa configuração na CLI do Azure ou no Azure PowerShell executando este comando:
az resource list -o table -g vaultrotation
O resultado será semelhante a esta saída:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
vaultrotation-kv vaultrotation westus Microsoft.KeyVault/vaults
vaultrotationstorage vaultrotation westus Microsoft.Storage/storageAccounts
vaultrotationstorage2 vaultrotation westus Microsoft.Storage/storageAccounts
Criar e implantar a função de rotação de teclas
Em seguida, você criará um aplicativo de função com uma identidade gerenciada pelo sistema, além de outros componentes necessários. Você também implantará a função de rotação para as chaves da conta de armazenamento.
A função de rotação do aplicativo requer os seguintes componentes e configuração:
- Um plano do Serviço de Aplicativo do Azure
- Uma conta de armazenamento para gerenciar gatilhos de aplicativo de função
- Uma política de acesso para acessar segredos no Cofre da Chave
- A função Serviço de Operador de Chave de Conta de Armazenamento atribuída ao aplicativo de função para que ele possa acessar as chaves de acesso da conta de armazenamento
- Uma função de rotação de chave com um gatilho de evento e um gatilho HTTP (rotação sob demanda)
- Uma assinatura de evento da Grade de Eventos para o evento SecretNearExpiry
Selecione o link de implantação do modelo do Azure:
Na lista Grupo de recursos , selecione vaultrotation.
Na caixa RG da Conta de Armazenamento, insira o nome do grupo de recursos no qual sua conta de armazenamento está localizada. Mantenha o valor padrão [resourceGroup().name] se sua conta de armazenamento já estiver localizada no mesmo grupo de recursos em que você implantará a função de rotação de chaves.
Na caixa Nome da Conta de Armazenamento, digite o nome da conta de armazenamento que contém as chaves de acesso a serem giradas. Mantenha o valor padrão [concat(resourceGroup().name, 'storage')] se você usar a conta de armazenamento criada em Pré-requisitos.
Na caixa Key Vault RG, insira o nome do grupo de recursos no qual o cofre de chaves está localizado. Mantenha o valor padrão [resourceGroup().name] se o cofre de chaves já existir no mesmo grupo de recursos em que você implantará a função de rotação de chaves.
Na caixa Nome do Cofre da Chave, digite o nome do Cofre da Chave. Mantenha o valor padrão [concat(resourceGroup().name, '-kv')] se você usar o cofre de chaves criado em Pré-requisitos.
Na caixa Tipo de Plano do Serviço de Aplicativo, selecione plano de hospedagem. O Plano Premium é necessário apenas quando o cofre das chaves está protegido por firewall.
Na caixa Nome do aplicativo de função, digite o nome do aplicativo de função.
Na caixa Nome do Segredo, introduza o nome do segredo onde irá armazenar as chaves de acesso.
Na caixa URL do repositório, digite o local do GitHub do código da função. Neste tutorial, você pode usar https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git o .
Selecione Rever + criar.
Selecione Criar.
Depois de concluir as etapas anteriores, você terá uma conta de armazenamento, um farm de servidores, um aplicativo de função e o Application Insights. Quando a implantação estiver concluída, você verá esta página:
Nota
Se encontrar uma falha, você pode selecionar Reimplantar para concluir a implantação dos componentes.
Você pode encontrar modelos de implantação e código para a função de rotação em Exemplos do Azure.
Adicionar as chaves de acesso da conta de armazenamento aos segredos do Cofre da Chave
Primeiro, defina sua política de acesso para conceder permissões de gerenciamento de segredos à entidade de usuário:
az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list
Agora você pode criar um novo segredo com uma chave de acesso da conta de armazenamento como seu valor. Você também precisará do ID do recurso da conta de armazenamento, do período de validade secreto e do ID da chave para adicionar ao segredo para que a função de rotação possa regenerar a chave na conta de armazenamento.
Determine o ID do recurso da conta de armazenamento. Pode encontrar este valor no id
imóvel.
az storage account show -n vaultrotationstorage
Liste as chaves de acesso da conta de armazenamento para obter os valores de chave:
az storage account keys list -n vaultrotationstorage
Adicione segredo ao cofre de chaves com período de validade de 60 dias, ID de recurso da conta de armazenamento e, para fins de demonstração, acione imediatamente a data de expiração definida para amanhã. Execute este comando, usando os valores recuperados para key1Value
e storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Este segredo irá acionar SecretNearExpiry
o evento dentro de alguns minutos. Esse evento, por sua vez, acionará a função para girar o segredo com a expiração definida para 60 dias. Nessa configuração, o evento 'SecretNearExpiry' seria acionado a cada 30 dias (30 dias antes do vencimento) e a função de rotação alternaria a rotação entre key1 e key2.
Você pode verificar se as chaves de acesso foram regeneradas recuperando a chave da conta de armazenamento e o segredo do Cofre da Chave e compará-las.
Use este comando para obter as informações secretas:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey
Observe que CredentialId
é atualizado para o alternativo keyName
e que value
é regenerado:
Recupere as chaves de acesso para comparar os valores:
az storage account keys list -n vaultrotationstorage
Observe que a chave é a mesma que value
secreta no cofre de chaves:
Usar a função de rotação existente para várias contas de armazenamento
Você pode reutilizar o mesmo aplicativo de função para girar teclas para várias contas de armazenamento.
Para adicionar chaves de conta de armazenamento a uma função existente para rotação, você precisa:
- A função Serviço de Operador de Chave de Conta de Armazenamento atribuída ao aplicativo de função para que ele possa acessar as chaves de acesso da conta de armazenamento.
- Uma assinatura de evento da Grade de Eventos para o evento SecretNearExpiry .
Selecione o link de implantação do modelo do Azure:
Na lista Grupo de recursos , selecione vaultrotation.
Na caixa RG da Conta de Armazenamento, insira o nome do grupo de recursos no qual sua conta de armazenamento está localizada. Mantenha o valor padrão [resourceGroup().name] se sua conta de armazenamento já estiver localizada no mesmo grupo de recursos em que você implantará a função de rotação de chaves.
Na caixa Nome da Conta de Armazenamento, digite o nome da conta de armazenamento que contém as chaves de acesso a serem giradas.
Na caixa Key Vault RG, insira o nome do grupo de recursos no qual o cofre de chaves está localizado. Mantenha o valor padrão [resourceGroup().name] se o cofre de chaves já existir no mesmo grupo de recursos em que você implantará a função de rotação de chaves.
Na caixa Nome do Cofre da Chave, digite o nome do Cofre da Chave.
Na caixa Nome do aplicativo de função, digite o nome do aplicativo de função.
Na caixa Nome do Segredo, introduza o nome do segredo onde irá armazenar as chaves de acesso.
Selecione Rever + criar.
Selecione Criar.
Adicionar chave de acesso da conta de armazenamento aos segredos do Cofre da Chave
Determine o ID do recurso da conta de armazenamento. Pode encontrar este valor no id
imóvel.
az storage account show -n vaultrotationstorage2
Liste as chaves de acesso da conta de armazenamento para obter o valor key2:
az storage account keys list -n vaultrotationstorage2
Adicione segredo ao cofre de chaves com período de validade de 60 dias, ID de recurso da conta de armazenamento e, para fins de demonstração, acione imediatamente a data de expiração definida para amanhã. Execute este comando, usando os valores recuperados para key2Value
e storageAccountResourceId
:
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate
Use este comando para obter as informações secretas:
az keyvault secret show --vault-name vaultrotation-kv --name storageKey2
Observe que CredentialId
é atualizado para o alternativo keyName
e que value
é regenerado:
Recupere as chaves de acesso para comparar os valores:
az storage account keys list -n vaultrotationstorage
Observe que a chave é a mesma que value
secreta no cofre de chaves:
Desativar a rotação para segredo
Você pode desativar a rotação de um segredo simplesmente excluindo a assinatura da Grade de Eventos desse segredo. Use o cmdlet Azure PowerShell Remove-AzEventGridSubscription ou o comando Azure CLI az event grid event--subscription delete .
Funções de rotação do Cofre de Chaves para dois conjuntos de credenciais
Modelo de funções de rotação para dois conjuntos de credenciais e várias funções prontas a utilizar:
Nota
Essas funções de rotação são criadas por um membro da comunidade e não pela Microsoft. As funções da comunidade não são suportadas em nenhum programa ou serviço de suporte da Microsoft e são disponibilizadas no estado em que se encontram sem qualquer tipo de garantia.
Próximos passos
- Tutorial: Rotação de segredos para um conjunto de credenciais
- Visão geral: Monitorando o Cofre da Chave com a Grade de Eventos do Azure
- Como: Criar sua primeira função no portal do Azure
- Como: Receber e-mails quando um segredo do Cofre de Chaves é alterado
- Referência: Esquema de eventos da Grade de Eventos do Azure para o Azure Key Vault