Sdílet prostřednictvím


Kurz: Připojení k databázi MySQL ze služby Java JBoss EAP App Service pomocí bez hesla

služba Aplikace Azure service poskytuje vysoce škálovatelnou službu pro samoobslužné opravy webů v Azure. Poskytuje také spravovanou identitu pro vaši aplikaci, což je řešení pro zabezpečení přístupu ke službě Azure Database for MySQL a dalším službám Azure. Spravované identity ve službě App Service usnadňují zabezpečení vaší aplikace odstraněním tajných kódů z vaší aplikace, jako jsou přihlašovací údaje v proměnných prostředí.

V tomto kurzu se naučíte:

  • Vytvořte databázi MySQL.
  • Nasaďte ukázkovou aplikaci JBoss EAP do služby Aplikace Azure Service pomocí balíčku WAR.
  • Nakonfigurujte webovou aplikaci Spring Boot tak, aby používala ověřování Microsoft Entra s databází MySQL.
  • Připojte se k databázi MySQL pomocí spravované identity pomocí konektoru služby.

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Požadavky

Naklonujte ukázkovou aplikaci a připravte úložiště.

Spuštěním následujících příkazů v terminálu naklonujte ukázkové úložiště a nastavte prostředí ukázkové aplikace.

git clone https://github.com/Azure-Samples/Passwordless-Connections-for-Java-Apps
cd Passwordless-Connections-for-Java-Apps/JakartaEE/jboss-eap/

Vytvoření Azure Database for MySQL

Podle těchto kroků vytvořte prostředek Azure Database for MySQL ve vašem předplatném. Aplikace Spring Boot se připojí k této databázi a uloží její data při spuštění a zachová stav aplikace bez ohledu na to, kde aplikaci spouštíte.

  1. Přihlaste se k Azure CLI a volitelně nastavte své předplatné, pokud máte více než jedno připojené k přihlašovacím údajům.

    az login
    az account set --subscription <subscription-ID>
    
  2. Vytvořte skupinu prostředků Azure.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Vytvořte server Azure Database for MySQL. Server se vytvoří pomocí účtu správce, ale nepoužívá se, protože k provádění úloh správy použijeme účet správce Microsoft Entra.

    export MYSQL_ADMIN_USER=azureuser
    
    # MySQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database.
    export MYSQL_ADMIN_PASSWORD=<admin-password>
    export MYSQL_HOST=<mysql-host-name>
    
    # Create a MySQL server.
    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 32
    
  4. Vytvořte databázi pro aplikaci.

    export DATABASE_NAME=checklist
    
    az mysql flexible-server db create \
        --resource-group $RESOURCE_GROUP \
        --server-name $MYSQL_HOST \
        --database-name $DATABASE_NAME
    

Vytvoří App Service.

Vytvořte prostředek služby Aplikace Azure v Linuxu. JBoss EAP vyžaduje skladovou položku Premium.

export APPSERVICE_PLAN=<app-service-plan>
export APPSERVICE_NAME=<app-service-name>

# Create an App Service plan
az appservice plan create \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_PLAN \
    --location $LOCATION \
    --sku P1V3 \
    --is-linux

# Create an App Service resource.
az webapp create \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --plan $APPSERVICE_PLAN \
    --runtime "JBOSSEAP:7-java8"

Připojení databáze MySQL k připojení identit

Dále připojte databázi pomocí konektoru služby.

  1. Nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Pomocí následujícího příkazu vytvořte spravovanou identitu přiřazenou uživatelem pro ověřování Microsoft Entra. Další informace najdete v tématu Nastavení ověřování Microsoft Entra pro flexibilní server Azure Database for MySQL.

    export USER_IDENTITY_NAME=<your-user-assigned-managed-identity-name>
    export IDENTITY_RESOURCE_ID=$(az identity create \
        --name $USER_IDENTITY_NAME \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Požádejte globálního správce nebo správce privilegovaných rolí, aby nové identitě přiřazené uživatelem udělil následující oprávnění: User.Read.All, GroupMember.Read.Alla Application.Read.ALL. Další informace najdete v části Oprávnění ověřování active directory.

  4. Připojte aplikaci k databázi MySQL pomocí spravované identity přiřazené systémem pomocí konektoru služby. Pokud chcete toto připojení vytvořit, spusťte příkaz az webapp connection create .

    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
    

    Tento příkaz konektoru služby provede na pozadí následující úlohy:

    • Povolte spravovanou identitu přiřazenou systémem pro aplikaci $APPSERVICE_NAME hostované službou Aplikace Azure Service.

    • Nastavte správce Microsoft Entra na aktuální přihlášeného uživatele.

    • Přidejte uživatele databáze pro spravovanou identitu přiřazenou systémem v kroku 1 a udělte tomuto uživateli všechna oprávnění databáze $DATABASE_NAME . Uživatelské jméno můžete získat z připojovací řetězec ve výstupu z předchozího příkazu.

    • Přidejte do nastavení aplikace připojovací řetězec v aplikaci s názvem AZURE_MYSQL_CONNECTIONSTRING.

      Poznámka:

      Pokud se zobrazí chybová zpráva The subscription is not registered to use Microsoft.ServiceLinker, spusťte příkaz az provider register --namespace Microsoft.ServiceLinker pro registraci poskytovatele prostředků konektoru služby a spusťte příkaz připojení znovu.

Nasazení aplikace

Tímto postupem připravíte data v databázi a nasadíte aplikaci.

Vytvoření schématu databáze

  1. Otevřete bránu firewall a povolte připojení z aktuální IP adresy.

    # 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}
    
  2. Připojte se k databázi a vytvořte tabulky.

    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}" --enable-cleartext-plugin --password="$RDBMS_ACCESS_TOKEN" < azure/init-db.sql
    
  3. Odeberte dočasné pravidlo brány firewall.

    az mysql flexible-server firewall-rule delete \
        --resource-group $RESOURCE_GROUP \
        --name $MYSQL_HOST \
        --rule-name AllowCurrentMachineToConnect
    

Nasazení aplikace

  1. Aktualizujte připojovací řetězec v nastavení aplikace.

    Získejte připojovací řetězec vygenerovaný konektorem Service Connector a přidejte modul plug-in pro ověřování bez hesla. Tento připojovací řetězec se odkazuje ve spouštěcím skriptu.

    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}"
    
  2. Ukázková aplikace obsahuje pom.xml soubor, který může vygenerovat soubor WAR. Spuštěním následujícího příkazu sestavte aplikaci.

    mvn clean package -DskipTests
    
  3. Nasaďte war a spouštěcí skript do služby App Service.

    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
    

Testovací ukázková webová aplikace

Spuštěním následujícího příkazu otestujte aplikaci.

export WEBAPP_URL=$(az webapp show \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --query defaultHostName \
    --output tsv)

# 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}/checklist

# Create few items on the list 1
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 1"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 2"}' https://${WEBAPP_URL}/checklist/1/item
curl -X POST -H "Content-Type: application/json" -d '{"description": "item 3"}' https://${WEBAPP_URL}/checklist/1/item

# Get all lists
curl https://${WEBAPP_URL}/checklist

# Get list 1
curl https://${WEBAPP_URL}/checklist/1

Vyčištění prostředků

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:

az group delete --name myResourceGroup

Spuštění tohoto příkazu může trvat přibližně minut.

Další krok

Přečtěte si další informace o spouštění aplikací v Javě na App Service v Linuxu v příručce pro vývojáře.