Partilhar via


Automatize a rotação de um segredo para recursos que tenham dois conjuntos de credenciais de autenticação

A melhor forma de autenticar-se nos serviços Azure é usando uma managed identity, 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. Para obter uma visão geral abrangente dos conceitos e benefícios da rotação automática em diferentes tipos de ativos, consulte Noções básicas sobre rotação automática no Cofre de Chaves do Azure.

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.

Observação

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 o Microsoft Entra ID. Existem serviços que requerem cadeias de conexão de contas 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:

Diagrama que mostra a solução de rotação.

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 da aplicação para atualizar a chave regenerada mais recente.

  1. 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.
  2. O Event Grid analisa as subscrições de eventos e utiliza HTTP POST para aceder ao endpoint da aplicação de funções que está subscrito ao evento.
  3. O aplicativo de função identifica a chave alternativa (não a mais recente) e chama a conta de armazenamento para regenerá-la.
  4. 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 assinatura 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.

Observação

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:

Link com o rótulo Implantar no Azure.

  1. Em Grupo de recursos, selecione Criar novo. Nomeie o grupo rotação do cofre e, em seguida, selecione OK.

  2. Selecione Verificar + criar.

  3. Selecione Criar.

    Captura de ecrã que mostra como criar um grupo de recursos.

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 Azure App Service
  • Uma conta de armazenamento para controlar disparadores de aplicações de funções
  • Uma política de acesso para acessar segredos no Cofre da Chave
  • A função do Serviço de Operador de Chave da Conta de Armazenamento é atribuída à aplicação de função para que esta possa aceder às 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 subscrição de evento da Grade de Eventos para o evento SecretNearExpiry
  1. Selecione o link de implantação do modelo do Azure:

    Link de implantação de modelo do Azure.

  2. Na lista Grupo de recursos , selecione vaultrotation.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. Na caixa Nome do aplicativo de função , digite o nome do aplicativo de função.

  9. Na caixa Nome do Segredo , introduza o nome do segredo onde irá armazenar as chaves de acesso.

  10. 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.

  11. Selecione Verificar + criar.

  12. Selecione Criar.

    Captura de tela que mostra como criar e implantar a função.

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:

Captura de tela que mostra a página Sua implantação está concluída.

Observação

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 Key Vault

Primeiro, defina a sua política de acesso para conceder permissões de gerenciamento de segredos ao principal de utilizador:

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 do segredo e do ID da chave para adicionar ao segredo, para que a função de rotação da chave possa regenerar a chave na conta de armazenamento.

Determine o identificador do recurso da conta de armazenamento. Você pode encontrar este valor na propriedade id.

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 o segredo ao cofre de chaves com um período de validade de 60 dias, ID de recurso da conta de armazenamento, e, para fins de demonstração, para acionar a rotação imediatamente, defina a data de expiração 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 o evento SecretNearExpiry dentro de alguns minutos. Este evento, por sua vez, acionará a função para renovar 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:

Captura de ecrã que mostra a saída do comando AZ keyvault secret show para a primeira conta de armazenamento.

Recupere as chaves de acesso para comparar os valores:

az storage account keys list -n vaultrotationstorage 

Observe que value da chave é igual ao segredo no cofre de chaves.

Captura de tela que mostra a saída do comando A Z storage account keys list para a primeira conta de armazenamento.

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 de 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 subscrição de evento da Event Grid para o evento SecretNearExpiry.
  1. Selecione o link de implantação do modelo do Azure:

    Link de implantação de modelo do Azure.

  2. Na lista Grupo de recursos , selecione vaultrotation.

  3. 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.

  4. Na caixa Nome da Conta de Armazenamento , digite o nome da conta de armazenamento que contém as chaves de acesso a serem giradas.

  5. 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.

  6. Na caixa Nome do Cofre da Chave , digite o nome do Cofre da Chave.

  7. Na caixa Nome do aplicativo de função , digite o nome do aplicativo de função.

  8. Na caixa Nome do Segredo , introduza o nome do segredo onde irá armazenar as chaves de acesso.

  9. Selecione Verificar + criar.

  10. Selecione Criar.

    Captura de ecrã que mostra como criar uma conta de armazenamento adicional.

Adicionar chave de acesso da conta de armazenamento aos segredos do Cofre da Chave

Determine o identificador do recurso da conta de armazenamento. Você pode encontrar este valor na propriedade id.

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 o segredo ao cofre de chaves com um período de validade de 60 dias, ID de recurso da conta de armazenamento, e, para fins de demonstração, para acionar a rotação imediatamente, defina a data de expiração 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:

Captura de ecrã que mostra a saída do comando AZ keyvault secret show para a segunda conta de armazenamento.

Recupere as chaves de acesso para comparar os valores:

az storage account keys list -n vaultrotationstorage 

Observe que value da chave é igual ao segredo no cofre de chaves.

Captura de tela que mostra a saída do comando A Z storage account keys list para a segunda conta de armazenamento.

Desativar a rotação para segredo

Você pode desativar a rotação de um segredo simplesmente eliminando a assinatura do Event Grid desse segredo. Utilize o cmdlet Remove-AzEventGridSubscription do Azure PowerShell ou o comando az event grid event--subscription delete do Azure CLI.

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:

Observação

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