Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, geleneksel kimlik doğrulama yöntemlerinden PostgreSQL için Azure Veritabanı ile daha güvenli, parolasız bağlantılara nasıl geçirilir açıklanmaktadır.
PostgreSQL için Azure Veritabanı'na yönelik uygulama isteklerinin kimliği doğrulanmalıdır. PostgreSQL için Azure Veritabanı, uygulamaların güvenli bir şekilde bağlanması için birkaç farklı yol sağlar. Yollardan biri parolaları kullanmaktır. Ancak, mümkün olduğunda uygulamalarınızda parolasız bağlantılara öncelik vermelisiniz.
Kimlik doğrulama seçeneklerini karşılaştırma
Uygulama PostgreSQL için Azure Veritabanı ile kimlik doğrulaması yaparken, veritabanını bağlamak için bir kullanıcı adı ve parola çifti sağlar. Kimliklerin depolandığı yere bağlı olarak iki kimlik doğrulaması türü vardır: Microsoft Entra kimlik doğrulaması ve PostgreSQL kimlik doğrulaması.
Microsoft Entra kimlik doğrulama
Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veritabanı'na bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetlerini merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.
Kimlik doğrulaması için Microsoft Entra Id kullanmak aşağıdaki avantajları sağlar:
- Azure Hizmetleri genelinde kullanıcıların tekdüzen bir şekilde kimlik doğrulaması.
- Parola ilkelerinin ve parola döndürmenin tek bir yerde yönetimi.
- Microsoft Entra Id tarafından desteklenen ve parolaları depolama gereksinimini ortadan kaldırabilen birden çok kimlik doğrulaması biçimi.
- Müşteriler dış (Microsoft Entra Id) gruplarını kullanarak veritabanı izinlerini yönetebilir.
- Microsoft Entra kimlik doğrulaması, kimlikleri veritabanı düzeyinde doğrulamak için PostgreSQL veritabanı kullanıcılarını kullanır.
- PostgreSQL için Azure Veritabanı'na bağlanan uygulamalar için belirteç tabanlı kimlik doğrulaması desteği.
PostgreSQL kimlik doğrulaması
PostgreSQL'de hesap oluşturabilirsiniz. Hesaplar için kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgileri tabloda depolanır user . Bu parolalar PostgreSQL'de depolandığından, parolaların döndürmesini kendiniz yönetmeniz gerekir.
PostgreSQL için Azure Veritabanı'na parolalarla bağlanmak mümkün olsa da, bunları dikkatli kullanmanız gerekir. Parolaları güvenli olmayan bir konumda asla kullanıma sunmamak için dikkatli olmanız gerekir. Parolalara erişim kazanan herkes kimlik doğrulaması yapabilir. Örneğin, bir bağlantı dizesi yanlışlıkla kaynak denetimine iade edilirse, güvenli olmayan bir e-postayla gönderilirse, yanlış sohbete yapıştırılırsa veya izni olmayan biri tarafından görüntülenirse kötü amaçlı bir kullanıcının uygulamaya erişme riski vardır. Bunun yerine, uygulamanızı parolasız bağlantıları kullanacak şekilde güncelleştirmeyi göz önünde bulundurun.
Parolasız bağlantılara giriş
Parolasız bağlantıyla, uygulama kodunda, yapılandırma dosyalarında veya ortam değişkenlerinde kimlik bilgilerini depolamadan Azure hizmetlerine bağlanabilirsiniz.
Birçok Azure hizmeti, örneğin Azure Yönetilen Kimliği aracılığıyla parolasız bağlantıları destekler. Bu teknikler, Azure Identity istemci kitaplıklarından DefaultAzureCredential kullanarak uygulayabileceğiniz güçlü güvenlik özellikleri sağlar. Bu öğreticide, bağlantı dizeleri gibi alternatifler yerine mevcut bir uygulamayı kullanmak DefaultAzureCredential üzere güncelleştirmeyi öğreneceksiniz.
DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve hangilerinin çalışma zamanında kullanılması gerektiğini otomatik olarak belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel geliştirme ve üretim) farklı kimlik doğrulama yöntemleri kullanmasını sağlar.
Kimlik bilgilerini arama sırası ve konumları DefaultAzureCredentialAzure Kimlik kitaplığına genel bakış sayfasında bulabilirsiniz. Örneğin, yerel olarak çalışırken genellikle DefaultAzureCredential geliştiricinin Visual Studio'da oturum açmak için kullandığı hesabı kullanarak kimlik doğrulaması yapar. Uygulama Azure'a dağıtıldığında, DefaultAzureCredentialotomatik olarak yönetilen kimlik kullanmaya geçer. Bu geçiş için kod değişikliği gerekmez.
Bağlantıların parolasız olduğundan emin olmak için hem yerel geliştirmeyi hem de üretim ortamını dikkate almanız gerekir. Her iki yerde de bağlantı dizesi gerekiyorsa uygulama parolasız değildir.
Yerel geliştirme ortamınızda, Visual Studio Code veya IntelliJ için Azure CLI, Azure PowerShell, Visual Studio veya Azure eklentileriyle kimlik doğrulaması yapabilirsiniz. Bu durumda, özellikleri yapılandırmak yerine uygulamanızda bu kimlik bilgilerini kullanabilirsiniz.
Uygulamaları sanal makine gibi bir Azure barındırma ortamına dağıttığınızda, bu ortamda yönetilen kimlik atayabilirsiniz. Ardından, Azure hizmetlerine bağlanmak için kimlik bilgileri sağlamanız gerekmez.
Uyarı
Yönetilen kimlik, bir uygulamayı veya hizmeti temsil eden bir güvenlik kimliği sağlar. Kimlik Azure platformu tarafından yönetilir ve gizli dizileri sağlamanızı veya döndürmenizi gerektirmez. Yönetilen kimlikler hakkında daha fazla bilgiyi genel bakış belgelerinde okuyabilirsiniz.
Var olan bir uygulamayı parolasız bağlantıları kullanacak şekilde geçirme
Aşağıdaki adımlarda, mevcut bir uygulamanın parola tabanlı bir çözüm yerine parolasız bağlantıları kullanacak şekilde nasıl geçirilir açıklanmaktadır.
0) Çalışma ortamını hazırlama
İlk olarak, bazı ortam değişkenlerini ayarlamak için aşağıdaki komutu kullanın.
export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
Yer tutucuları, bu makale boyunca kullanılan aşağıdaki değerlerle değiştirin:
-
<YOUR_RESOURCE_GROUP>: Kaynaklarınızın içinde olduğu kaynak grubunun adı. -
<YOUR_DATABASE_SERVER_NAME>: PostgreSQL sunucunuzun adı. Azure genelinde benzersiz olmalıdır. -
<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: Microsoft Entra yönetici olmayan kullanıcınızın görünen adı. Adın Microsoft Entra kiracınızda geçerli bir kullanıcı olduğundan emin olun. -
<YOUR_LOCAL_IP_ADDRESS>: Spring Boot uygulamanızı çalıştırabileceğiniz yerel bilgisayarınızın IP adresi. Bunu bulmanın kullanışlı yollarından biri whatismyip.akamai.com açmaktır.
1) PostgreSQL için Azure Veritabanı'nı yapılandırma
1.1) Microsoft Entra Id tabanlı kimlik doğrulamasını etkinleştirme
PostgreSQL için Azure Veritabanı ile Microsoft Entra Id erişimini kullanmak için önce Microsoft Entra yönetici kullanıcısını ayarlamanız gerekir. Yalnızca bir Microsoft Entra Admin kullanıcısı, Microsoft Entra Id tabanlı kimlik doğrulaması için kullanıcı oluşturabilir/etkinleştirebilir.
Sunucuyu oluşturduktan sonra bir Microsoft Entra yöneticisi ayarlamak için PostgreSQL için Azure Veritabanı - Esnek Sunucu'da Microsoft Entra rollerini yönetme makalesindeki adımları izleyin.
Uyarı
PostgreSQL Esnek Sunucusu birden çok Microsoft Entra yöneticisi oluşturabilir.
2) Yerel geliştirme için PostgreSQL için Azure Veritabanı'nı yapılandırma
2.1) Yerel IP için güvenlik duvarı kuralı yapılandırma
PostgreSQL için Azure Veritabanı örnekleri varsayılan olarak güvenlidir. Gelen bağlantıya izin vermeyen bir güvenlik duvarı vardır. Veritabanınızı kullanabilmek için yerel IP adresinin veritabanı sunucusuna erişmesine izin veren bir güvenlik duvarı kuralı eklemeniz gerekir.
Bu makalenin başında yerel IP adresinizi yapılandırdığınızdan, aşağıdaki komutu çalıştırarak sunucunun güvenlik duvarını açabilirsiniz:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS \
--output tsv
PostgreSQL sunucunuza bir Windows bilgisayarda Linux için Windows Alt Sistemi'nden (WSL) bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.
WSL'de aşağıdaki komutu çalıştırarak konak makinenizin IP adresini alın:
cat /etc/resolv.conf
teriminden nameserversonra IP adresini kopyalayın ve WSL IP Adresi için bir ortam değişkeni ayarlamak üzere aşağıdaki komutu kullanın:
export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Ardından aşağıdaki komutu kullanarak sunucunun güvenlik duvarını WSL tabanlı uygulamanızda açın:
az postgres flexible-server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME \
--rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
2.2) PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme
Ardından yönetici olmayan bir Microsoft Entra kullanıcısı oluşturun ve veritabanındaki $AZ_DATABASE_NAME tüm izinleri ona verin. Veritabanı adını $AZ_DATABASE_NAME gereksinimlerinize uyacak şekilde değiştirebilirsiniz.
Yönetici olmayan kullanıcı oluşturmak için create_ad_user_local.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve yerel olarak kaydedin:
cat << EOF > create_ad_user_local.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF
Ardından aşağıdaki komutu kullanarak SQL betiğini çalıştırarak Microsoft Entra yönetici olmayan kullanıcıyı oluşturun:
psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_local.sql
Şimdi geçici SQL betik dosyasını kaldırmak için aşağıdaki komutu kullanın:
rm create_ad_user_local.sql
Uyarı
PostgreSQL için Azure Veritabanı'nda kullanıcı oluşturma bölümünde PostgreSQL kullanıcıları oluşturma hakkında daha ayrıntılı bilgileri okuyabilirsiniz.
3) Parolasız bağlantıları kullanmak için oturum açın ve uygulama kodunu geçirin
Yerel geliştirme için PostgreSQL'inizde rolü atadığınız Microsoft Entra hesabıyla kimliğinizin doğrulanmış olduğundan emin olun. Azure CLI, Visual Studio, Azure PowerShell veya IntelliJ gibi diğer araçlar aracılığıyla kimlik doğrulaması yapabilirsiniz.
Aşağıdaki komutu kullanarak Azure CLI aracılığıyla Azure'da oturum açın:
az login
Ardından, aşağıdaki adımları kullanarak kodunuzu parolasız bağlantıları kullanacak şekilde güncelleştirin. Kavramsal olarak benzer olsa da, her dil farklı uygulama ayrıntıları kullanır.
Projenizin içine pakete aşağıdaki başvuruyu
azure-identity-extensionsekleyin. Bu kitaplık, parolasız bağlantılar uygulamak için gereken tüm varlıkları içerir.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity-extensions</artifactId> <version>1.0.0</version> </dependency>JDBC URL'sinde Azure PostgreSQL kimlik doğrulama eklentisini etkinleştirin. Kodunuzda postgreSQL için Azure Veritabanı'na bağlanmak için şu anda bir
java.sql.Connectionoluşturan konumları belirleyin. application.properties dosyanızda veuserdeğerlerini aşağıdaki değerlerle eşleşecek şekilde güncelleştirinurl:url=jdbc:postgresql://$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com:5432/$AZ_DATABASE_NAME?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin user=$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAMEve iki$AZ_DATABASE_SERVER_NAMEdeğişkenini bu makalenin başında yapılandırdığınız değerle değiştirin.
Uygulamayı yerel olarak çalıştırma
Bu kod değişikliklerini yaptıktan sonra uygulamanızı yerel olarak çalıştırın. Azure CLI, Visual Studio veya IntelliJ gibi uyumlu bir IDE veya komut satırı aracında oturum açtıysanız yeni yapılandırma yerel kimlik bilgilerinizi almalıdır. Azure'da yerel geliştirici kullanıcınıza atadığınız roller, uygulamanızın Azure hizmetine yerel olarak bağlanmasına olanak tanır.
4) Azure barındırma ortamını yapılandırma
Uygulamanız parolasız bağlantıları kullanacak şekilde yapılandırıldıktan ve yerel olarak çalıştırıldıktan sonra, Azure'a dağıtıldıktan sonra aynı kod Azure hizmetlerinde kimlik doğrulaması yapabilir. Örneğin, yönetilen kimliği atanmış bir Azure App Service örneğine dağıtılan bir uygulama Azure Depolama'ya bağlanabilir.
Bu bölümde, uygulamanızın Azure barındırma ortamında parolasız bir şekilde çalışmasını sağlamak için iki adım yürüteceksiniz:
- Azure barındırma ortamınız için yönetilen kimliği atayın.
- Yönetilen kimliğe roller atayın.
Uyarı
Azure, barındırma hizmetinizi PostgreSQL'e bağlamanıza yardımcı olabilecek Hizmet Bağlayıcısı da sağlar. Barındırma ortamınızı yapılandırmak için Hizmet Bağlayıcısı ile yönetilen kimliğinize rol atama adımını atlayabilirsiniz çünkü Hizmet Bağlayıcısı bunu sizin yerinize yapar. Aşağıdaki bölümde Azure barındırma ortamınızı iki şekilde yapılandırma adımları açıklanmaktadır: Biri Service Connector aracılığıyla, diğeri ise her barındırma ortamını doğrudan yapılandırarak.
Önemli
Hizmet Bağlayıcısı komutları Için Azure CLI 2.41.0 veya üzeri gerekir.
Azure portalını kullanarak yönetilen kimliği atama
Aşağıdaki adımlarda, çeşitli web barındırma hizmetleri için sistem tarafından atanan yönetilen kimliğin nasıl atandığı gösterilmektedir. Yönetilen kimlik, daha önce ayarladığınız uygulama yapılandırmalarını kullanarak diğer Azure Hizmetlerine güvenli bir şekilde bağlanabilir.
Azure App Service örneğinizin ana genel bakış sayfasında gezinti bölmesinden Kimlik'i seçin.
Sistem tarafından atanan sekmesinde Durum alanını açık olarak ayarladığınızdan emin olun. Sistem tarafından atanan kimlik, Azure tarafından şirket içinde yönetilir ve yönetim görevlerini sizin için gerçekleştirir. Kimliğin ayrıntıları ve kimlikleri kodunuzda hiçbir zaman gösterilmez.
Azure CLI'yı kullanarak azure barındırma ortamında yönetilen kimlik de atayabilirsiniz.
Aşağıdaki örnekte gösterildiği gibi az webapp identity assign komutuyla Azure App Service örneğine yönetilen kimlik atayabilirsiniz:
export AZ_MI_OBJECT_ID=$(az webapp identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--name <service-instance-name> \
--query principalId \
--output tsv)
Yönetilen kimliğe rol atama
Ardından, PostgreSQL örneğine erişmek için atadığınız yönetilen kimliğe izin verin.
Hizmetlerinizi Service Connector kullanarak bağladıysanız, önceki adımın komutları rolü zaten atadığından bu adımı atlayabilirsiniz.
Uygulamayı test edin
Uygulamayı barındırma ortamına dağıtmadan önce, uygulama yönetilen kimlik için oluşturulan kullanıcıyı kullanarak PostgreSQL'e bağlanacağından kodda bir değişiklik daha yapmanız gerekir.
Kodunuzu yönetilen kimlik için oluşturulan kullanıcıyı kullanacak şekilde güncelleştirin:
Uyarı
Service Connector komutunu kullandıysanız bu adımı atlayın.
properties.put("user", "$AZ_POSTGRESQL_AD_MI_USERNAME");
Bu kod değişikliklerini yaptıktan sonra uygulamayı derleyebilir ve yeniden dağıtabilirsiniz. Ardından tarayıcıda barındırılan uygulamanıza göz atın. Uygulamanızın PostgreSQL veritabanına başarıyla bağlanabilmesi gerekir. Rol atamalarının Azure ortamınızda yayılmasının birkaç dakika sürebileceğini unutmayın. Uygulamanız artık geliştiricilerin uygulamadaki gizli dizileri yönetmek zorunda kalmadan hem yerel hem de üretim ortamında çalışacak şekilde yapılandırılmıştır.
Sonraki Adımlar
Bu öğreticide, bir uygulamayı parolasız bağlantılara geçirmeyi öğrendiniz.
Bu makalede ele alınan kavramları daha ayrıntılı incelemek için aşağıdaki kaynakları okuyabilirsiniz: