Gerenciar segredos no Aplicativos de Contêiner do Azure

Aplicativos de Contêiner do Azure permite 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 aplicativos de contêiner. Especificamente, 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.
  • Novas revisões não são geradas por meio da adição, remoção ou alteração de segredos.
  • 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:

  1. Implantar uma nova revisão.
  2. 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.

Permissões para gerenciar segredos

Os Aplicativos de Contêiner do Azure expõem operações listSecrets separadas para aplicativos de contêiner, trabalhos e componentes do Dapr. Essas operações retornam valores secretos em texto simples. Conceda essas permissões apenas a identidades que precisam ler valores secretos.

Várias funções internas do Azure para Container Apps definem permissões usando padrões curinga por conveniência. Os exemplos a seguir concedem a possibilidade de ler valores secretos por meio de um caractere curinga ou da permissão explícita listSecrets, mesmo quando o nome da função ou sua descrição sugere um acesso mais restrito. Esta lista não é exaustiva; revise os papéis embutidos atuais no Azure para containers antes de atribuir um papel.

As seguintes funções concedem acesso aos valores de segredo de aplicativo de contêiner ou tarefa:

Função incorporada Permissões relevantes na definição de função Operação de correspondência de segredos
Colaborador dos Aplicativos de Contêiner Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Operador dos Aplicativos de Contêiner Microsoft.App/containerApps/*/action Microsoft.App/containerApps/listSecrets/action
Colaborador de trabalhos dos Aplicativos de Contêiner Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action
Operador de trabalhos dos Aplicativos de Contêiner Microsoft.App/jobs/*/action Microsoft.App/jobs/listSecrets/action

Os seguintes papéis concedem acesso a valores secretos configurados para componentes Dapr:

Função incorporada Permissões relevantes na definição de função Operação de correspondência de segredos
Colaborador de ManagedEnvironments dos Aplicativos de Contêiner Microsoft.App/managedEnvironments/*/action Microsoft.App/managedEnvironments/daprComponents/listSecrets/action
Colaborador de ConnectedEnvironments dos Aplicativos de Contêiner Microsoft.App/connectedEnvironments/*, Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action Microsoft.App/connectedEnvironments/daprComponents/listSecrets/action

O acesso efetivo depende do escopo da atribuição do papel. Por exemplo, uma atribuição no escopo do grupo de recursos concede a permissão correspondente para todo recurso aplicável nesse grupo.

Importante

As descrições dos cargos de Operador de Apps de Contêineres e Operador de Empregos de Apps de Contêineres enfatizam tarefas operacionais. No entanto, suas ações imprevisíveis também concedem permissão para listar segredos. Revise a lista completa de permissões de uma função antes de atribuí-la.

Crie um papel personalizado com permissões mais restritas

Cargos incorporados são uma conveniência, não uma limitação. Se nenhum papel embutido corresponder ao nível de acesso que você deseja conceder, defina um papel personalizado no Azure que liste apenas as operações que você precisa e omita a listSecrets ação.

Por exemplo, o seguinte papel personalizado permite que um usuário visualize trabalhos e execuções e pare de executar execuções, sem conceder a listSecrets ação:

{
  "Name": "Container Apps Jobs Execution Stopper",
  "IsCustom": true,
  "Description": "View Container Apps jobs and stop running executions.",
  "Actions": [
    "Microsoft.App/jobs/read",
    "Microsoft.App/jobs/executions/read",
    "Microsoft.App/jobs/execution/read",
    "Microsoft.App/jobs/stop/action",
    "Microsoft.App/jobs/stop/execution/action",
    "Microsoft.App/managedEnvironments/read"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/<SUBSCRIPTION_ID>"
  ]
}

Evite padrões de coringa, como Microsoft.App/jobs/*/action em uma definição de função personalizada. Esse coringa concede todas as operações atuais e futuras que correspondem ao padrão, incluindo listSecrets.

Warning

Para tarefas do Container Apps, omitir a ação listSecrets de uma função personalizada não é suficiente para proteger valores de segredo se essa função também conceder Microsoft.App/jobs/start/action. A API REST Jobs - Start aceita um template de execução opcional que pode sobrescrever as imagens do contêiner principal e inicial, comandos e variáveis de ambiente. Um usuário que pode iniciar um trabalho e sabe o nome de um segredo pode consultar esse segredo a partir de um contêiner de sua escolha e ler seu valor dentro dele. O contêiner também pode usar qualquer identidade gerenciada configurada para estar disponível para ele. Trate a permissão para iniciar um trabalho como permissão para usar os segredos do trabalho e as identidades gerenciadas disponíveis.

Para obter mais informações, confira Funções personalizadas do Azure.

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 em Azure Key Vault.

Observação

Evite especificar o valor de um segredo diretamente em um ambiente de produção. Em vez disso, use uma referência a um segredo armazenado no Azure Key Vault, conforme descrito na seção Armazenar valor secreto em Aplicativos de Contêiner.

Armazenar o valor do segredo nos Aplicativos de Contêiner

O seguinte é usado quando você define segredos por meio do portal ou por meio de diferentes opções de linha de comando.

  1. Acesse seu aplicativo de contêiner no Azure portal.

  2. Na seção Segurança , selecione Segredos.

  3. Selecione Adicionar.

  4. No painel Adicionar contexto de segredo, insira as seguintes informações:

    • Nome: O nome do segredo.
    • Tipo: Selecione Segredo dos Aplicativos de Contêiner.
    • Valor: O valor do segredo.
  5. Selecione Adicionar.

Segredo de referência do Key Vault

Quando você define um segredo, cria uma referência a um segredo armazenado em Azure Key Vault. Os Aplicativos de Contêiner recuperam automaticamente o valor secreto do Key Vault e o disponibilizam como um segredo em seu aplicativo de contêiner.

Para fazer referência a um segredo de Key Vault, primeiro você deve habilitar a identidade gerenciada em seu aplicativo de contêiner e conceder acesso de identidade aos segredos do Key Vault.

Para habilitar a identidade gerenciada em seu aplicativo de contêiner, consulte Identidades gerenciadas.

Para conceder acesso aos segredos do Key Vault, conceda a função Azure RBAC Key Vault Usuário de Segredos à identidade gerenciada.

  1. Acesse seu aplicativo de contêiner no Azure portal.

  2. Na seção Segurança , selecione Identidade.

  3. Na guia Sistema atribuído, alterne o Status para Ativado.

Observação

Você também pode usar uma identidade gerenciada atribuída pelo usuário, que pode ser reutilizado em vários recursos e persiste independentemente do ciclo de vida do aplicativo. Para usá-la, selecione a guia Atribuída pelo usuário e escolha uma identidade existente.

  1. Selecione Salvar para habilitar a identidade gerenciada atribuída pelo sistema.

  2. Um pop-up é exibido para confirmar se você deseja habilitar a identidade gerenciada atribuída pelo sistema e registrar seu aplicativo de contêiner com Microsoft Entra ID. Selecione Sim na barra superior.

  3. Na seção Segurança , selecione Segredos.

  4. Selecione Adicionar.

  5. No painel Adicionar contexto de segredo, insira as seguintes informações:

    • Nome: O nome do segredo.
    • Type: selecione referência do Key Vault.
    • URL secreta do Key Vault: URI do seu segredo no Key Vault. Este URI tem o seguinte formato: https://<YOUR_KEY_VAULT_NAME>.vault.azure.net/secrets/<YOUR_SECRET_NAME>/<32_DIGIT_HEX_ID>
    • Identidade: selecione Atribuída pelo sistema.
  6. Selecione Adicionar.

Observação

Se você estiver usando UDR com Firewall do Azure, será necessário adicionar a marca de serviço AzureKeyVault e a login.microsoft.com FQDN à lista de permissões do firewall. Consulte configurando a UDR com Firewall do Azure para decidir quais tags de serviço adicionais são necessárias.

Key Vault URI secreto e rotação de segredo

O URI do segredo do 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 um 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.

Depois de definir um segredo em seu aplicativo de contêiner, você pode referenciá-lo em uma variável de ambiente ao criar uma nova revisão.

  1. Acesse seu aplicativo de contêiner no Azure portal.

  2. Na seção Aplicativo, selecione Revisões e réplicas.

  3. Na página Revisões e réplicas, selecione Criar nova revisão.

  4. Na página Criar e implantar nova revisão, na guia Contêiner, na seção Imagem de contêiner, selecione um contêiner.

  5. Selecione Editar.

  6. No painel de contexto Editar um contêiner, selecione a guia Variáveis de ambiente.

  7. Selecione Adicionar.

  8. Insira as seguintes informações:

    • Nome: o nome da variável de ambiente.
    • Fonte: selecione Referenciar um segredo.
    • Valor: selecione o segredo definido anteriormente.
  9. Clique em Salvar.

  10. Na página Criar e implantar nova revisão, selecione Criar para criar a nova revisão.

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.

Exemplo

Depois de definir um segredo em seu aplicativo de contêiner, você pode referenciá-lo em uma variável de ambiente ao criar uma nova revisão.

  1. Acesse seu aplicativo de contêiner no Azure portal.

  2. Na seção Aplicativo, selecione Revisões e réplicas.

  3. Na página Revisões e réplicas, selecione Criar nova revisão.

  4. Na página Criar e implantar nova revisão, na guia Contêiner, na seção Imagem de contêiner, selecione um contêiner.

  5. Selecione Editar.

  6. No painel Contexto Editar um contêiner, selecione a guia Montagens de volume.

  7. Selecione Criar nova regra.

  8. No painel Adicionar volume, insira as seguintes informações:

    • Tipo de volume: Selecione Secret.
    • 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.

  9. Selecione Adicionar.

  10. No painel de contexto Editar um contêiner, em Nome do volume, selecione mysecrets.

  11. Em Caminho de montagem, insira /mnt/secrets.

  12. Clique em Salvar.

  13. Na página Criar e implantar uma nova revisão, selecione Criar para criar a revisão com a montagem do volume.

Solucionar problemas de referências do Key Vault

Ao referenciar segredos de Azure Key Vault, você pode encontrar problemas durante a recuperação ou sincronização de segredos. Aqui estão erros e resoluções comuns:

Erro Motivo Resolução
Identidade gerenciada não habilitada O aplicativo de contêiner não tem uma identidade gerenciada atribuída. Habilite a identidade gerenciada atribuída pelo sistema ou atribuída pelo usuário em seu aplicativo de contêiner. Veja Identidades gerenciadas.
Identidade não encontrada A identidade gerenciada especificada não existe ou não é atribuída ao aplicativo de contêiner. Verifique se a identidade foi criada e atribuída ao aplicativo de contêiner na seção Identidade .
Segredo desabilitado no Key Vault O segredo está desabilitado no recurso Key Vault. Acesse sua Key Vault no portal do Azure e habilite o segredo.
Falha na autenticação A identidade gerenciada não tem as permissões necessárias para ler o segredo. Conceda a função Key Vault Secrets User à identidade gerenciada em seu Key Vault. Consulte Key Vault Secrets User.
Permissão RBAC negada A identidade gerenciada não tem permissões suficientes para acessar o Key Vault. Verifique a atribuição da função RBAC no Cofre de Chaves e certifique-se de que ela inclua permissões de leitura para os segredos.

Próximas etapas