Eğitim: Yönetilen kimlik kullanarak gizli bilgiler olmadan Java Tomcat App Service'ten PostgreSQL veritabanına bağlanma

Yüksek oranda ölçeklenebilir, otomatik güncellemeli bir web barındırma hizmeti, Azure App Service tarafından Azure'da sağlanır. Ayrıca uygulamanız için Azure Database for PostgreSQL ve diğer Azure hizmetlerine erişimi güvenli hale getirmek için anahtar teslimi bir çözüm olan managed identity sağlar. App Service'teki yönetilen kimlikler, uygulamanızdaki ortam değişkenlerindeki kimlik bilgileri gibi gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir. Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • PostgreSQL veritabanı oluşturun.
  • WAR paketlemesini kullanarak Tomcat'te Azure App Service için örnek uygulamayı dağıtın.
  • PostgreSQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanmak için bir Tomcat web uygulaması yapılandırın.
  • Hizmet Bağlayıcısı'nı kullanarak Yönetilen Kimlik ile Postgre SQL Veritabanı'ye bağlanın.

Azure hesabınız yoksa başlamadan önce free hesabı oluşturun.

Önkoşullar

Örnek uygulamayı kopyalama ve depoyu hazırlama

Örnek depoyu kopyalamak ve örnek uygulama ortamını ayarlamak için terminalinizde aşağıdaki komutları çalıştırın.

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

Azure Database for PostgreSQL oluşturun

Aboneliğinizde Postgres için Azure Veritabanı oluşturmak için bu adımları izleyin. Tomcat uygulaması bu veritabanına bağlanır ve çalıştırırken verilerini depolar ve uygulamayı nerede çalıştırdığınızdan bağımsız olarak uygulama durumunu kalıcı hale getirmektedir.

  1. Azure CLI içinde oturum açın ve oturum açma kimlik bilgilerinize birden fazla abonelik bağlıysa, aboneliğinizi isteğe bağlı olarak seçin.

    az login
    az account set --subscription <subscription-ID>
    
  2. Kaynak grubu adını not ederek bir Azure Kaynak Grubu oluşturun.

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=eastus
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. bir Azure Database for PostgreSQL sunucusu oluşturun. Sunucu bir yönetici hesabıyla oluşturulur, ancak yönetim görevlerini gerçekleştirmek için Microsoft Entra yönetici hesabını kullanacağımız için kullanılmaz.

    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. Uygulama için bir veritabanı oluşturun.

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

Uygulamayı App Service'e dağıtma

War dosyası oluşturmak ve WAR paketi kullanarak Tomcat'te Azure App Service dağıtmak için bu adımları izleyin.

  1. Örnek uygulama WAR dosyasını oluşturabilen bir pom.xml dosyası içerir. Uygulamayı oluşturmak için aşağıdaki komutu çalıştırın.

    mvn clean package -f pom.xml
    
  2. Tomcat 9.0 kullanarak Linux üzerinde bir Azure App Service kaynağı oluşturun.

    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. WAR paketini App Service'e dağıtın.

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

Postgres veritabanını kimlik bağlantısıyla bağlama

Ardından, Service Connector'ı kullanarak veritabanını bağlayın.

Azure CLI için Hizmet Bağlayıcısı parolasız uzantısını yükleyin:

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

Ardından, Service Connector'ı kullanarak uygulamanızı sistem tarafından atanan yönetilen kimlikle postgres veritabanına bağlayın.

Bu bağlantıyı kurmak için az webapp connection create komutunu çalıştırın.

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

Bu komut, web uygulamanızla PostgreSQL sunucunuz arasında bir bağlantı oluşturur ve sistem tarafından atanan yönetilen kimlik aracılığıyla kimlik doğrulamasını yönetir.

Ardından Uygulama Ayarları'nı güncelleyin ve connection string'e eklentiyi ekleyin.

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"'

Örnek web uygulamasını test etme

Aşağıdaki komutu çalıştırarak uygulamayı test edin.

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

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Gelecekte bu kaynaklara ihtiyaç duymayı beklemiyorsanız, Cloud Shell aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name myResourceGroup

Bu komutun çalıştırılması bir dakika sürebilir.

Sonraki adımlar

Geliştirici kılavuzunda App Service on Linux üzerinde Java uygulamaları çalıştırma hakkında daha fazla bilgi edinin.

App Service Linux geliştirme kılavuzunda Java

Özel bir etki alanı ve sertifikayla uygulamanızın güvenliğini sağlamayı öğrenin.