Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az oktatóanyag bemutatja, hogyan tölthet be titkos kódokat Azure Key Vault egy Spring Boot-alkalmazásban a bizalmas konfigurációs adatok védelme érdekében. Azure Key Vault biztonságos tárterületet biztosít olyan titkos kódokhoz, mint a jelszavak és az adatbázis-kapcsolati sztringek.
Előfeltételek
- Egy Azure előfizetés – ingyenes előfizetés.
- Java Fejlesztői készlet (JDK) 8-os vagy újabb verzió.
- Apache Maven
- Azure parancssori felület
- Egy Key Vault példány. Ha nincs ilyenje, nézze meg a Gyorsútmutató: Kulcstároló létrehozása az Azure portál használatával. Jegyezze fel az Key Vault-példány URI-ját is, mivel szüksége van rá az oktatóanyaghoz tartozó tesztalkalmazáshoz.
- Egy Spring Boot-alkalmazás. Ha még nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrsegítségével. Mindenképpen válassza ki a Maven Project lehetőséget, majd a Dependencies területen adja hozzá a Spring Web, Spring Data JPA és H2 Adatbázis függőségeket, majd válassza Java 8-es vagy újabb verziót.
Fontos
A cikkben ismertetett lépések elvégzéséhez a Spring Boot 2.5-ös vagy újabb verziójára van szükség.
Titkos adat beállítása az Azure Key Vaultban
Ez az oktatóanyag bemutatja, hogyan olvashatja be az adatbázis hitelesítő adatait egy Spring Boot-alkalmazásban Key Vault. A hitelesítő adatok olvasásához a Key Vaultból először el kell tárolnia az adatbázis hitelesítő adatait a Key Vaultban.
Ha az H2-adatbázis URL-címét új titkos adatként szeretné tárolni a Key Vault rendszerben, tekintse meg a Quickstart: Titkos adat beállítása és lekérése az Azure Key Vault rendszerből az Azure portál használatával. Ebben az oktatóanyagban egy titkos kulcsot állít be névvel h2url és értékkel jdbc:h2:~/testdb;user=sa;password=password.
Megjegyzés
A titkos kulcs megadása után biztosítson hozzáférést az alkalmazásnak a Key Vault-hoz a A Key Vault hozzáférési szabályzat hozzárendelése utasításait követve.
Titok beolvasása az Azure Key Vaultból
Miután Key Vault tárolta az adatbázis hitelesítő adatait, a Spring Cloud Azure használatával lekérheti őket.
A Spring Cloud Azure Key Vault Starter modul telepítéséhez adja hozzá a következő függőségeket a pom.xml fájlhoz:
A Spring Cloud Azure Anyagjegyzék (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Megjegyzés
Ha Spring Boot 4.0.x-et használ, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre7.4.0: .Ha a Spring Boot 3.5.x-et használja, állítsa a verziót a
spring-cloud-azure-dependencieskövetkezőre6.5.0: .Ha a Spring Boot 3.1.x-3.5.x verziót használja, mindenképpen állítsa be a verziót
spring-cloud-azure-dependencies-ra/c1.Ha a Spring Boot 2.x-et használja, mindenképpen állítsa be a
spring-cloud-azure-dependenciesverziót4.20.0-re.Ezt az anyagjegyzéket (BOM) a
<dependencyManagement>fájl szakaszában kell konfigurálni. Ez biztosítja, hogy minden Spring Cloud-Azure függőség ugyanazt a verziót használja.Az ebben az anyagjegyzékben használt verzióval kapcsolatos további információkért lásd: Melyik Spring Cloud Azure verziót érdemes használnom.
A Spring Cloud Azure Key Vault Starter összetevő:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
A Spring Cloud Azure számos módszert kínál az Key Vault titkos kulcsainak olvasására. A következő módszereket egymástól függetlenül használhatja, vagy kombinálhatja őket különböző használati esetekhez:
- Az Azure SDK használata a Key Vault-tal.
- A Spring KeyVault
PropertySourcehasználata.
Azure SDK használata a Key Vault könyvtárral
Az Azure SDK a Key Vault számára SecretClient biztosít a titkok kezeléséhez a Key Vaultban.
Az alábbi példakód bemutatja, hogyan lehet lekérni SecretClient a H2-adatbázis hitelesítő adatait Azure Key Vault.
Ha a Key Vault titkos kódjának Azure SDK használatával szeretne beolvasni, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Konfiguráljon egy Key Vault végpontot a application.properties konfigurációs fájlban.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/Injektálja a
SecretClientbabot a Spring-alkalmazásba, és használja agetSecretmetódust egy titkos kód lekéréséhez, ahogyan az alábbi példában látható: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()); } }Tipp
Ebben az oktatóanyagban nincsenek hitelesítési műveletek a konfigurációkban vagy a kódban. Az Azure szolgáltatásokhoz való csatlakozáshoz azonban hitelesítés szükséges. A hitelesítés befejezéséhez Azure Identitást kell használnia. A Spring Cloud Azure
DefaultAzureCredentialhasznál, amelyet az Azure Identitástár biztosít a hitelesítő adatok kódmódosítások nélküli beszerzéséhez.DefaultAzureCredentialtöbb hitelesítési módszert támogat, és meghatározza, hogy melyik metódust használja futásidőben. Ez a megközelítés lehetővé teszi, hogy az alkalmazás különböző hitelesítési módszereket használjon különböző környezetekben (például helyi és éles környezetekben) környezetspecifikus kód implementálása nélkül. További információ: DefaultAzureCredential.A helyi fejlesztési környezetekben a hitelesítés befejezéséhez használhat Azure CLI, Visual Studio Code, PowerShellt vagy más módszereket. További információ: Azure hitelesítés Java fejlesztési környezetekben. Ha Azure üzemeltetési környezetekben szeretné elvégezni a hitelesítést, javasoljuk, hogy használja a felhasználó által hozzárendelt felügyelt identitást. További információ: Mi az Azure-erőforrások felügyelt identitásai?
Indítsa el az alkalmazást. A következő példához hasonló naplók láthatók:
h2url: jdbc:h2:~/testdb;user=sa;password=password
A babot SecretClient saját maga is elkészítheti, de a folyamat bonyolult. A Spring Boot-alkalmazásokban kezelnie kell a tulajdonságokat, meg kell tanulnia a szerkesztői mintát, és regisztrálnia kell az ügyfelet a Spring-alkalmazás környezetében. Az alábbi példakód bemutatja, hogyan hozhat létre egy SecretClient bean-t:
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();
}
}
Az alábbi listában látható néhány ok, amiért ez a kód nem rugalmas vagy kecses:
- A Key Vault végpont kódolt.
- Ha a Spring-környezetből szeretne
@Valuekonfigurációkat lekérni, az application.properties fájlban nem szerepelhetnek IDE-tippek. - Ha mikroszolgáltatási forgatókönyve van, minden projektben duplikálnia kell a kódot. Könnyű hibákat elkövetni, és nehéz konzisztensnek lenni.
Szerencsére a Spring Cloud Azure leegyszerűsíti a bab készítésétSecretClient. A bab manuális létrehozása helyett közvetlenül injektálhatja SecretClient és használhatja a már ismert konfigurációs tulajdonságokat a Key Vault konfigurálásához. További információ: Konfigurációs példák.
A Spring Cloud Azure a következő globális konfigurációkat is biztosítja a különböző forgatókönyvekhez. További információkért lásd: Az Azure Service SDK-k globális konfigurációja a Spring Cloud Azure fejlesztői útmutató című részben.
- Proxybeállítások.
- Újrapróbálkozás beállításai.
- HTTP átviteli ügyfél beállításai.
Különböző Azure felhőkhöz is csatlakozhat. További információ: Kapcsolódás különböző Azure felhőkhöz.
A Spring Key Vault PropertySource használata
Az előző szakaszok bemutatják, hogyan használható SecretClient a CommandLineRunner titkos kód olvasására az alkalmazás elindítása után. A Spring Boot-alkalmazásokban azonban az alkalmazás indítása előtt el kell olvasnia a titkos kulcsokat. Az adatforrás jelszótulajdonságára például az alkalmazás elindítása előtt van szükség. Az előző forgatókönyv nem működik, ha az adatforrásjelszót Key Vault szeretné tárolni, és továbbra is a Spring automatikus konfigurációját használja az adatforrás lekéréséhez.
Ebben az esetben a Spring Cloud Azure biztosítja a Spring környezeti integrációt, hogy az alkalmazáskörnyezet létrehozása előtt betöltse a Key Vault titkokat. A titkos kóddal létrehozhatja és konfigurálhatja a babot a Spring-alkalmazás környezetének inicializálása során. Ez a megközelítés átlátható módja annak, hogy hozzáférhessen a Key Vault titkos kulcsaihoz, és nincs szükség kódmódosításra.
Az alábbi példakód bemutatja, hogyan lehet PropertySource lekérni a H2-adatbázis hitelesítő adatait az adatforrás Azure Key Vault.
Ha le szeretné kérni egy H2-adatbázis URL-címét Key Vault és adatokat szeretne tárolni a H2-adatbázisból a Spring Data JPA használatával, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Adja hozzá a következő Key Vault végpont- és adatforrás-tulajdonságokat a application.properties konfigurációs fájlhoz.
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.H2DialectTipp
A Spring Cloud Azure tulajdonságkonfigurációját a Spring Cloud Azure fejlesztői útmutatókonfigurációs példák szakaszában találja.
Ez a példa egy H2-adatbázist használó egyszerű adatbázis-forgatókönyv. Használjon Azure Database for MySQL vagy Azure Database for PostgreSQL éles környezetben, és tárolja az adatbázis URL-címét, felhasználónevét és jelszavát Azure Key Vault. Ha el szeretné kerülni a jelszót, a jelszó nélküli kapcsolatok jó választás. További információ: A Azure szolgáltatások jelszó nélküli kapcsolatai.
Hozzon létre egy új
TodoJava osztályt. Ez az osztály egy olyan tartománymodell, amely atodoJPA által automatikusan létrehozott táblára van leképezve. Az alábbi kód figyelmen kívül hagyja agettersés asettersmetódusokat.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; }Szerkessze az indítási osztályfájlt a következő tartalom megjelenítéséhez.
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> { }Indítsa el az alkalmazást. Az alkalmazás lekéri a H2-adatbázis URL-címét a Key Vault, majd csatlakozik a H2 adatbázishoz, és adatokat tárol az adatbázisba. A következő példához hasonló naplók láthatók:
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
Üzembe helyezés a Azure Spring Apps
Most, hogy a Spring Boot alkalmazás helyben fut, ideje áthelyezni éles környezetbe. Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások Azure való üzembe helyezését kódmódosítások nélkül. A szolgáltatás kezeli a Spring-alkalmazások infrastruktúráját, hogy a fejlesztők a kódjukra összpontosíthassanak. Azure Spring Apps teljes körű monitorozás és diagnosztika, konfigurációkezelés, szolgáltatásfelderítés, CI/CD-integráció, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Apps való üzembe helyezéséről a A Azure Spring Apps első alkalmazás üzembe helyezéséről szóló cikkben olvashat.