Aracılığıyla paylaş


Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan Java Tomcat App Service'ten Postgre SQL Veritabanı'ye bağlanma

Azure Uygulaması Hizmeti, Azure'da yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmeti sağlar. Ayrıca uygulamanız için yönetilen bir kimlik sağlar ve bu, PostgreSQL için Azure Veritabanı ve diğer Azure hizmetlerine erişimin güvenliğini sağlamaya yönelik anahtar teslimi bir çözümdür. 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 örnek uygulamayı Tomcat'te Azure Uygulaması Hizmeti'ne dağıtın.
  • Postgre SQL 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 aboneliğiniz yoksa başlamadan önce birücretsiz Azure 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/

PostgreSQL için Azure Veritabanı oluşturma

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'da oturum açın ve oturum açma kimlik bilgilerinize bağlı birden fazla aboneliğiniz varsa aboneliğinizi isteğe bağlı olarak ayarlayın.

    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. PostgreSQL için Azure Veritabanı sunucusu oluşturma. 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 Uygulaması Hizmetine dağıtmak için bu adımları izleyin.

  1. Örnek uygulama WAR dosyasını oluşturabilen bir pom.xml dosyası içerir. Uygulamayı derlemek 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 Uygulaması Hizmeti 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üncelleştirin ve bağlantı dizesi eklenti 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

Uygulamayı test etmek için aşağıdaki komutu çalıştırın.

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. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de 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 java uygulamalarını Linux üzerinde App Service çalıştırma hakkında daha fazla bilgi edinin.

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