Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você aprenderá a conectar um aplicativo JBoss EAP Java em Serviço de Aplicativo do Azure a um banco de dados Banco de Dados do Azure para MySQL usando uma identidade gerenciada. O Serviço de Aplicativo pode usar identidade gerenciada para fornecer acesso seguro a Banco de Dados do Azure para MySQL e outros serviços Azure. Uma identidade gerenciada elimina a necessidade de usar segredos em seu aplicativo, como credenciais nas variáveis de ambiente.
Este tutorial usa comandos CLI do Azure para concluir as seguintes tarefas:
- Cria um servidor e Banco de Dados do Azure para MySQL.
- Implanta um aplicativo JBoss EAP de exemplo no Serviço de Aplicativo usando um pacote WAR.
- Configura o aplicativo Web Spring Boot para usar a autenticação Microsoft Entra com o banco de dados MySQL.
- Conecta o aplicativo Web ao banco de dados MySQL usando o Service Connector com autenticação de identidade gerenciada.
Pré-requisitos
Uma assinatura do Azure com permissões de atribuição de função do Microsoft Entra e permissões de gravação de recursos do Azure, em uma região do Azure que compatível com o Service Connector e que tenha suporte e cota suficientes para o Serviço de Aplicativo para o tutorial.
Os provedores de recursos
Microsoft.ServiceLinkereMicrosoft.DBforMySQLregistrados em sua assinatura de Azure. Você pode executaraz provider register -n Microsoft.[service]para registrar os provedores.Git para acessar e clonar o repositório de exemplo.
Para acessar o Azure Cloud Shell e executar as etapas do tutorial, ou se preferir executar localmente, confira os seguintes pré-requisitos e etapas:
Java JDKInstaladoMaven instalado
jqInstaladoCliente MySQL instalado
CLI do Azure 2.46.0 ou superior instalado. Para verificar sua versão, execute
az --version. Para atualizar, executeaz upgrade.Se você estiver executando localmente:
- Entre no Azure usando
az logine seguindo os prompts. - Se você tiver mais de uma assinatura Azure conectada às suas credenciais de entrada, execute
az account set --subscription <subscription-ID>para selecionar a assinatura correta.
- Entre no Azure usando
Configure seu ambiente
Instale as seguintes extensões da CLI do Azure:
az extension add --name serviceconnector-passwordless --upgrade az extension add --name rdbms-connectExecute os comandos a seguir para clonar o repositório de exemplo e alterar diretórios na pasta de projeto de aplicativo de exemplo. Execute todos os comandos restantes desta pasta.
git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/Defina as variáveis de ambiente para o tutorial, substituindo o marcador
<region>por um valor válido.LOCATIONDeve ser uma região do Azure em que sua assinatura tenha cota suficiente para criar os recursos do Azure e nenhuma restrição em qualquer um dos serviços.LOCATION="<region>" RESOURCE_GROUP="mysql-mi-webapp"Crie um grupo de recursos Azure para conter todos os recursos do projeto. O nome do grupo de recursos é armazenado em cache e aplicado automaticamente aos comandos subsequentes.
az group create --name $RESOURCE_GROUP --location $LOCATION
Criar um Banco de Dados do Azure para MySQL
Crie um servidor Banco de Dados do Azure para MySQL e um banco de dados em sua assinatura. O aplicativo Spring Boot se conecta a esse banco de dados e armazena seus dados durante a execução, mantendo o estado do aplicativo, independentemente de onde você executar o aplicativo.
Execute o comando a seguir para criar um servidor Banco de Dados do Azure para MySQL. O nome
MYSQL_HOSTdeve ser exclusivo em toda a Azure.Observação
Embora o comando defina uma conta de administrador, a conta não é usada porque a conta Microsoft Entra administrador faz todas as tarefas administrativas.
export MYSQL_ADMIN_USER=azureuser export MYSQL_ADMIN_PASSWORD="AdminPassword1" export RAND_ID=$RANDOM export MYSQL_HOST="mysql-mi-$RAND_ID" az mysql flexible-server create \ --name $MYSQL_HOST \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --admin-user $MYSQL_ADMIN_USER \ --admin-password $MYSQL_ADMIN_PASSWORD \ --public-access 0.0.0.0 \ --tier Burstable \ --sku-name Standard_B1ms \ --storage-size 32Crie um banco de dados nomeado
checklistpara o aplicativo a ser usado.export DATABASE_NAME="checklist" az mysql flexible-server db create \ --resource-group $RESOURCE_GROUP \ --server-name $MYSQL_HOST \ --database-name $DATABASE_NAMEAbra o firewall para permitir a conexão com o banco de dados a partir do seu endereço IP atual.
# Create a temporary firewall rule to allow connections from your current machine to the MySQL server export MY_IP=$(curl http://whatismyip.akamai.com) az mysql flexible-server firewall-rule create \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect \ --start-ip-address ${MY_IP} \ --end-ip-address ${MY_IP}Conecte-se ao banco de dados e crie as tabelas conforme especificado no arquivo de projeto de exemplo /azure/init-db.sql .
export DATABASE_FQDN=${MYSQL_HOST}.mysql.database.azure.com export CURRENT_USER=$(az account show --query user.name --output tsv) export RDBMS_ACCESS_TOKEN=$(az account get-access-token \ --resource-type oss-rdbms \ --output tsv \ --query accessToken) mysql -h "${DATABASE_FQDN}" --user "${CURRENT_USER}" --password="$RDBMS_ACCESS_TOKEN" < azure/init-db.sqlRemova a regra temporária do firewall.
az mysql flexible-server firewall-rule delete \ --resource-group $RESOURCE_GROUP \ --name $MYSQL_HOST \ --rule-name AllowCurrentMachineToConnect
Criar um recurso do Serviço de Aplicativo
Crie um recurso JBoss EAP do Serviço de Aplicativo no Linux. O JBoss EAP requer uma camada Premium sku .
# Create an App Service plan
export APPSERVICE_PLAN="mysql-mi-plan"
export APPSERVICE_NAME="mysql-mi-app"
az appservice plan create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_PLAN \
--location $LOCATION \
--sku P1V3 \
--is-linux
# Create an App Service web app
az webapp create \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--plan $APPSERVICE_PLAN \
--runtime "JBOSSEAP:7-java8"
Criar e configurar uma identidade gerenciada atribuída pelo usuário
Use o comando a seguir para criar uma identidade gerenciada atribuída pelo usuário Azure a ser usada para autenticação Microsoft Entra. Para obter mais informações, consulte Configurar a autenticação do Microsoft Entra para o Banco de Dados do Azure para MySQL - Servidor Flexível.
export USER_IDENTITY_NAME="my-user-assigned-identity"
export IDENTITY_RESOURCE_ID=$(az identity create \
--name $USER_IDENTITY_NAME \
--resource-group $RESOURCE_GROUP \
--query id \
--output tsv)
Conceda à nova identidade atribuída ao usuário User.Read.All, GroupMember.Read.All e Application.Read.All permissões. Ou atribua à identidade a função integrada Leitores de Diretório do Microsoft Entra.
CLI do Azure não tem suporte para atribuir permissões ou funções Microsoft Entra. Você pode usar o centro de administração do Microsoft Entra, o Microsoft Graph PowerShell ou a API do Microsoft Graph para criar as atribuições. Para obter mais informações, consulte Atribuir funções do Microsoft Entra.
Observação
Para adicionar essas atribuições, você deve ter pelo menos a função Administrador de Função Privilegiada ou permissões no seu locatário do Microsoft Entra. Se você não tiver essa função, peça ao administrador global ou administrador de funções com privilégios para conceder as permissões.
Usar a identidade gerenciada para conectar os serviços
Use o Service Connector para conectar seu aplicativo Web JBoss EAP do Serviço de Aplicativo ao banco de dados MySQL com uma identidade gerenciada. O Service Connector realiza as seguintes tarefas em segundo plano:
- Define o usuário conectado atual como o administrador do banco de dados Microsoft Entra.
- Habilita a identidade gerenciada atribuída pelo sistema para o aplicativo.
- Adiciona um usuário de banco de dados para a identidade gerenciada atribuída pelo sistema e concede todos os privilégios de banco de dados a esse usuário.
- Adiciona uma cadeia de conexão chamada
AZURE_MYSQL_CONNECTIONSTRINGàs Configurações do Aplicativo.
Use o comando az webapp connection create a seguir para conectar sua aplicação ao banco de dados MySQL usando a identidade gerenciada.
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
Compilar e implantar o aplicativo
Execute o código a seguir para adicionar o plugin de autenticação sem senha à string de conexão gerada pelo Conector de Serviço. O script de inicialização do aplicativo faz referência a esse cadeia de conexão.
export PASSWORDLESS_URL=$(\ az webapp config appsettings list \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ | jq -c '.[] \ | select ( .name == "AZURE_MYSQL_CONNECTIONSTRING" ) \ | .value' \ | sed 's/"//g') # Create a new environment variable with the connection string including the passwordless authentication plugin export PASSWORDLESS_URL=${PASSWORDLESS_URL}'&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin' az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --settings "AZURE_MYSQL_CONNECTIONSTRING_PASSWORDLESS=${PASSWORDLESS_URL}"Crie o aplicativo usando o arquivo pom.xml no aplicativo de exemplo para gerar o arquivo WAR.
mvn clean package -DskipTestsImplante o arquivo WAR e o script de inicialização no Serviço de Aplicativo.
az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path target/ROOT.war \ --type war az webapp deploy \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --src-path src/main/webapp/WEB-INF/createMySQLDataSource.sh \ --type startup
Testar o aplicativo
Execute o código a seguir para criar uma lista com alguns itens de lista.
export WEBAPP_URL=$(az webapp show \ --resource-group $RESOURCE_GROUP \ --name $APPSERVICE_NAME \ --query defaultHostName \ --output tsv)/$DATABASE_NAME # Create a list curl -X POST -H "Content-Type: application/json" -d '{"name": "list1","date": "2022-03-21T00:00:00","description": "Sample checklist"}' https://${WEBAPP_URL} # Create few items on the list 1 curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/1/item curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/1/item curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/1/itemSe você estiver trabalhando localmente, execute o seguinte código para exibir o aplicativo:
# Get all list items curl https://${WEBAPP_URL} # Get list item 1 curl https://${WEBAPP_URL}/1Cloud Shell não pode abrir um navegador local, portanto, se você estiver trabalhando no Cloud Shell, a maneira mais fácil de exibir o aplicativo Web é selecionar o link Browse ou Default domain próximo à parte superior da página do portal Azure do aplicativo. Em seguida, acrescente
/checklistou/checklist/1ao final da URL no navegador, por exemplohttps://mysql-mi-app.azurewebsites.net/checklist.
Limpar os recursos
Quando terminar este tutorial, você poderá evitar encargos adicionais excluindo os recursos criados. Exclua o grupo de recursos para excluir todos os recursos que ele contém. Verifique se você não precisa mais dos recursos antes de executar o comando.
az group delete --name $RESOURCE_GROUP --no-wait
A exclusão de todos os recursos pode levar algum tempo. O --no-wait argumento permite que o comando retorne imediatamente.