Titkos kód betöltése az Azure Key Vaultból Spring Boot-alkalmazásban
Ez az oktatóanyag bemutatja, hogyan használhatja a Key Vaultot a Spring Boot-alkalmazásokban a bizalmas konfigurációs adatok védelmére és a konfigurációs tulajdonságok Key Vaultból való lekérésére. A Key Vault általános titkos kulcsok, például jelszavak és adatbázis-kapcsolati sztring biztonságos tárolását biztosítja.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen.
- A Java Development Kit (JDK) 8- vagy újabb verziója.
- Apache Maven
- Azure CLI
- Key Vault-példány. Ha nincs ilyenje, olvassa el a gyorsútmutatót: Kulcstartó létrehozása az Azure Portal használatával. Jegyezze fel a 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 nem rendelkezik ilyennel, hozzon létre egy Maven-projektet a Spring Initializrrel. Mindenképpen válassza a Maven Projectet, és a Függőségek területen adja hozzá a Spring Web, a Spring Data JPA és a H2 Database függőségeit, majd válassza a Java 8-es vagy újabb verziójá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 kulcs beállítása az Azure Key Vaulthoz
Ez az oktatóanyag bemutatja, hogyan olvashatja be az adatbázis hitelesítő adatait a Key Vaultból egy Spring Boot-alkalmazásban. A Key Vault hitelesítő adatainak olvasásához először az adatbázis hitelesítő adatait kell tárolnia a Key Vaultban.
Ha egy H2-adatbázis URL-címét új titkos kódként szeretné tárolni a Key Vaultban, olvassa el a rövid útmutatót: Titkos kulcs beállítása és lekérése az Azure Key Vaultból az Azure Portal használatával. Ebben az oktatóanyagban egy titkos kulcsot fog beállítani névvel h2url
és értékkel jdbc:h2:~/testdb;user=sa;password=password
.
Feljegyzés
A titkos kód beállítása után adjon hozzáférést az alkalmazásnak a Key Vaulthoz a Key Vault hozzáférési szabályzatának hozzárendelésével.
Titkos kód beolvasása az Azure Key Vaultból
Most, hogy az adatbázis hitelesítő adatai a Key Vaultban lettek tárolva, lekérheti őket a Spring Cloud Azure-ban.
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éke (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.11.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Feljegyzés
Ha Spring Boot 2.x-et használ, mindenképpen állítsa be a verziót
4.17.0
.spring-cloud-azure-dependencies
Ezt az anyagjegyzéket (BOM) a<dependencyManagement>
pom.xml 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. A BOM-hez használt verzióról további információt a Spring Cloud Azure melyik verzióját érdemes használni.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ódszerrel rendelkezik a 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:
- Használja az Azure SDK for Key Vaultot.
- A Spring KeyVault
PropertySource
használata.
Az Azure SDK használata a Key Vaulthoz
Az Azure SDK for Key Vault titkos kulcsokat kezel SecretClient
a Key Vaultban.
Az alábbi példakód bemutatja, hogyan lehet lekérni SecretClient
a H2-adatbázis hitelesítő adatait az Azure Key Vaultból.
Ha az Azure SDK-val szeretne titkos kódot olvasni a Key Vaultból, konfigurálja az alkalmazást az alábbi lépések végrehajtásával:
Key Vault-végpont konfigurálása az application.properties konfigurációs fájlban.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/
Injektálja a
SecretClient
babot a Spring-alkalmazásba, és használja agetSecret
metó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 az Azure Identity-et kell használnia. A Spring Cloud Azure
DefaultAzureCredential
az Azure Identity-kódtár használatával segít a hitelesítő adatok kódmódosítások nélküli beszerzésében.DefaultAzureCredential
tö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álhatja az Azure CLI-t, a Visual Studio Code-ot, a PowerShellt vagy más módszereket. További információ: Azure-hitelesítés Java-fejlesztési környezetekben. A hitelesítés azure-beli üzemeltetési környezetekben való elvégzéséhez javasoljuk a felhasználó által hozzárendelt felügyelt identitás használatát. További információ: Mik 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
önállóan 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 babot SecretClient
:
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
@Value
konfigurációkat lekérni, az application.properties fájlban nem szerepelhetnek IDE-tippek. - Ha mikroszolgáltatási forgatókönyve van, a kódot minden projektben duplikálni kell, és könnyű hibákat elkövetni, és nehéz konzisztensnek lenni.
A Spring Cloud Azure-ban szerencsére nem szükséges önállóan összeállítani a SecretClient
babot. Ehelyett közvetlenül injektálhatja SecretClient
és használhatja a Key Vault konfigurálásához már ismert konfigurációs tulajdonságokat. 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ó: Az Azure Service SDK-k globális konfigurációja a Spring Cloud Azure fejlesztői útmutatójában.
- 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ó: Csatlakozás különböző Azure-felhőkbe.
A Spring Key Vault PropertySource használata
Az előző szakaszok bemutattá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 a titkos kódok olvasására van szükség az alkalmazás elindítása előtt. 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 fog működni, ha az adatforrás jelszavát a Key Vaultban 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 spring environment-integrációt biztosít a Key Vault titkos kulcsainak betöltéséhez az alkalmazáskörnyezet létrehozása előtt. 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 transzparens módon érhető el 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 Vaultból való létrehozásához.
Ha le szeretné kérni egy H2-adatbázis URL-címét a Key Vaultból, é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égpontot és adatforrás-tulajdonságokat az 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.H2Dialect
Tipp.
A Spring Cloud Azure-beli tulajdonságkonfigurációra vonatkozó példákért tekintse meg a Spring Cloud Azure fejlesztői útmutatójának Konfigurációs példák szakaszát.
Tipp.
Ez a példa egy H2-adatbázist használó egyszerű adatbázis-forgatókönyv. Javasoljuk, hogy éles környezetben használja az Azure Database for MySQL-t vagy az Azure Database for PostgreSQL-t, és tárolja az adatbázis URL-címét, felhasználónevét és jelszavát az Azure Key Vaultban. Ha el szeretné kerülni a jelszót, a jelszó nélküli kapcsolatok jó választás. További információ: Jelszó nélküli kapcsolatok az Azure-szolgáltatásokhoz.
Hozzon létre egy új
Todo
Java-osztályt. Ez az osztály egy olyan tartománymodell, amely atodo
JPA által automatikusan létrehozott táblára van leképezve. Az alábbi kód figyelmen kívül hagyja a metódusokat éssetters
agetters
metódusokat.import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.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 Vaultból, 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 az Azure Spring Appsben
Most, hogy a Spring Boot-alkalmazás helyileg fut, ideje éles környezetbe áthelyezni. Az Azure Spring Apps megkönnyíti a Spring Boot-alkalmazások üzembe helyezését az Azure-ban 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. Az Azure Spring Apps átfogó monitorozási és diagnosztikai, konfigurációkezelési, szolgáltatásfelderítési, CI/CD-integrációs, kék-zöld környezetek és egyebek használatával biztosítja az életciklus-felügyeletet. Az alkalmazás Azure Spring Appsben való üzembe helyezéséről az első alkalmazás üzembe helyezése az Azure Spring Appsben című témakörben olvashat.
Következő lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: