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:

Diagram that shows the rotation solution.

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.

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

Link that's labelled Deploy to Azure.

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

  2. Selecione Rever + criar.

  3. Selecione Criar.

    Screenshot that shows how to create a resource group.

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
  1. Selecione o link de implantação do modelo do Azure:

    Azure template deployment link.

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

  11. Selecione Rever + criar.

  12. Selecione Criar.

    Screenshot that shows how to create and deploy function.

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:

Screenshot that shows the Your deployment is complete page.

Nota

Se você encontrar uma falha, poderá 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 = (get-date).AddDays(+1).ToString("yyyy-MM-ddTHH:mm:ssZ")
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 é atualizado para o alternativo keyName e que CredentialIdvalue é regenerado:

Screenshot that shows the output of the A Z keyvault secret show command for the first storage account.

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:

Screenshot that shows the output of the A Z storage account keys list command for the first storage account.

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 .
  1. Selecione o link de implantação do modelo do Azure:

    Azure template deployment link.

  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 Rever + criar.

  10. Selecione Criar.

    Screenshot that shows how to create an additional storage account.

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 = (Get-Date).AddDays(+1).ToString('yyyy-MM-ddTHH:mm:ssZ')
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 é atualizado para o alternativo keyName e que CredentialIdvalue é regenerado:

Screenshot that shows the output of the A Z keyvault secret show command for the second storage account.

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:

Screenshot that shows the output of the A Z storage account keys list command for the second storage account.

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