Gerenciar segredos nos Aplicativos de Contêiner do Azure
Artigo
Os Aplicativos de Contêiner do Azure permitem que seu aplicativo armazene com segurança valores de configuração confidenciais. Depois que os segredos são definidos no nível do aplicativo, os valores protegidos ficam disponíveis para revisões em seus aplicativos de contêiner. Além disso, você pode fazer referência a valores protegidos dentro de regras de escala. Para obter informações sobre como usar segredos com o Dapr, consulte Integração do Dapr.
Os segredos têm como escopo um aplicativo, fora de qualquer revisão específica de um aplicativo.
A adição, a remoção e a alteração de segredos não gera novas revisões.
Cada revisão de aplicativo pode fazer referência a um ou mais segredos.
Várias revisões podem referenciar os mesmos segredos.
Um segredo atualizado ou excluído não afeta automaticamente as revisões existentes no aplicativo. Quando um segredo é atualizado ou excluído, você pode responder a alterações de uma das seguintes maneiras:
Implantar uma nova revisão.
Reiniciar uma revisão existente.
Antes de excluir um segredo, implante uma nova revisão que não faça mais referência ao segredo antigo. Em seguida, desative todas as revisões que referenciam o segredo.
Definindo segredos
Segredos são definidos como um conjunto de pares nome/valor. O valor de cada segredo é especificado diretamente ou como uma referência a um segredo armazenado no Cofre de Chaves do Azure.
Armazenar valor secreto em aplicativos de contêiner
Quando você define segredos através do portal, ou através de diferentes opções de linha de comando.
Aqui, uma cadeia de conexão para uma conta de armazenamento de fila é declarada na matriz secrets. Neste exemplo, você substituiria <MY-CONNECTION-STRING-VALUE> pelo valor da cadeia de conexão.
Quando você cria um aplicativo de contêiner, os segredos são definidos usando o parâmetro --secrets.
Ele aceita um conjunto delimitado por espaço de pares de nome/valor.
Aqui, uma cadeia de conexão para uma conta de armazenamento de fila é declarada no parâmetro --secrets. Substitua <CONNECTION_STRING> pelo valor da cadeia de conexão.
Quando você cria um aplicativo de contêiner, os segredos são definidos como um ou mais objetos de segredo que são passados pelo parâmetro ConfigurationSecrets.
Aqui, uma cadeia de conexão para uma conta de armazenamento de fila é declarada. O valor de queue-connection-string é proveniente de uma variável de ambiente chamada $QueueConnectionString.
Segredo de referência do Cofre de Chaves
Ao definir um segredo, você cria uma referência a um segredo armazenado no Cofre de Chaves do Azure. Os Aplicativos de Contêiner recuperam automaticamente o valor secreto do Cofre de Chaves e o disponibilizam como segredo em seu aplicativo de contêiner.
Para fazer referência a um segredo do Cofre de Chaves, você deve primeiro habilitar a identidade gerenciada em seu aplicativo de contêiner e conceder à identidade acesso aos segredos do Cofre de Chaves.
Para habilitar a identidade gerenciada em seu aplicativo de contêiner, consulte Identidades gerenciadas.
Para conceder acesso aos segredos do Cofre de Chaves, crie uma política de acesso no Cofre de Chaves para a identidade gerenciada que você criou. Ative a permissão secreta "Obter" nesta política.
Aqui, uma cadeia de conexão para uma conta de armazenamento de fila é declarada na matriz secrets. Seu valor é recuperado automaticamente do Cofre de Chaves usando a identidade especificada. Para usar uma identidade gerenciada pelo usuário, substitua system pela ID de recurso da identidade.
Substitua <KEY-VAULT-SECRET-URI> pelo URI do seu segredo no Cofre de Chaves.
Quando você cria um aplicativo de contêiner, os segredos são definidos usando o parâmetro --secrets.
Ele aceita um conjunto delimitado por espaço de pares de nome/valor.
Cada par é delimitado por um sinal de igual (=).
Para especificar uma referência do Cofre de Chaves, use o formato <SECRET_NAME>=keyvaultref:<KEY_VAULT_SECRET_URI>,identityref:<MANAGED_IDENTITY_ID>. Por exemplo, queue-connection-string=keyvaultref:https://mykeyvault.vault.azure.net/secrets/queuereader,identityref:/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-identity.
Aqui, uma cadeia de conexão para uma conta de armazenamento de fila é declarada no parâmetro --secrets. Substitua <KEY_VAULT_SECRET_URI> pelo URI do seu segredo no Cofre de Chaves. Substitua <USER_ASSIGNED_IDENTITY_ID> pela ID do recurso da identidade atribuída ao usuário. Para a identidade atribuída ao sistema, use system em vez da ID do recurso.
Observação
A identidade atribuída ao usuário deve ter acesso para ler o segredo no Cofre de Chaves. A identidade atribuída ao sistema não pode ser usada com o comando create porque ela não está disponível até que o aplicativo de contêiner seja criado.
As referências do Secrets Key Vault não são suportadas no PowerShell.
Observação
Se você estiver usando UDR com o Firewall do Azure, precisará adicionar a AzureKeyVault marca de serviço e o FQDN de login.microsoft.com à lista de permissões do firewall. Consulte Configurando UDR com o Firewall do Azure para decidir quais marcas de serviço adicionais você precisa.
URI secreto do Cofre de Chaves e rotação secreta
O URI secreto do Cofre de Chaves deve estar em um dos seguintes formatos:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931: Faça referência a uma versão específica de um segredo.
https://myvault.vault.azure.net/secrets/mysecret: Faça referência à versão mais recente de um segredo.
Se uma versão não for especificada no URI, o aplicativo usará a versão mais recente existente no cofre de chaves. Quando versões mais recentes ficam disponíveis, o aplicativo recupera automaticamente a versão mais recente em 30 minutos. Todas as revisões ativas que fazem referência ao segredo em uma variável de ambiente são reiniciadas automaticamente para obter o novo valor.
Para obter controle total de qual versão de um segredo é usada, especifique a versão no URI.
Como referenciar segredos em variáveis de ambiente
Depois de declarar segredos no nível do aplicativo, conforme descrito na seção Definição de segredos, você pode referenciá-los em variáveis de ambiente, ao criar uma nova revisão no aplicativo de contêiner. Quando uma variável de ambiente referencia um segredo, o valor é preenchido com o valor definido no segredo.
Exemplo
O exemplo a seguir mostra um aplicativo que declara uma cadeia de conexão no nível do aplicativo. Essa conexão é referenciada em uma variável de ambiente de contêiner e em uma regra de escala.
Vá para seu aplicativo de contêiner no portal do Azure.
Abra a página Gerenciamento de revisões .
Selecione Criar nova revisão.
Na página Criar e implantar nova revisão, selecione um contêiner.
Na seção Variáveis de ambiente, selecione Adicionar.
Insira as seguintes informações:
Nome: O nome da variável de ambiente.
Fonte: Selecione Referenciar um segredo.
Valor: selecione o segredo que você deseja referenciar.
Selecione Salvar.
Selecione Criar para criar a nova revisão.
Neste exemplo, a cadeia de conexão do aplicativo é declarada como queue-connection-string e se torna disponível em qualquer lugar nas seções de configuração.
Aqui, a variável de ambiente connection-string obtém seu valor do segredo queue-connection-string no nível do aplicativo. Além disso, a configuração de autenticação da regra de escala do Armazenamento de Filas do Azure usa o segredo queue-connection-string para definir a conexão.
Para evitar a confirmação de valores de segredos para o controle do código-fonte com o modelo do ARM, transmita os valores dos segredos como parâmetros do modelo do ARM.
Neste exemplo, você criará um aplicativo de contêiner usando a CLI do Azure com um segredo que é referenciado em uma variável de ambiente. Para referenciar um segredo em uma variável de ambiente na CLI do Azure, defina o valor como secretref:, seguido do nome do segredo.
Aqui, a variável de ambiente connection-string obtém seu valor do segredo queue-connection-string no nível do aplicativo.
Neste exemplo, você cria um contêiner usando o Azure PowerShell com um segredo que é referenciado em uma variável de ambiente. Para referenciar um segredo em uma variável de ambiente no PowerShell, defina o valor como secretref:, seguido do nome do segredo.
Aqui, a variável de ambiente ConnectionString obtém seu valor do segredo $QueueConnectionString no nível do aplicativo.
Segredos de montagem em um volume
Depois de declarar segredos no nível do aplicativo, conforme descrito na seção definindo segredos, você pode fazer referência a eles em montagens de volume ao criar uma nova revisão em seu aplicativo de contêiner. Quando você monta segredos em um volume, cada segredo é montado como um arquivo no volume. O nome do arquivo é o nome do segredo e o conteúdo do arquivo é o valor do segredo. Você pode carregar todos os segredos em uma montagem de volume ou pode carregar segredos específicos.
Depois de definir um segredo em seu aplicativo de contêiner, você poderá fazer referência a ele em uma montagem de volume ao criar uma nova revisão.
Vá para seu aplicativo de contêiner no portal do Azure.
Abra a página Gerenciamento de revisões .
Selecione Criar nova revisão.
Na página Criar e implantar nova revisão .
Selecione um contêiner e selecione Editar.
Na seção Montagens de volume, expanda a seção Segredos.
Selecione Criar novo volume.
Insira as seguintes informações:
Nome: mysecrets
Monte todos os segredos: ativado
Observação
Se você quiser carregar segredos específicos, desative Montar todos os segredos e selecione os segredos que deseja carregar.
Selecione Adicionar.
Em Nome do volume, selecione mysecrets.
Em Caminho de montagem, insira /mnt/secrets.
Selecione Salvar.
Selecione Criar para criar a nova revisão com a montagem de volume.
Neste exemplo, dois segredos são declarados no nível do aplicativo. Esses segredos são montados em um volume chamado mysecrets do tipo Secret. O volume é montado no caminho /mnt/secrets. O aplicativo pode então fazer referência aos segredos na montagem do volume.
Para carregar segredos específicos e especificar seus caminhos dentro do volume montado, defina os segredos na secrets matriz do objeto de volume. O exemplo a seguir mostra como carregar somente o queue-connection-string segredo na montagem de volume com um nome de arquivo de connection-string.txtmysecrets .
Em seu aplicativo, você pode ler o segredo de um arquivo localizado em /mnt/secrets/connection-string.txt.
Neste exemplo, dois segredos são declarados no nível do aplicativo. Esses segredos são montados em um volume chamado mysecrets do tipo Secret. O volume é montado no caminho /mnt/secrets. O aplicativo pode então ler os segredos como arquivos na montagem do volume.