Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como migrar de métodos de autenticação tradicionais para conexões mais seguras e sem senha com o Banco de Dados do Azure para MySQL.
As solicitações de aplicativo para o Banco de Dados do Azure para MySQL devem ser autenticadas. O Banco de Dados do Azure para MySQL fornece várias maneiras diferentes para os aplicativos se conectarem com segurança. Uma das maneiras é usar senhas. No entanto, você deve priorizar conexões sem senha em seus aplicativos quando possível.
Comparar opções de autenticação
Quando o aplicativo se autentica com o Banco de Dados do Azure para MySQL, ele fornece um par de nome de usuário e senha para se conectar ao banco de dados. Dependendo de onde as identidades são armazenadas, existem dois tipos de autenticação: autenticação Microsoft Entra e autenticação MySQL.
Autenticação do Microsoft Entra
A autenticação do Microsoft Entra é um mecanismo para se conectar ao Banco de Dados do Azure para MySQL usando identidades definidas na ID do Microsoft Entra. Ao utilizar a autenticação Microsoft Entra, pode gerir as identidades dos utilizadores da base de dados e outros serviços serviços Microsoft numa localização central, o que simplifica a gestão de permissões.
Usar o Microsoft Entra ID para autenticação oferece os seguintes benefícios:
- Autenticação de usuários nos Serviços do Azure de maneira uniforme.
- Gerenciamento de políticas de senhas e rotação de senhas em um único lugar.
- Várias formas de autenticação suportadas pelo Microsoft Entra ID, que podem eliminar a necessidade de armazenar senhas.
- Os clientes podem gerir permissões de base de dados utilizando grupos externos (Microsoft Entra ID).
- A autenticação do Microsoft Entra usa usuários do banco de dados MySQL para autenticar identidades no nível do banco de dados.
- Suporte de autenticação baseada em token para aplicativos que se conectam ao Banco de Dados do Azure para MySQL.
Autenticação MySQL
Você pode criar contas no MySQL. Se optar por usar palavras-passe como credenciais para as contas, a user tabela armazena essas credenciais. Como o MySQL armazena estas palavras-passe, tens de gerir tu próprio a rotação das passwords.
Embora possa ligar-se ao Base de Dados do Azure para MySQL usando palavras-passe, utilize-as com cautela. Seja cuidadoso em nunca expor as palavras-passe num local inseguro. Qualquer pessoa que tenha acesso às palavras-passe pode autenticar-se. Por exemplo, um utilizador malicioso pode aceder à aplicação se verificar acidentalmente uma cadeia de ligação no controlo de versão, enviá-la por um email inseguro, colá-la no chat errado, ou se alguém sem permissão a visualizar. Em vez disso, considere atualizar seu aplicativo para usar conexões sem senha.
Introdução a ligações sem palavra-passe
Com uma conexão sem senha, você pode se conectar aos serviços do Azure sem armazenar credenciais no código do aplicativo, em seus arquivos de configuração ou em variáveis de ambiente.
Muitos serviços do Azure suportam ligações sem palavra-passe, por exemplo, através da Identidade Gerida do Azure. Essas técnicas fornecem recursos de segurança robustos que você pode implementar usando DefaultAzureCredential das bibliotecas de cliente do Azure Identity. Neste tutorial, você aprenderá como atualizar um aplicativo existente para usar DefaultAzureCredential em vez de alternativas, como cadeias de conexão.
DefaultAzureCredential suporta vários métodos de autenticação e determina automaticamente quais devem ser usados em tempo de execução. Essa abordagem permite que seu aplicativo use métodos de autenticação diferentes em ambientes diferentes (desenvolvimento local versus produção) sem implementar código específico do ambiente.
A ordem e os locais onde DefaultAzureCredential realiza as pesquisas de credenciais podem ser encontrados na visão geral da Biblioteca de Identidade do Azure. Por exemplo, ao trabalhar localmente, DefaultAzureCredential geralmente autenticará usando a conta que o desenvolvedor usou para entrar no Visual Studio. Quando o aplicativo for implantado no Azure, DefaultAzureCredential alternará automaticamente para usar uma identidade gerenciada. Não são necessárias alterações de código para esta transição.
Para garantir que as conexões não tenham senha, você deve levar em consideração o desenvolvimento local e o ambiente de produção. Se uma cadeia de conexão for necessária em qualquer lugar, o aplicativo não será sem senha.
Em seu ambiente de desenvolvimento local, você pode autenticar com a CLI do Azure, Azure PowerShell, Visual Studio ou plug-ins do Azure para Visual Studio Code ou IntelliJ. Nesse caso, você pode usar essa credencial em seu aplicativo em vez de configurar propriedades.
Ao implantar aplicativos em um ambiente de hospedagem do Azure, como uma máquina virtual, você pode atribuir identidade gerenciada nesse ambiente. Em seguida, você não precisará fornecer credenciais para se conectar aos serviços do Azure.
Observação
Uma identidade gerenciada fornece uma identidade de segurança para representar um aplicativo ou serviço. A identidade é gerenciada pela plataforma Azure e não exige que você provisione ou alterne nenhum segredo. Você pode ler mais sobre identidades gerenciadas na documentação de visão geral .
Migrar um aplicativo existente para usar conexões sem senha
As etapas a seguir explicam como migrar um aplicativo existente para usar conexões sem senha em vez de uma solução baseada em senha.
0) Preparar o ambiente de trabalho
Primeiro, use o seguinte comando para configurar algumas variáveis de ambiente.
export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export AZ_MYSQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_MYSQL_AD_MI_USERNAME=<YOUR_AZURE_AD_MI_DISPLAY_NAME>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)
Substitua os placeholders pelos seguintes valores, que são usados ao longo deste artigo.
-
<YOUR_RESOURCE_GROUP>: O nome do grupo de recursos para os teus recursos. -
<YOUR_DATABASE_SERVER_NAME>: O nome do seu servidor MySQL, que deve ser exclusivo no Azure. -
<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: O nome para exibição do seu usuário não administrador do Microsoft Entra. Certifique-se de que o nome corresponde a um utilizador válido no seu inquilino Microsoft Entra. -
<YOUR_AZURE_AD_MI_DISPLAY_NAME>: O nome de exibição do usuário do Microsoft Entra para sua identidade gerenciada. Certifique-se de que esse nome é um utilizador válido no seu inquilino do Microsoft Entra. -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: O nome do seu servidor de identidade gerenciado atribuído pelo usuário, que deve ser exclusivo no Azure.
1) Configurar o Banco de Dados do Azure para MySQL
1.1) Ativar a autenticação baseada em ID do Microsoft Entra
Para usar o acesso ao Microsoft Entra ID com o Base de Dados do Azure para MySQL, defina primeiro o utilizador administrador do Microsoft Entra. Só um utilizador administrador da Microsoft Entra pode criar ou habilitar utilizadores para autenticação baseada no Microsoft Entra ID.
Se estiver a usar CLI do Azure, execute o seguinte comando para garantir que tem permissão suficiente:
az login --scope https://graph.microsoft.com/.default
Execute o seguinte comando para criar uma identidade de utilizador para atribuição:
az identity create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_USER_IDENTITY_NAME
Importante
Depois de criar a identidade atribuída pelo usuário, peça ao seu Administrador Global ou Administrador de Função Privilegiada para conceder as seguintes permissões para essa identidade: User.Read.All, GroupMember.Read.Alle Application.Read.ALL. Para obter mais informações, consulte a seção Permissões da autenticação do Ative Directory.
Execute o seguinte comando para atribuir a identidade ao servidor MySQL para criar o administrador do Microsoft Entra:
az mysql flexible-server identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--identity $AZ_USER_IDENTITY_NAME
Depois, execute o seguinte comando para definir o administrador do Microsoft Entra:
az mysql flexible-server ad-admin create \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--display-name $CURRENT_USERNAME \
--object-id $CURRENT_USER_OBJECTID \
--identity $AZ_USER_IDENTITY_NAME
Este comando define o administrador da Microsoft Entra para o utilizador com sessão iniciada.
Observação
Você só pode criar um administrador do Microsoft Entra por servidor MySQL. Selecionar outro administrador sobrescreve o administrador Microsoft Entra existente configurado para o servidor.
2) Configurar o Banco de Dados do Azure para MySQL para desenvolvimento local
2.1) Configurar uma regra de firewall para IP local
As instâncias do Banco de Dados do Azure para MySQL são protegidas por padrão. Eles têm um firewall que não permite nenhuma conexão de entrada.
Você pode pular esta etapa se estiver usando o Bash porque o flexible-server create comando já detetou seu endereço IP local e o definiu no servidor MySQL.
Se você estiver se conectando ao seu servidor MySQL a partir do Subsistema Windows para Linux (WSL) em um computador Windows, você precisará adicionar o ID de host WSL ao seu firewall. Obtenha o endereço IP da sua máquina anfitriã executando o seguinte comando em WSL:
cat /etc/resolv.conf
Copie o endereço IP após o termo nameserver, e depois use o seguinte comando para definir uma variável de ambiente para o endereço IP WSL:
export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Em seguida, use o seguinte comando para abrir o firewall do servidor para seu aplicativo baseado em WSL:
az mysql server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip-wsl \
--server $AZ_DATABASE_SERVER_NAME \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
2.2) Crie um usuário não-administrador do MySQL e conceda permissão
Em seguida, crie um usuário não administrador do Microsoft Entra e conceda todas as permissões no $AZ_DATABASE_NAME banco de dados a ele. Você pode alterar o nome $AZ_DATABASE_NAME do banco de dados para atender às suas necessidades.
Cria um script SQL chamado create_ad_user.sql para criar um utilizador não administrativo. Adicione o seguinte conteúdo e salve-o localmente:
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_NON_ADMIN_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_NON_ADMIN_USERNAME'@'%';
FLUSH privileges;
EOF
Depois, use o seguinte comando para executar o script SQL e criar o utilizador não administrador da Microsoft Entra:
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Agora, use o seguinte comando para remover o ficheiro de script SQL temporário:
rm create_ad_user.sql
Observação
Para mais informações sobre como criar utilizadores MySQL, consulte Criar utilizadores no Base de Dados do Azure para MySQL.
3) Entre e migre o código do aplicativo para usar conexões sem senha
Para desenvolvimento local, certifique-se de que está autenticado com a mesma conta Microsoft Entra a que atribuiu a função no seu MySQL. Autentique através do CLI do Azure, Visual Studio, Azure PowerShell ou outras ferramentas como o IntelliJ.
- CLI do Azure
- PowerShell
- Estúdio Visual
- de código do Visual Studio
- IntelliJ
Entre no Azure por meio da CLI do Azure usando o seguinte comando:
az login
Em seguida, use as etapas a seguir para atualizar seu código para usar conexões sem senha. Embora conceitualmente semelhante, cada linguagem usa detalhes de implementação diferentes.
Dentro do seu projeto, adicione a seguinte referência ao
azure-identity-extensionspacote. Esta biblioteca contém todas as entidades necessárias para implementar conexões sem senha.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.0.0</version> </dependency>Habilite o plug-in de autenticação do Azure MySQL na URL JDBC. Identifique os locais em seu código que atualmente criam um
java.sql.Connectionpara se conectar ao Banco de Dados do Azure para MySQL. Atualizeurleuserno arquivo application.properties para corresponder aos seguintes valores:url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMEObservação
Se estiveres a usar a
MysqlConnectionPoolDataSourceclasse como fonte de dados na tua aplicação, removedefaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugindo URL.url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMESubstitua as
$AZ_DATABASE_SERVER_NAMEvariáveis ,$AZ_DATABASE_NAMEe e$AZ_MYSQL_AD_NON_ADMIN_USERNAMEpelos valores que você configurou no início deste artigo.Remova o
passwordda URL JDBC.
Execute o aplicativo localmente
Depois de fazer essas alterações de código, execute seu aplicativo localmente. A nova configuração recolhe as suas credenciais locais se tiver sessão iniciada num IDE compatível ou numa ferramenta de linha de comandos compatível, como o CLI do Azure, o Visual Studio ou o IntelliJ. Os papéis que atribuíste ao teu utilizador local de desenvolvimento no Azure permitem que a tua aplicação se ligue ao serviço Azure localmente.
4) Configurar o ambiente de hospedagem do Azure
Depois de configurar a sua aplicação para usar ligações sem palavra-passe e executá-la localmente, o mesmo código pode autenticar-se nos serviços do Azure depois de o implementar no Azure. Por exemplo, um aplicativo implantado em uma instância do Serviço de Aplicativo do Azure que tenha uma identidade gerenciada atribuída pode se conectar ao Armazenamento do Azure.
Nesta secção, executa dois passos para permitir que a sua aplicação corra num ambiente de alojamento Azure de forma sem palavra-passe:
- Atribua a identidade gerenciada para seu ambiente de hospedagem do Azure.
- Atribua funções à identidade gerenciada.
Observação
O Azure também fornece o Service Connector, que pode ajudá-lo a conectar seu serviço de hospedagem ao PostgreSQL. Ao usar o Service Connector para configurar o seu ambiente de alojamento, pode omitir o passo de atribuir funções à sua identidade gerida porque o Service Connector os atribui por si. A seção a seguir descreve como configurar seu ambiente de hospedagem do Azure de duas maneiras: uma por meio do Service Connector e outra configurando cada ambiente de hospedagem diretamente.
Importante
Os comandos do Service Connector exigem a CLI do Azure 2.41.0 ou superior.
Atribuir a identidade gerenciada usando o portal do Azure
As etapas a seguir mostram como atribuir uma identidade gerenciada atribuída ao sistema para vários serviços de hospedagem na Web. A identidade gerida pode ligar-se de forma segura a outros serviços do Azure usando as configurações da aplicação que configurou anteriormente.
- Serviço de Aplicações
- Conector de serviço
- Aplicativos de contêiner
- Azure Spring Apps
- Máquinas Virtuais
- AKS
Na página de visão geral principal da sua instância do Serviço de Aplicativo do Azure, selecione Identidade no painel de navegação.
Na guia Sistema atribuído , certifique-se de definir o campo Status como ativado. Uma identidade atribuída ao sistema é gerenciada pelo Azure internamente e lida com tarefas administrativas para você. Os detalhes e IDs da identidade nunca são expostos no seu código.
Também pode atribuir uma identidade gerida num ambiente de alojamento Azure usando a CLI do Azure.
- Serviço de Aplicações
- Conector de serviço
- Aplicativos de contêiner
- Azure Spring Apps
- Máquinas Virtuais
- AKS
Você pode atribuir uma identidade gerenciada a uma instância do Serviço de Aplicativo do Azure com o comando az webapp identity assign , conforme mostrado no exemplo a seguir:
export AZ_MI_OBJECT_ID=$(az webapp identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--name <service-instance-name> \
--query principalId \
--output tsv)
Atribuir funções à identidade gerenciada
Em seguida, conceda permissões para a identidade gerenciada que você atribuiu para acessar sua instância do MySQL.
Estes passos criam um utilizador Microsoft Entra para a identidade gerida e concedem todas as permissões da base de dados $AZ_DATABASE_NAME a essa entidade. Você pode alterar o nome $AZ_DATABASE_NAME do banco de dados para atender às suas necessidades.
Primeiro, cria um script SQL chamado create_ad_user.sql para criar um utilizador não administrativo. Adicione o seguinte conteúdo e salve-o localmente:
export AZ_MYSQL_AD_MI_USERID=$(az ad sp show --id $AZ_MI_OBJECT_ID --query appId --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_MI_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_MI_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_MI_USERNAME'@'%';
FLUSH privileges;
EOF
Depois, use o seguinte comando para executar o script SQL e criar o utilizador não administrador da Microsoft Entra:
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Agora, use o seguinte comando para remover o ficheiro de script SQL temporário:
rm create_ad_user.sql
Testar a aplicação
Antes de implementar a aplicação no ambiente de alojamento, precisa de fazer mais uma alteração no código porque a aplicação liga-se ao MySQL usando o utilizador que criou para a identidade gerida.
Atualize seu código para usar o usuário criado para a identidade gerenciada:
properties.put("user", "$AZ_MYSQL_AD_MI_USERNAME");
Depois de fazer essas alterações de código, você pode criar e reimplantar o aplicativo. Em seguida, navegue até o aplicativo hospedado no navegador. Seu aplicativo deve ser capaz de se conectar ao banco de dados MySQL com êxito. Pode demorar vários minutos até que as atribuições de funções se propaguem pelo teu ambiente 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.
Para explorar os conceitos discutidos neste artigo com mais profundidade, consulte os seguintes recursos: