Mulai cepat: Memuat rahasia aplikasi menggunakan Key Vault

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:❌ Basic/Standard ✔️ Enterprise

Mulai cepat ini menunjukkan kepada Anda cara memuat rahasia dengan aman menggunakan Azure Key Vault untuk aplikasi yang menjalankan paket Azure Spring Apps Enterprise.

Setiap aplikasi memiliki properti yang menghubungkannya ke lingkungan dan layanan pendukungnya. Layanan ini mencakup sumber daya seperti database, alat pengelogan dan pemantauan, platform olahpesan, dan sebagainya. Setiap sumber daya memerlukan cara untuk menemukan dan mengaksesnya, seringkali dalam bentuk URL dan kredensial. Informasi ini sering dilindungi oleh hukum, dan harus dirahasiakan untuk melindungi data pelanggan. Di Azure Spring Apps, Anda dapat mengonfigurasi aplikasi untuk secara langsung memuat rahasia ini ke dalam memori dari Key Vault dengan menggunakan identitas terkelola dan kontrol akses berbasis peran Azure.

Prasyarat

Memprovisikan Key Vault dan menyimpan rahasia

Instruksi berikut menjelaskan cara membuat Key Vault dan menyimpan rahasia aplikasi dengan aman.

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

    export RESOURCE_GROUP=<resource-group-name>
    export KEY_VAULT_NAME=<key-vault-name>
    export POSTGRES_SERVER_NAME=<postgres-server-name>
    export POSTGRES_USERNAME=<postgres-username>
    export POSTGRES_PASSWORD=<postgres-password>
    export REDIS_CACHE_NAME=<redis-cache-name>
    export AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME=<Azure-Spring-Apps-service-instance-name>
    
  2. Gunakan perintah berikut untuk membuat Key Vault untuk menyimpan rahasia aplikasi:

    az keyvault create \
        --resource-group ${RESOURCE_GROUP} \
        --name ${KEY_VAULT_NAME}
    
  3. Gunakan perintah berikut untuk menyimpan nama server database lengkap di Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-SERVER-NAME" \
        --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
    
  4. Gunakan perintah berikut untuk menyimpan nama database di Key Vault untuk aplikasi Catalog Service:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CATALOG-DATABASE-NAME" \
        --value "acmefit_catalog"
    
  5. Gunakan perintah berikut untuk menyimpan kredensial masuk database di Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-NAME" \
        --value "${POSTGRES_USERNAME}"
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-LOGIN-PASSWORD" \
        --value "${POSTGRES_PASSWORD}"
    
  6. Gunakan perintah berikut untuk menyimpan database string koneksi di Key Vault untuk aplikasi Order Service:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "ConnectionStrings--OrderContext" \
        --value "Server=${POSTGRES_SERVER_NAME};Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=${POSTGRES_USERNAME};Password=${POSTGRES_PASSWORD};"
    
  7. Gunakan perintah berikut untuk mengambil properti koneksi Redis dan menyimpannya di Key Vault:

    export REDIS_HOST=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.hostName')
    
    export REDIS_PORT=$(az redis show \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.sslPort')
    
    export REDIS_PRIMARY_KEY=$(az redis list-keys \
        --resource-group ${RESOURCE_GROUP} \
        --name ${REDIS_CACHE_NAME} | jq -r '.primaryKey')
    
    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CART-REDIS-CONNECTION-STRING" \
        --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
    
  8. Jika Anda telah mengonfigurasi akses menyeluruh, gunakan perintah berikut untuk menyimpan URI JSON Web Key (JWK) di Key Vault:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "SSO-PROVIDER-JWK-URI" \
        --value <jwk-uri>
    

Memberikan akses aplikasi ke rahasia di Key Vault

Instruksi berikut menjelaskan cara memberikan akses ke rahasia Key Vault ke aplikasi yang disebarkan ke paket Azure Spring Apps Enterprise.

  1. Gunakan perintah berikut untuk mengaktifkan Identitas yang Ditetapkan Sistem untuk aplikasi Cart Service:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  2. Gunakan perintah berikut untuk menetapkan kebijakan get list akses pada Key Vault untuk aplikasi Cart Service:

    export CART_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CART_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  3. Gunakan perintah berikut untuk mengaktifkan Identitas yang Ditetapkan Sistem untuk aplikasi Order Service:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  4. Gunakan perintah berikut untuk mengatur kebijakan get list akses pada Key Vault untuk aplikasi Order Service:

    export ORDER_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${ORDER_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  5. Gunakan perintah berikut untuk mengaktifkan Identitas yang Ditetapkan Sistem untuk aplikasi Catalog Service:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  6. Gunakan perintah berikut untuk mengatur kebijakan get list akses pada Key Vault untuk aplikasi Catalog Service:

    export CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${CATALOG_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    
  7. Jika Anda telah mengonfigurasi akses menyeluruh, gunakan perintah berikut untuk mengaktifkan Identitas yang Ditetapkan Sistem untuk aplikasi Layanan Identitas:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  8. Jika Anda telah mengonfigurasi akses menyeluruh, gunakan perintah berikut untuk mengatur kebijakan get list akses pada Key Vault untuk aplikasi Layanan Identitas:

    export IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.identity.principalId')
    
    az keyvault set-policy \
        --name ${KEY_VAULT_NAME} \
        --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \
        --resource-group ${RESOURCE_GROUP} \
        --secret-permissions get list
    

Memperbarui aplikasi untuk memuat rahasia Key Vault

Setelah memberikan akses untuk membaca rahasia dari Key Vault, gunakan langkah-langkah berikut untuk memperbarui aplikasi untuk menggunakan nilai rahasia baru dalam konfigurasinya.

  1. Gunakan perintah berikut untuk mengambil URI untuk Key Vault yang akan digunakan dalam memperbarui aplikasi:

    export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
    
  2. Gunakan perintah berikut untuk mengambil URL untuk Spring Cloud Gateway yang akan digunakan dalam memperbarui aplikasi:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
  3. Gunakan perintah berikut untuk menghapus Koneksi Layananan yang mengikat aplikasi Order Service dan Server Fleksibel Azure Database for PostgreSQL:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app order-service \
        --connection order_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  4. Gunakan perintah berikut untuk memperbarui lingkungan Order Service dengan URI untuk mengakses Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
    
  5. Gunakan perintah berikut untuk menghapus Koneksi Layananan yang mengikat aplikasi Catalog Service dan Server Fleksibel Azure Database for PostgreSQL:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app catalog-service \
        --connection catalog_service_db \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  6. Gunakan perintah berikut untuk memperbarui lingkungan Layanan Katalog dan pola konfigurasi untuk mengakses Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern catalog/default,catalog/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  7. Gunakan perintah berikut untuk menghapus Koneksi Layan yang mengikat aplikasi Cart Service dan Azure Cache for Redis:

    az spring connection delete \
        --resource-group ${RESOURCE_GROUP} \
        --app cart-service \
        --connection cart_service_cache \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --deployment default \
        --yes
    
  8. Gunakan perintah berikut untuk memperbarui lingkungan Cart Service untuk mengakses Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
    
  9. Jika Anda telah mengonfigurasi akses menyeluruh, gunakan perintah berikut untuk memperbarui lingkungan Layanan Identitas dan pola konfigurasi untuk mengakses Key Vault:

    az spring app update \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} \
        --config-file-pattern identity/default,identity/key-vault \
        --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
    
  10. Gunakan perintah berikut ini untuk mengambil URL bagi Spring Cloud Gateway:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
    echo "https://${GATEWAY_URL}"
    

    Anda dapat membuka URL output di browser untuk menjelajahi aplikasi yang diperbarui.

Membersihkan sumber daya

Jika Anda berencana untuk terus bekerja dengan mulai cepat dan tutorial berikutnya, biarkan sumber daya ini tetap di tempatnya. Jika tidak lagi diperlukan, hapus grup sumber daya yang juga akan menghapus sumber daya di grup sumber daya. Untuk menghapus grup sumber daya dengan menggunakan Azure CLI, gunakan perintah berikut:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Langkah berikutnya

Lanjutkan ke salah satu mulai cepat opsional berikut: