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 estão disponíveis para revisões em seus aplicativos de contêiner. Além disso, você pode referenciar valores protegidos dentro de regras de escala. Para obter informações de como usar segredos com o Dapr, confira 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
Os 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 Azure Key Vault.
Armazenar o valor do segredo em Aplicativos de Contêiner
Ao definir segredos por meio do portal ou por meio 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 Key Vault
Ao definir um segredo, crie uma referência a um segredo armazenado no Azure Key Vault. Os Aplicativos de Contêiner recuperam automaticamente o valor secreto do Key Vault e o disponibiliza como um segredo no aplicativo de contêiner.
Para fazer referência a um segredo do Key Vault, primeiro habilite a identidade gerenciada no aplicativo de contêiner e conceda à identidade acesso aos segredos do Key Vault.
Para habilitar a identidade gerenciada em seu aplicativo de contêiner, consulte Identidades gerenciadas.
Para conceder acesso a Key Vault segredos, crie uma política de acesso no Key Vault 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 de Key Vault usando a identidade especificada. Para usar uma identidade gerenciada pelo usuário, substitua system pela ID do recurso da identidade.
Substitua <KEY-VAULT-SECRET-URI> pelo URI do segredo em Key Vault.
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 de Key Vault, 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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/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 segredo em Key Vault. Substitua <USER_ASSIGNED_IDENTITY_ID> a ID do recurso de uma identidade atribuída pelo usuário. Para identidade atribuída pelo sistema, use system em vez da ID do recurso.
Observação
A identidade atribuída pelo usuário deve ter acesso para ler o segredo em Key Vault. A identidade atribuída pelo sistema não pode ser usada com o comando criar porque ela não está disponível até que o aplicativo de contêiner seja criado.
Não há suporte para referências de Key Vault segredos no PowerShell.
Observação
Se você estiver usando UDR com Firewall do Azure, precisará adicionar a AzureKeyVault marca de serviço e o FQDN login.microsoft.com à lista de permissões para o firewall. Consulte configurar a UDR com Firewall do Azure para decidir quais marcas de serviço adicionais você precisa.
Key Vault URI secreto e rotação de segredo
O URI do segredo Key Vault deve estar em um dos seguintes formatos:
https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931:referenciar uma versão específica de um segredo.
https://myvault.vault.azure.net/secrets/mysecret: Referencie a versão mais recente de um ativo:
Se uma versão não for especificada na referência, o aplicativo usará a versão mais recente no cofre de chaves. Quando versões mais recentes ficam disponíveis, o aplicativo recupera automaticamente a versão mais recente dentro de 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 ter 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.
Na página Criar e implantar nova revisão, selecione um contêiner.
Na seção Variáveis de ambiente, selecione o botão 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.
Depois, selecione Criar para criar o grupo.
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.
Montar segredos em um volume
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 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 carregar segredos específicos.
Na seção Montagens de volume , expanda a seção Segredos.
Selecione Criar nova regra.
Insira as seguintes informações:
Nome: mysecrets
Montar todos os segredos: habilitado
Observação
Se você quiser carregar segredos específicos, desabilite 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 do 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. Em seguida, o aplicativo pode referenciar os segredos na montagem de 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 apenas o queue-connection-string segredo na montagem de mysecrets volume com um nome de arquivo de connection-string.txt.
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. Em seguida, o aplicativo pode ler os segredos como arquivos na montagem de volume.