Share via


Migrar um aplicativo para usar conexões sem senha com o Azure Cosmos DB para NoSQL

As solicitações de aplicativo para o Azure Cosmos DB para NoSQL devem ser autenticadas. Embora haja várias opções para autenticação no Azure Cosmos DB, você deve priorizar conexões sem senha em seus aplicativos quando possível. Os métodos de autenticação tradicionais que usam cadeias de conexão com senhas ou chaves secretas criam riscos e complicações de segurança. Visite as conexões sem senha para o hub de serviços do Azure para saber mais sobre as vantagens de mudar para conexões sem senha.

O tutorial a seguir explica como migrar um aplicativo existente para se conectar ao Azure Cosmos DB para NoSQL usando conexões sem senha em vez de uma solução baseada em chave.

Configurar funções e usuários para autenticação de desenvolvimento local

Ao desenvolver localmente com autenticação sem senha, verifique se a conta de usuário que se conecta ao Cosmos DB recebe uma função com as permissões corretas para executar operações de dados. Atualmente, o Azure Cosmos DB para NoSQL não inclui funções internas para operações de dados, mas você pode criar suas próprias funções usando a CLI do Azure ou o PowerShell.

As funções consistem em um conjunto de permissões ou ações que um usuário tem permissão para executar, como leitura, gravação e exclusão. Você pode ler mais sobre como configurar o controle de acesso baseado em função (RBAC) na documentação de configuração de segurança do Cosmos DB.

Criar a função personalizada

  1. Crie uma função usando o az role definition create comando. Passe o nome da conta e o grupo de recursos do Cosmos DB, seguido por um corpo de JSON que define a função personalizada. O exemplo a seguir cria uma função nomeada PasswordlessReadWrite com permissões para ler e gravar itens em contêineres do Cosmos DB. A função também tem escopo para o nível da conta usando /.

    az cosmosdb sql role definition create \
        --account-name <cosmosdb-account-name> \
        --resource-group  <resource-group-name> \
        --body '{
        "RoleName": "PasswordlessReadWrite",
        "Type": "CustomRole",
        "AssignableScopes": ["/"],
        "Permissions": [{
            "DataActions": [
                "Microsoft.DocumentDB/databaseAccounts/readMetadata",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
                "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
            ]
        }]
    }'
    
  2. Quando o comando for concluído, copie o valor ID do campo e cole-o name em algum lugar para uso posterior.

  3. Atribua a função criada à conta de usuário ou entidade de serviço que se conectará ao Cosmos DB. Durante o desenvolvimento local, essa geralmente será sua própria conta conectada a uma ferramenta de desenvolvimento como o Visual Studio ou a CLI do Azure. Recupere os detalhes da sua conta usando o az ad user comando.

    az ad user show --id "<your-email-address>"
    
  4. Copie o valor da propriedade para fora dos resultados e cole-o id em algum lugar para uso posterior.

  5. Atribua a função personalizada que você criou à sua conta de usuário usando o az cosmosdb sql role assignment create comando e as IDs copiadas anteriormente.

    az cosmosdb sql role assignment create \
        --account-name <cosmosdb-account-name> \
        --resource-group  <resource-group-name> \
        --scope "/" \
        --principal-id <your-user-id> \
        --role-definition-id <your-custom-role-id> 
    

Entrar no Azure localmente

Para desenvolvimento local, certifique-se de que está autenticado com a mesma conta do Microsoft Entra à qual atribuiu a função. Você pode autenticar por meio de ferramentas de desenvolvimento populares, como a CLI do Azure ou o Azure PowerShell. As ferramentas de desenvolvimento com as quais você pode autenticar variam entre os idiomas.

Entre no Azure por meio da CLI do Azure usando o seguinte comando:

az login

Migrar o código do aplicativo para usar conexões sem senha

  1. Para usar DefaultAzureCredential em um aplicativo .NET, instale o Azure.Identity pacote:

    dotnet add package Azure.Identity
    
  2. Na parte superior do ficheiro, adicione o seguinte código:

    using Azure.Identity;
    
  3. Identifique os locais em seu código que criam um CosmosClient objeto para se conectar ao Azure Cosmos DB. Atualize seu código para corresponder ao exemplo a seguir.

    DefaultAzureCredential credential = new();
    
    using CosmosClient client = new(
        accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT"),
        tokenCredential: credential
    );
    

Executar a aplicação localmente

Depois de fazer essas alterações de código, execute seu aplicativo localmente. A nova configuração deve pegar suas credenciais locais, como a CLI do Azure, Visual Studio ou IntelliJ. As funções que você atribuiu ao seu usuário de desenvolvimento local no Azure permitem que seu aplicativo se conecte ao serviço do Azure localmente.

Configurar o ambiente de hospedagem do Azure

Depois que seu aplicativo estiver configurado para usar conexões sem senha e for executado localmente, o mesmo código poderá ser autenticado nos serviços do Azure depois de implantado no Azure. As seções a seguir explicam como configurar um aplicativo implantado para se conectar ao Azure Cosmos DB usando uma identidade gerenciada.

Criar a identidade gerenciada

Você pode criar uma identidade gerenciada atribuída pelo usuário usando o portal do Azure ou a CLI do Azure. Seu aplicativo usa a identidade para autenticar em outros serviços.

  1. Na parte superior do portal do Azure, procure identidades gerenciadas. Selecione o resultado Identidades gerenciadas.
  2. Selecione + Criar na parte superior da página de visão geral de Identidades Gerenciadas .
  3. Na guia Noções básicas, insira os seguintes valores:
    • Assinatura: Selecione a assinatura desejada.
    • Grupo de recursos: selecione o grupo de recursos desejado.
    • Região: selecione uma região perto da sua localização.
    • Nome: insira um nome reconhecível para sua identidade, como MigrationIdentity.
  4. Selecione Rever + criar na parte inferior da página.
  5. Quando as verificações de validação terminarem, selecione Criar. O Azure cria uma nova identidade atribuída pelo usuário.

Depois que o recurso for criado, selecione Ir para o recurso para exibir os detalhes da identidade gerenciada.

A screenshot showing how to create a user assigned managed identity.

Associar a identidade gerenciada ao seu aplicativo Web

Você precisa configurar seu aplicativo Web para usar a identidade gerenciada que você criou. Atribua a identidade ao seu aplicativo usando o portal do Azure ou a CLI do Azure.

Conclua as etapas a seguir no portal do Azure para associar uma identidade ao seu aplicativo. Estas mesmas etapas se aplicam aos seguintes serviços do Azure:

  • Azure Spring Apps
  • Azure Container Apps
  • Máquinas virtuais do Azure
  • Azure Kubernetes Service
  1. Navegue até a página de visão geral do seu aplicativo Web.

  2. Selecione Identidade na navegação à esquerda.

  3. Na página Identidade, alterne para a guia Usuário atribuído.

  4. Selecione + Adicionar para abrir o submenu Adicionar identidade gerenciada atribuída ao usuário.

  5. Selecione a assinatura usada anteriormente para criar a identidade.

  6. Procure a MigrationIdentity pelo nome e selecione-a nos resultados da pesquisa.

  7. Selecione Adicionar para associar a identidade ao seu aplicativo.

    Screenshot showing how to create a user assigned identity.

Atribuir funções à identidade gerenciada

Conceda permissões à identidade gerenciada atribuindo-lhe a função personalizada que você criou, assim como fez com seu usuário de desenvolvimento local.

Para atribuir uma função no nível de recurso usando a CLI do Azure, primeiro você deve recuperar a ID do recurso usando o comando az cosmosdb show . Você pode filtrar as propriedades de saída usando o --query parâmetro.

az cosmosdb show \
    --resource-group '<resource-group-name>' \
    --name '<cosmosdb-name>' \
    --query id

Copie o ID de saída do comando anterior. Em seguida, você pode atribuir funções usando o comando az role assignment da CLI do Azure.

az role assignment create \
    --assignee "<your-managed-identity-name>" \
    --role "PasswordlessReadWrite" \
    --scope "<cosmosdb-resource-id>"

Atualizar o código do aplicativo

Você precisa configurar o código do aplicativo para procurar a identidade gerenciada específica que você criou quando ele é implantado no Azure. Em alguns cenários, definir explicitamente a identidade gerenciada para o aplicativo também impede que outras identidades de ambiente sejam acidentalmente detetadas e usadas automaticamente.

  1. Na página de visão geral da identidade gerenciada, copie o valor da ID do cliente para a área de transferência.

  2. Aplique as seguintes alterações específicas do idioma:

    Crie um DefaultAzureCredentialOptions objeto e passe-o para DefaultAzureCredential. Defina a propriedade ManagedIdentityClientId como a ID do cliente.

    DefaultAzureCredential credential = new(
        new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = managedIdentityClientId
        });
    
  3. Reimplante seu código no Azure depois de fazer essa alteração para que as atualizações de configuração sejam aplicadas.

Testar a aplicação

Depois de implantar o código atualizado, navegue até o aplicativo hospedado no navegador. Seu aplicativo deve ser capaz de se conectar ao Cosmos DB com êxito. Lembre-se de que pode levar vários minutos para que as atribuições de função se propaguem pelo seu ambiente do Azure. Seu aplicativo agora está configurado para ser executado localmente e em um ambiente de produção sem que os desenvolvedores tenham que gerenciar segredos no próprio aplicativo.

Próximos passos

Neste tutorial, você aprendeu como migrar um aplicativo para conexões sem senha.

Você pode ler os seguintes recursos para explorar os conceitos discutidos neste artigo com mais profundidade: