Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak pomocí Key Vault v aplikacích Spring Boot zabezpečit citlivá konfigurační data a načíst vlastnosti konfigurace z Key Vault. Key Vault poskytuje zabezpečené úložiště obecných tajných kódů, jako jsou hesla a připojovací řetězce databáze.
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Java Development Kit (JDK) verze 8 nebo vyšší.
- Apache Maven
- Azure CLI
- Instanci Key Vault. Pokud ho nemáte, přečtěte si téma Quickstart: Vytvoření trezoru klíčů pomocí portálu Azure. Poznamenejte si také identifikátor URI Key Vault instance, protože ho potřebujete pro testovací aplikaci pro účely tohoto kurzu.
- Aplikace Spring Boot. Pokud ho nemáte, vytvořte projekt Maven pomocí aplikace Spring Initializr. Nezapomeňte vybrat Maven Project a v části Dependencies, přidejte Spring Web, Spring Data JPA a H2 Database závislostí a pak vyberte Java verze 8 nebo vyšší.
Důležité
K dokončení kroků v tomto článku se vyžaduje Spring Boot verze 2.5 nebo vyšší.
Nastavení tajného kódu na Azure Key Vault
Tento kurz popisuje, jak číst přihlašovací údaje databáze z Key Vault v aplikaci Spring Boot. Pokud chcete číst přihlašovací údaje z Key Vault, měli byste nejprve uložit přihlašovací údaje databáze do Key Vault.
Pokud chcete adresu URL databáze H2 uložit jako nový tajný kód v Key Vault, přečtěte si téma Quickstart: Nastavení a načtení tajného klíče z Azure Key Vault pomocí portálu Azure. V tomto kurzu nastavíte tajný klíč s názvem h2url a hodnotou jdbc:h2:~/testdb;user=sa;password=password.
Poznámka:
Po nastavení tajného kódu udělte aplikaci přístup k Key Vault podle pokynů v Přiřaďte zásady přístupu Key Vault.
Čtení tajného kódu z Azure Key Vault
Teď, když jsou přihlašovací údaje databáze uložené v Key Vault, můžete je načíst pomocí Azure Spring Cloud.
Pokud chcete nainstalovat modul Spring Cloud Azure Key Vault Starter, přidejte do souboru
Spring Cloud Azure BOM:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Poznámka:
Pokud používáte Spring Boot 4.0.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na7.2.0.Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na6.2.0hodnotu.Pokud používáte Spring Boot 3.1.x-3.5.x, nezapomeňte nastavit verzi na
spring-cloud-azure-dependencies.Pokud používáte Spring Boot 2.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na4.20.0.Tato faktura materiálu (BOM) by měla být nakonfigurována v
<dependencyManagement>části vašeho pom.xml souboru. Tím zajistíte, že všechny závislosti Spring Cloud Azure budou používat stejnou verzi.Další informace o verzi použité pro tento kusovník najdete v tématu Kterou verzi Spring Cloud Azure bych měl použít.
Artefakt Spring Cloud Azure Key Vault Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault</artifactId> </dependency>
Spring Cloud Azure má několik metod čtení tajných kódů z Key Vault. Následující metody můžete použít nezávisle nebo je kombinovat pro různé případy použití:
- Pro Key Vault použijte Azure SDK.
- Použijte Spring KeyVault
PropertySource.
Použití Azure SDK pro Key Vault
Azure SDK pro Key Vault poskytuje SecretClient ke správě tajných kódů v Key Vault.
Následující příklad kódu vám ukáže, jak pomocí SecretClient načíst přihlašovací údaje databáze H2 z Azure Key Vault.
Pokud chcete číst tajný kód pomocí Azure SDK z Key Vault, nakonfigurujte aplikaci pomocí následujícího postupu:
Nakonfigurujte koncový bod Key Vault v konfiguračním souboru application.properties.
spring.cloud.azure.keyvault.secret.endpoint=https://<your-keyvault-name>.vault.azure.net/Injektujte
SecretClientbean do vaší Spring aplikace a použijte metodugetSecretk načtení tajemství, jak je znázorněno v následujícím příkladu: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()); } }Návod
V tomto kurzu nejsou v konfiguracích ani kódu žádné ověřovací operace. Připojení ke službám Azure ale vyžaduje ověření. K dokončení ověřování je potřeba použít Azure Identity. Spring Cloud Azure používá
DefaultAzureCredential, které knihovna identit Azure poskytuje, aby vám pomohla získat přihlašovací údaje bez jakýchkoli změn kódu.DefaultAzureCredentialpodporuje více metod ověřování a určuje, kterou metodu použít za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (například v místních a produkčních prostředích) bez implementace kódu specifického pro prostředí. Další informace naleznete v tématu DefaultAzureCredential.K dokončení ověřování v místních vývojových prostředích můžete použít Azure CLI, Visual Studio Code, PowerShell nebo jiné metody. Další informace najdete v tématu ověřování Azure pro vývojová prostředí Java. K dokončení ověřování v Azure hostitelských prostředích doporučujeme použít spravovanou identitu přiřazenou uživatelem. Další informace najdete v tématu Co jsou spravované identity pro prostředky Azure?
Spusťte aplikaci. Zobrazí se protokoly podobné následujícímu příkladu:
h2url: jdbc:h2:~/testdb;user=sa;password=password
Můžete sestavit SecretClient bean sami, ale proces je komplikovaný. V aplikacích Spring Boot musíte spravovat vlastnosti, zjistit vzor tvůrce a zaregistrovat klienta do kontextu aplikace Spring. Následující příklad kódu ukazuje, jak vytvoříte SecretClient bean:
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();
}
}
Následující seznam uvádí některé z důvodů, proč tento kód není flexibilní nebo elegantní:
- Koncový bod Key Vault je pevně zakódovaný.
- Pokud používáte
@Valuek získání konfigurací z prostředí Spring, nemůžete mít v souboru application.properties nápovědy IDE. - Pokud máte scénář mikroslužby, musí se kód v každém projektu duplikovat a je snadné udělat chyby a těžko být konzistentní.
Naštěstí není u Azure Spring Cloud nutné vytvářet SecretClient bean sami. Místo toho můžete přímo vložit SecretClient a použít vlastnosti konfigurace, které už znáte ke konfiguraci Key Vault. Další informace najdete v příkladech konfigurace.
Spring Cloud Azure také poskytuje následující globální konfigurace pro různé scénáře. Další informace najdete v sekci Globální konfigurace sad SDK služby Azure vývojářské příručky Spring Cloud Azure.
- Možnosti proxy serveru.
- Možnosti opakování
- Možnosti přenosového klienta HTTP.
Můžete se také připojit k různým Azure cloudům. Další informace najdete v tématu Pojení k různým cloudům Azure.
Použijte Spring Key Vault PropertySource
Předchozí části vám ukázaly, jak po spuštění aplikace používat SecretClient v CommandLineRunner ke čtení tajemství. V aplikacích Spring Boot se ale před spuštěním aplikace vyžaduje čtení tajných kódů. Například vlastnost heslo zdroje dat je vyžadována před spuštěním aplikace. Předchozí scénář nebude fungovat, pokud chcete uložit heslo zdroje dat do Key Vault a přesto použít automatickou konfiguraci Spring k získání zdroje dat.
V tomto případě Azure Spring Cloud poskytuje integraci prostředí Spring pro načtení tajných kódů z Key Vault před sestavením kontextu aplikace. Tajný kód můžete použít k vytvoření a konfiguraci bean během inicializace kontextu aplikace Spring. Tento přístup je transparentní způsob, jak získat přístup k tajným kódům z Key Vault a nevyžaduje se žádné změny kódu.
Následující příklad kódu ukazuje, jak pomocí PropertySource načíst přihlašovací údaje databáze H2 k sestavení zdroje dat z Azure Key Vault.
Pokud chcete načíst adresu URL databáze H2 z Key Vault a uložit data z databáze H2 pomocí jpa Spring Data, nakonfigurujte aplikaci následujícím postupem:
Do konfiguračního souboru application.properties přidejte následující vlastnosti koncového bodu Key Vault a zdroje dat.
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.H2DialectNávod
Příklady konfigurace vlastností Azure Spring Cloudu najdete v části Konfigurace příručky pro vývojáře Spring Cloud Azure.
Tento příklad je jednoduchý databázový scénář s využitím databáze H2. Doporučujeme používat Azure Database for MySQL nebo Azure Database for PostgreSQL v produkčním prostředí a ukládat adresu URL databáze, uživatelské jméno a heslo do Azure Key Vault. Pokud se chcete vyhnout heslu, je dobrou volbou připojení bez hesla. Další informace dočtete se v tématu Připojení bez hesla pro služby Azure.
Vytvořte novou třídu
TodoJava. Tato třída je doménový model mapovaný natodotabulku, kterou automaticky vytvoří JPA. Následující kód ignorujegettersmetody asettersmetody.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; }Upravte soubor spouštěcí třídy, aby se zobrazil následující obsah.
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> { }Spusťte aplikaci. Aplikace načte adresu URL databáze H2 z Key Vault, pak se připojí k databázi H2 a uloží data do databáze. Zobrazí se protokoly podobné následujícímu příkladu:
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
Nasazení do Azure Spring Apps
Teď, když máte aplikaci Spring Boot spuštěnou místně, je čas ji přesunout do produkčního prostředí. Azure Spring Apps usnadňuje nasazování aplikací Spring Boot do Azure bez jakýchkoli změn kódu. Služba spravuje infrastrukturu aplikací Spring, aby se vývojáři mohli soustředit na svůj kód. Azure Spring Apps poskytuje správu životního cyklu pomocí komplexního monitorování a diagnostiky, správy konfigurace, zjišťování služeb, integrace CI/CD, modrých zelených nasazení a dalších. Pokud chcete aplikaci nasadit do Azure Spring Apps, viz Nasazení první aplikace na Azure Spring Apps.