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 öğreticide, hassas yapılandırma verilerinin güvenliğini sağlamak ve Key Vault'tan yapılandırma özelliklerini almak için Spring Boot uygulamalarında Key Vault'un nasıl kullanılacağı gösterilmektedir. Key Vault, parolalar ve veritabanı bağlantı dizesi gibi genel gizli dizilerin güvenli bir şekilde depolanmasını sağlar.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun.
- Java Development Kit (JDK) sürüm 8 veya üzeri.
- Apache Maven
- Azure CLI
- Key Vault örneği. Anahtarınız yoksa Hızlı Başlangıç: Azure portalını kullanarak anahtar kasası oluşturma bölümüne bakın. Ayrıca, bu öğretici için test uygulamasına ihtiyacınız olduğu için Key Vault örneğinin URI'sini not edin.
- Spring Boot uygulaması. Eğer bir Maven projeniz yoksa, Spring Initializr ile bir Maven projesi oluşturun. Maven Projesi'ni seçtiğinizden emin olun ve Bağımlılıklar'ın altında Spring Web, Spring Data JPA ve H2 Veritabanı bağımlılıklarını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.
Önemli
Bu makaledeki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.
Azure Key Vault'a sır ekleme
Bu öğreticide, Spring Boot uygulamasında Key Vault'tan veritabanı kimlik bilgilerinin nasıl okunduğu açıklanmaktadır. Key Vault'tan kimlik bilgilerini okumak için önce veritabanı kimlik bilgilerini Key Vault'ta depolamanız gerekir.
H2 veritabanının URL'sini Key Vault'ta yeni bir gizli dizi olarak depolamak için bkz . Hızlı Başlangıç: Azure portalını kullanarak Azure Key Vault'tan gizli dizi ayarlama ve alma. Bu öğreticide, adı h2url ve değeri jdbc:h2:~/testdb;user=sa;password=password olacak olan bir gizli bilgi ayarlayacaksınız.
Not
Gizli bilgiyi ayarladıktan sonra, uygulamanıza Key Vault erişimi vermek için Assign a Key Vault access policy yönergelerini izleyin.
Azure Key Vault'tan gizli bilgi oku
Artık veritabanı kimlik bilgileri Key Vault'ta depolandığına göre Spring Cloud Azure ile bunları alabilirsiniz.
Spring Cloud Azure Key Vault Starter modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
Spring Cloud Azure Ürün Reçetesi (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 3.0.x-3.4.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Ürün Reçetesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz. Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.
Spring Cloud Azure Key Vault Starter artifaktı:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Spring Cloud Azure, Key Vault'tan gizli dizileri okumak için çeşitli yöntemlere sahiptir. Aşağıdaki yöntemleri bağımsız olarak kullanabilir veya farklı kullanım örnekleri için birleştirebilirsiniz:
- Key Vault için Azure SDK'sını kullanın.
- Spring KeyVault
PropertySourcekullanın.
Key Vault için Azure SDK'sını kullanma
Key Vault için Azure SDK, Key Vault'taki sırları SecretClient yönetmeyi sağlar.
Aşağıdaki kod örneği, Azure Key Vault'tan H2 veritabanı kimlik bilgilerini almak için nasıl kullanacağınızı SecretClient gösterir.
Key Vault'tan Azure SDK kullanarak gizli dizi okumak için aşağıdaki adımları izleyerek uygulamayı yapılandırın:
application.properties yapılandırma dosyasında bir Key Vault uç noktası yapılandırın.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/Spring uygulamanızda
SecretClientnesnesini ekleyin ve bir gizliyi almak içingetSecretyöntemini, aşağıdaki örneklerde gösterildiği gibi, kullanın.import com.azure.security.keyvault.secrets.SecretClient; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SecretClientApplication implements CommandLineRunner { // Spring Cloud Azure will automatically inject SecretClient in your ApplicationContext. private final SecretClient secretClient; public SecretClientApplication(SecretClient secretClient) { this.secretClient = secretClient; } public static void main(String[] args) { SpringApplication.run(SecretClientApplication.class, args); } @Override public void run(String... args) { System.out.println("h2url: " + secretClient.getSecret("h2url").getValue()); } }İpucu
Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, azure kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı öğesini kullanır
DefaultAzureCredential.DefaultAzureCredentialbirden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz . DefaultAzureCredential.Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz . Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?
Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler görürsünüz:
h2url: jdbc:h2:~/testdb;user=sa;password=password
Çekirdeği kendiniz oluşturabilirsiniz SecretClient , ancak işlem karmaşıktır. Spring Boot uygulamalarında özellikleri yönetmeniz, oluşturucu desenini öğrenmeniz ve istemciyi Spring uygulama bağlamınıza kaydetmeniz gerekir. Aşağıdaki kod örneği, bir SecretClient fasulyeyi nasıl oluşturabileceğinizi gösterir:
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SecretClientConfiguration {
@Bean
public SecretClient createSecretClient() {
return new SecretClientBuilder()
.vaultUrl("https://<your-key-vault-url>.vault.azure.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
}
}
Aşağıdaki listede, bu kodun esnek veya düzgün olmamasının nedenlerinden bazıları gösterilmektedir.
- Key Vault uç noktası sabit kodlanmış.
- Spring ortamından yapılandırmaları almak için kullanıyorsanız
@Value, application.properties dosyanızda IDE ipuçlarına sahip olamazsınız. - Mikro hizmet senaryonuz varsa, kodun her projede çoğaltılması gerekir ve hata yapmak kolaydır ve tutarlı olması zordur.
Neyse ki, Spring Cloud Azure ile bean'i kendiniz oluşturmanız gerekmiyor. Bunun yerine, SecretClient'yi doğrudan ekleyebilir ve Key Vault'u yapılandırmak için zaten aşina olduğunuz yapılandırma özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz . Yapılandırma örnekleri.
Spring Cloud Azure, farklı senaryolar için aşağıdaki genel yapılandırmaları da sağlar. Daha fazla bilgi için Spring Cloud Azure geliştirici kılavuzunun Azure Hizmet SDK'ları için genel yapılandırma bölümüne bakın.
- Vekil sunucu seçenekleri.
- Yeniden deneme seçenekleri.
- HTTP aktarım istemcisi seçenekleri.
Ayrıca farklı Azure bulutlarına da bağlanabilirsiniz. Daha fazla bilgi için bkz . Farklı Azure bulutlarına bağlanma.
Spring Key Vault PropertySource'u kullanma
Önceki bölümlerde, uygulama başlatıldıktan sonra sırları okumak için SecretClient’yi CommandLineRunner içinde nasıl kullanacağınız gösterildi. Ancak Spring Boot uygulamalarında, uygulama başlamadan önce gizli bilgileri okumak gerekir. Örneğin, uygulama başlamadan önce veri kaynağı parola özelliği gereklidir. Önceki senaryo, veri kaynağı parolasını Key Vault'ta depolamak ve yine de spring otomatik yapılandırmasını kullanarak veri kaynağı almak istiyorsanız çalışmaz.
Bu durumda Spring Cloud Azure, uygulama bağlamını oluşturmadan önce Key Vault'tan gizli dizileri yüklemek için Spring ortamı tümleştirmesi sağlar. Spring uygulama bağlamı başlatılırken bean'i oluşturmak ve yapılandırmak için gizli anahtarı kullanabilirsiniz. Bu yaklaşım, Key Vault'tan gizli dizilere erişmeniz için saydam bir yoldur ve kod değişikliği gerekmez.
Aşağıdaki kod örneği, Azure Key Vault'tan veri kaynağını oluşturmak üzere H2 veritabanı kimlik bilgilerini almak için nasıl kullanacağınızı PropertySource gösterir.
Key Vault'tan bir H2 veritabanının URL'sini almak ve Spring Data JPA kullanarak H2 veritabanından veri depolamak için aşağıdaki adımları izleyerek uygulamayı yapılandırın:
Aşağıdaki Key Vault uç noktasını ve veri kaynağı özelliklerini application.properties yapılandırma dosyasına ekleyin.
logging.level.org.hibernate.SQL=DEBUG spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=https://<your-keyvault-name>.vault.azure.net/ spring.datasource.url=${h2url} spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.database-platform=org.hibernate.dialect.H2Dialectİpucu
Spring Cloud Azure özellik yapılandırması örnekleri için Spring Cloud Azure geliştirici kılavuzunun Yapılandırma örnekleri bölümüne bakın.
Bu örnek, H2 veritabanı kullanan basit bir veritabanı senaryosudur. Üretim ortamında MySQL için Azure Veritabanı veya PostgreSQL için Azure Veritabanı kullanmanızı ve Azure Key Vault'ta veritabanı URL'sini, kullanıcı adını ve parolayı depolamanızı öneririz. Paroladan kaçınmak istiyorsanız parolasız bağlantılar iyi bir seçimdir. Daha fazla bilgi için bkz . Azure hizmetleri için parolasız bağlantılar.
Yeni
Todobir Java sınıfı oluşturun. Bu sınıf, JPA tarafından otomatik olarak oluşturulacak tabloyatodoeşlenen bir etki alanı modelidir. Aşağıdaki kodgettersvesettersyöntemlerini yoksayar.import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @Entity public class Todo { public Todo() { } public Todo(String description, String details, boolean done) { this.description = description; this.details = details; this.done = done; } @Id @GeneratedValue private Long id; private String description; private String details; private boolean done; }Aşağıdaki içeriği göstermek için başlangıç sınıfı dosyasını düzenleyin.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.JpaRepository; import java.util.stream.Stream; @SpringBootApplication public class KeyvaultApplication { public static void main(String[] args) { SpringApplication.run(KeyvaultApplication.class, args); } @Bean ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) { return event->repository .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up " + "correctly!", true)).toList()) .forEach(System.out::println); } } interface TodoRepository extends JpaRepository<Todo, Long> { }Uygulamayı başlatın. Uygulama, H2 veritabanının URL'sini Key Vault'tan alır, ardından H2 veritabanına bağlanır ve verileri veritabanına depolar. Aşağıdaki örneğe benzer günlükler görürsünüz:
2023-01-13 15:51:35.498 DEBUG 5616 --- [main] org.hibernate.SQL: insert into todo (description, details, done, id) values (?, ?, ?, ?) com.contoso.keyvault.Todo@1f
Azure Spring Apps'e dağıtım yapma
Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps , kod değişikliği yapmadan Spring Boot uygulamalarını Azure'a dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps'e dağıtmak için bkz . İlk uygulamanızı Azure Spring Apps'e dağıtma.