Kurz: Připojení k databázi PostgreSQL ze služby Java Tomcat App Service bez tajných kódů pomocí spravované identity

Azure App Service poskytuje vysoce škálovatelnou službu pro hostování webů s automatickými opravami v Azure. Poskytuje také managed identity pro vaši aplikaci, což je řešení pro zabezpečení přístupu k Azure Database for PostgreSQL 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 PostgreSQL.
  • Nasaďte ukázkovou aplikaci do Azure App Service na Tomcat pomocí balíčku WAR.
  • Nakonfigurujte webovou aplikaci Tomcat tak, aby používala ověřování Microsoft Entra s databází PostgreSQL.
  • Připojte se k databázi PostgreSQL pomocí spravované identity pomocí konektoru služby.

Pokud účet Azure nemáte, vytvořte si účet free 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/Tomcat/

Vytvořte Azure Database for PostgreSQL

Podle těchto kroků vytvořte ve svém předplatném Azure Database for Postgres. Aplikace Tomcat se připojí k této databázi a ukládá její data při spuštění a uchovává 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 a poznamenejte si název skupiny prostředků.

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

    export POSTGRESQL_ADMIN_USER=azureuser
    # PostgreSQL admin access rights won't be used because Azure AD authentication is leveraged to administer the database.
    export POSTGRESQL_ADMIN_PASSWORD=<admin-password>
    export POSTGRESQL_HOST=<postgresql-host-name>
    
    # Create a PostgreSQL server.
    az postgres flexible-server create \
        --resource-group $RESOURCE_GROUP \
        --name $POSTGRESQL_HOST \
        --location $LOCATION \
        --admin-user $POSTGRESQL_ADMIN_USER \
        --admin-password $POSTGRESQL_ADMIN_PASSWORD \
        --public-access 0.0.0.0 \
        --sku-name Standard_D2s_v3
    
  4. Vytvořte databázi pro aplikaci.

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

Nasazení aplikace do služby App Service

Pomocí těchto kroků sestavte soubor WAR a nasaďte ho do Azure App Service na Tomcat pomocí balíčku WAR.

  1. Ukázková aplikace obsahuje pom.xml soubor, který může vygenerovat soubor WAR. Aplikaci sestavíte spuštěním následujícího příkazu.

    mvn clean package -f pom.xml
    
  2. Vytvořte prostředek Azure App Service na Linuxu s použitím Tomcat 9.0.

    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 B1 \
        --is-linux
    
    # Create an App Service resource.
    az webapp create \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --plan $APPSERVICE_PLAN \
        --runtime "TOMCAT:10.0-java11"
    
  3. Nasaďte balíček WAR do služby App Service.

    az webapp deploy \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
        --src-path target/app.war \
        --type war
    

Připojte databázi Postgres s řešením pro identitní konektivitu

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

Nainstalujte rozšíření konektoru Service Connector bez hesla pro Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Pak připojte aplikaci k databázi Postgres 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 postgres-flexible \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --target-resource-group $RESOURCE_GROUP \
    --server $POSTGRESQL_HOST \
    --database $DATABASE_NAME \
    --system-identity \
    --client-type java

Tento příkaz vytvoří připojení mezi vaší webovou aplikací a serverem PostgreSQL a spravuje ověřování prostřednictvím spravované identity přiřazené systémem.

Dále aktualizujte nastavení aplikace a přidejte do connection string modul plug-in.

export AZURE_POSTGRESQL_CONNECTIONSTRING=$(\
    az webapp config appsettings list \
        --resource-group $RESOURCE_GROUP \
        --name $APPSERVICE_NAME \
    | jq -c -r '.[] \
    | select ( .name == "AZURE_POSTGRESQL_CONNECTIONSTRING" ) \
    | .value')

az webapp config appsettings set \
    --resource-group $RESOURCE_GROUP \
    --name $APPSERVICE_NAME \
    --settings 'CATALINA_OPTS=-DdbUrl="'"${AZURE_POSTGRESQL_CONNECTIONSTRING}"'&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin"'

Otestování ukázkové webové aplikace

Otestujte aplikaci spuštěním následujícího příkazu.

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 v budoucnu tyto prostředky nepotřebujete, odstraňte skupinu prostředků spuštěním následujícího příkazu v Cloud Shell:

az group delete --name myResourceGroup

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

Další kroky

Další informace o spouštění aplikací Java na App Service on Linux najdete v příručce pro vývojáře.

Zjistěte, jak zabezpečit aplikaci pomocí vlastní domény a certifikátu.