什麼是 Spring Cloud Azure?

Spring Cloud Azure 是開放原始碼專案,可協助更輕鬆地在Spring應用程式中使用Azure 服務

Spring Cloud Azure 是一個開放原始碼專案,其中包含可供公用使用的所有資源。 下列清單提供這些資源的連結:

什麼是 Spring Cloud Azure 用途?

Spring Cloud Azure 有助於更輕鬆地在 Spring 應用程式中完成下列工作:

下圖提供這些功能的概觀:

提供 Spring Cloud Azure 功能概觀的圖表。

使用 Spring Cloud Azure 的優點

下一節示範使用 Spring Cloud Azure 的優點。 在本節中,會使用儲存在 Azure 金鑰保存庫 中的秘密擷取作為範例。 本節會比較開發 Spring Boot 應用程式與 Spring Cloud Azure 和沒有 Spring Cloud Azure 之間的差異。

沒有 Spring Cloud Azure

如果沒有 Spring Cloud Azure,如果您想要擷取儲存在 Azure 金鑰保存庫中的秘密,您需要下列步驟:

  1. 將下列相依性新增至 您的pom.xml 檔案:

    <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-security-keyvault-secrets</artifactId>
       <version>4.5.2</version>
    </dependency>
    
  2. SecretClient使用類似下列範例的程式碼建構類別實例:

    public class DemoClass {
        public static void main(String... args) {
        SecretClient client = new SecretClientBuilder()
            .vaultUrl("vaultUrl")
            .credential(new ClientSecretCredentialBuilder()
                .tenantId("tenantId")
                .clientId("clientId")
                .clientSecret("clientSecret")
                .build())
            .buildClient();
        }
    }
    
  3. 請避免硬式編碼資訊,例如 client-idclient-secret ,方法是讓這些屬性可設定,如下列範例所示:

    @ConfigurationProperties("azure.keyvault")
    public class KeyVaultProperties {
        private String vaultUrl;
        private String tenantId;
        private String clientId;
        private String clientSecret;
    
        public KeyVaultProperties(String vaultUrl, String tenantId, String clientId, String clientSecret) {
            this.vaultUrl = vaultUrl;
            this.tenantId = tenantId;
            this.clientId = clientId;
            this.clientSecret = clientSecret;
        }
    
        public String getVaultUrl() {
            return vaultUrl;
        }
    
        public void setVaultUrl(String vaultUrl) {
            this.vaultUrl = vaultUrl;
        }
    
        public String getTenantId() {
            return tenantId;
        }
    
        public void setTenantId(String tenantId) {
            this.tenantId = tenantId;
        }
    
        public String getClientId() {
            return clientId;
        }
    
        public void setClientId(String clientId) {
            this.clientId = clientId;
        }
    
        public String getClientSecret() {
            return clientSecret;
        }
    
        public void setClientSecret(String clientSecret) {
            this.clientSecret = clientSecret;
        }
    }
    
  4. 更新您的應用程式程式碼,如下列範例所示:

    @SpringBootApplication
    @EnableConfigurationProperties(KeyVaultProperties.class)
    public class SecretClientApplication implements CommandLineRunner {
        private KeyVaultProperties properties;
    
        public SecretClientApplication(KeyVaultProperties properties) {
            this.properties = properties;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SecretClientApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            SecretClient client = new SecretClientBuilder()
                .vaultUrl(properties.getVaultUrl())
                .credential(new ClientSecretCredentialBuilder()
                    .tenantId(properties.getTenantId())
                    .clientId(properties.getClientId())
                    .clientSecret(properties.getClientSecret())
                    .build())
                .buildClient();
            System.out.println("sampleProperty: " + client.getSecret("sampleProperty").getValue());
        }
    }
    
  5. 將必要的屬性新增至 application.yml 檔案,如下列範例所示:

    azure:
      keyvault:
        vault-url:
        tenant-id:
        client-id:
        client-secret:
    
  6. 如果您需要在多個位置使用 SecretClient ,請定義 SecretClient bean。 然後,在相關位置自動連線 SecretClient

使用 Spring Cloud Azure

使用 Spring Cloud Azure,如果您想要擷取儲存在 Azure 金鑰保存庫中的秘密,需求會更簡單,如下列步驟所示:

  1. 將下列相依性新增至 您的pom.xml 檔案:

    <dependencies>
      <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
      </dependency>
    </dependencies>
    
  2. 使用 BOM) (材料帳單來管理 Spring Cloud Azure 版本,如下列範例所示:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>4.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    注意

    如果您使用 Spring Boot 3.x,請務必將 spring-cloud-azure-dependencies 版本設定為 5.5.0 。 如需版本的詳細資訊 spring-cloud-azure-dependencies ,請參閱 我應該使用哪個版本的 Spring Cloud Azure

  3. 將下列屬性新增至 application.yml 檔案:

    spring:
      cloud:
        azure:
          keyvault:
            secret:
              endpoint:
    
  4. 使用下列命令登入 Azure CLI 。 您的認證將會由 Azure CLI 提供,因此不需要新增其他認證資訊,例如 client-idclient-secret

    az login
    
  5. 相關位置中的自動連線 SecretClient ,如下列範例所示:

    @SpringBootApplication
    public class SecretClientApplication implements CommandLineRunner {
    
        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("sampleProperty: " + secretClient.getSecret("sampleProperty").getValue());
        }
    }
    

Spring Cloud Azure 除了自動設定 SecretClient 之外,還會提供一些其他功能。 例如,您可以使用 @Value 來取得秘密值,如下列範例所示:

@SpringBootApplication
public class PropertySourceApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;

    public static void main(String[] args) {
        SpringApplication.run(PropertySourceApplication.class, args);
    }

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
    }

}

Spring Cloud Azure 的元件

Azure 支援

提供 Azure 服務的自動設定支援,例如服務匯流排、儲存體、Active Directory 等等。

Azure Active Directory

提供整合支援,讓 Spring Security 可與 Azure Active Directory 整合以獲得驗證功能。 如需詳細資訊,請參閱Spring Cloud Azure 支援 for Spring Security

Azure Key Vault

提供與 Azure 金鑰保存庫秘密整合的 Spring @Value 批註支援。 如需詳細資訊,請參閱 Spring Cloud Azure 秘密管理

Azure 儲存體

為 Azure 儲存體服務提供 Spring Boot 支援。 如需詳細資訊,請參閱 Spring Cloud Azure 資源處理

取得支援

如果您需要 Spring Cloud Azure 的支援,您可以透過下列方式尋求協助:

後續步驟