什麼是 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 Cloud Azure 開發 Spring Boot 應用程式之間的差異。

沒有 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 豆子。 然後,在相關地方自動連接 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>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    注意

    如果您使用 Spring Boot 2.x,請務必將 spring-cloud-azure-dependencies 版本設定為 4.17.0。 此材料帳單 (BOM) 應該在<dependencyManagement>pom.xml檔案的 區段中設定。 這可確保所有 Spring Cloud Azure 相依性都使用相同的版本。 如需此 BOM 所用版本的詳細資訊,請參閱 應該使用哪個版本的 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 等等。

Microsoft Entra ID

提供 Spring Security 與 Microsoft Entra ID 進行驗證的整合支援。 如需詳細資訊,請參閱 Spring Cloud Azure 支援 for Spring Security

Azure Key Vault

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

Azure 儲存體

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

取得支援

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

  • 建立 Azure 支援 票證。 具有 Azure 支援 方案的客戶可以開啟 Azure 支援 票證。 如果您的問題需要立即注意,建議您使用此選項。
  • 在 Azure/azure-sdk-for-java 存放庫中提出 GitHub 問題。 我們使用 GitHub 問題來追蹤 Bug、問題和功能要求。 GitHub 問題是免費的,但無法保證回應時間。 如需詳細資訊,請參閱 GitHub 問題支援程式

下一步