Bagikan melalui


Koneksi Azure Spring Apps ke Key Vault menggunakan identitas terkelola

Catatan

Azure Spring Apps adalah nama baru untuk layanan Azure Spring Cloud. Meskipun layanan memiliki nama baru, Anda akan melihat nama lama di beberapa tempat untuk sementara saat kami berupaya memperbarui aset seperti cuplikan layar, video, dan diagram.

Artikel ini berlaku untuk: ✔️ Java ❌ C#

Artikel ini memperlihatkan kepada Anda cara membuat identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna untuk aplikasi yang disebarkan ke Azure Spring Apps dan menggunakannya untuk mengakses Azure Key Vault.

Azure Key Vault dapat digunakan untuk menyimpan dan mengontrol akses ke token, kata sandi, sertifikat, kunci API, dan rahasia lainnya dengan aman untuk aplikasi Anda. Anda dapat membuat identitas terkelola di ID Microsoft Entra, dan mengautentikasi ke layanan apa pun yang mendukung autentikasi Microsoft Entra, termasuk Key Vault, tanpa harus menampilkan kredensial dalam kode Anda.

Video berikut menjelaskan cara mengelola rahasia dengan menggunakan Azure Key Vault.


Prasyarat

  • Langganan Azure. Jika Anda tidak memiliki langganan, buat akun gratis sebelum memulai.
  • Jika Anda menyebarkan instans paket Azure Spring Apps Enterprise untuk pertama kalinya dalam langganan target, lihat bagian Persyaratan paket Enterprise di Marketplace Azure.
  • Azure CLI, versi 2.55.0 atau yang lebih tinggi.
  • Langganan Azure. Jika Anda tidak memiliki langganan, buat akun gratis sebelum memulai.
  • Azure CLI, versi 2.55.0 atau yang lebih tinggi.

Berikan nama untuk setiap sumber daya

Buat variabel untuk menahan nama sumber daya dengan menggunakan perintah berikut. Pastikan untuk mengganti placeholder dengan nilai Anda sendiri.

export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>

Buat grup sumber daya

Grup sumber daya adalah kontainer logis yang disebarkan dan dikelola oleh sumber daya Azure. Buat grup sumber daya untuk berisi Key Vault dan Spring Cloud menggunakan perintah az group create , seperti yang ditunjukkan dalam contoh berikut:

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

Menyiapkan Key Vault Anda

Untuk membuat Key Vault, gunakan perintah az keyvault create , seperti yang ditunjukkan dalam contoh berikut:

Penting

Setiap Gudang Kunci harus memiliki nama yang unik.

az keyvault create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT}

Gunakan perintah berikut untuk menampilkan URL aplikasi lalu catat URL yang dikembalikan, yang dalam format https://${KEY_VAULT}.vault.azure.net. Gunakan nilai ini di langkah berikut.

az keyvault show \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT} \
    --query properties.vaultUri --output tsv

Anda sekarang dapat menempatkan rahasia di Key Vault Anda dengan menggunakan perintah az keyvault secret set , seperti yang ditunjukkan dalam contoh berikut:

az keyvault secret set \
    --vault-name ${KEY_VAULT} \
    --name "connectionString" \
    --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"

Membuat layanan dan aplikasi Azure Spring Apps

Setelah Anda menginstal semua ekstensi yang sesuai, gunakan perintah berikut untuk membuat instans Azure Spring Apps:

az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --sku Enterprise \
    --name ${SPRING_APPS}

Contoh berikut membuat aplikasi dengan identitas terkelola yang ditetapkan sistem, seperti yang diminta oleh --system-assigned parameter:

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${SPRING_APPS}

Contoh berikut membuat komputer virtual bernama springapp dengan identitas terkelola yang ditetapkan sistem, seperti yang diminta oleh parameter --system-assigned.

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --runtime-version Java_17 \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)

Berikan akses aplikasi Anda ke Key Vault

Gunakan perintah berikut untuk memberikan akses yang tepat di Key Vault untuk aplikasi Anda:

az keyvault set-policy \
    --name ${KEY_VAULT} \
    --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
    --secret-permissions set get list

Catatan

Untuk identitas terkelola yang ditetapkan sistem, gunakan az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} untuk menghapus akses untuk aplikasi Anda setelah identitas terkelola yang ditetapkan sistem dinonaktifkan.

Menyusun aplikasi sampel Spring Boot dengan Spring Boot starter

Aplikasi ini memiliki akses untuk mendapatkan rahasia dari Azure Key Vault. Gunakan pemicu boot Azure Key Vault Secrets Spring. Azure Key Vault ditambahkan sebagai contoh Spring PropertySource. Rahasia yang disimpan di Azure Key Vault dapat diakses dan digunakan dengan mudah seperti properti konfigurasi eksternal, seperti properti dalam file.

  1. Gunakan perintah berikut untuk membuat proyek sampel dari start.spring.io dengan Azure Key Vault Spring Starter.

    curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
    
  2. Tentukan Key Vault dalam aplikasi Anda.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Untuk menggunakan identitas terkelola untuk aplikasi yang disebarkan ke Azure Spring Apps, tambahkan properti dengan konten berikut ke file src/main/resources/application.properties .

    spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url>
    spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
    

    Catatan

    Anda harus menambahkan URL brankas kunci dalam file application.properties seperti yang ditunjukkan sebelumnya. Jika tidak, URL brankas kunci tidak dapat diambil selama runtime.

  4. Perbarui src/main/java/com/example/demo/DemoApplication.java dengan contoh kode berikut. Kode ini mengambil string koneksi dari Key Vault.

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication implements CommandLineRunner {
    
        @Value("${connectionString}")
        private String connectionString;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @GetMapping("get")
        public String get() {
            return connectionString;
        }
    
        public void run(String... args) throws Exception {
            System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
        }
    }
    

    Jika Anda membuka file pom.xml , Anda dapat melihat spring-cloud-azure-starter-keyvault dependensi, seperti yang ditunjukkan dalam contoh berikut:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Gunakan perintah berikut untuk menyebarkan aplikasi Anda ke Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Gunakan perintah berikut untuk menyebarkan aplikasi Anda ke Azure Spring Apps:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path \
        --build-env BP_JVM_VERSION=17
    
  1. Untuk menguji aplikasi Anda, akses titik akhir publik atau titik akhir pengujian dengan menggunakan perintah berikut:

    curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
    

    Pesan berikut dikembalikan dalam isi respons: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Membersihkan sumber daya

Gunakan perintah berikut untuk menghapus seluruh grup sumber daya, termasuk instans layanan yang baru dibuat:

az group delete --name ${RESOURCE_GROUP} --yes

Langkah berikutnya