快速入門:使用 金鑰保存庫 載入應用程式秘密

注意

Azure Spring Apps 是 Azure Spring Cloud 服務的新名稱。 雖然服務有新的名稱,但是您暫時還是會在某些位置看到舊的名稱。我們正在致力更新螢幕擷取畫面、影片和圖表等資產。

本文適用於:❌ 基本/標準✔️企業

本快速入門說明如何針對執行 Azure Spring Apps 企業版方案的應用程式,使用 Azure 金鑰保存庫 安全地載入秘密。

每個應用程式都有將它連線到其環境和支援服務的屬性。 這些服務包括資料庫、記錄和監視工具、傳訊平臺等資源。 每個資源都需要尋找和存取它的方式,通常是以URL和認證的形式。 此資訊通常受到法律保護,而且必須保密,才能保護客戶數據。 在 Azure Spring Apps 中,您可以使用受控識別和 Azure 角色型存取控制,將應用程式設定為直接從 金鑰保存庫 將這些秘密載入記憶體。

必要條件

布建 金鑰保存庫 及儲存秘密

下列指示說明如何建立 金鑰保存庫 並安全地儲存應用程式秘密。

  1. 使用下列命令建立變數來保存資源名稱。 請務必將佔位元取代為您自己的值。

    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. 使用下列命令建立 金鑰保存庫 來儲存應用程式秘密:

    az keyvault create \
        --resource-group ${RESOURCE_GROUP} \
        --name ${KEY_VAULT_NAME}
    
  3. 使用下列命令,將完整的資料庫伺服器名稱儲存在 金鑰保存庫:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "POSTGRES-SERVER-NAME" \
        --value "${POSTGRES_SERVER_NAME}.postgres.database.azure.com"
    
  4. 使用下列命令,將資料庫名稱儲存在目錄服務應用程式的 金鑰保存庫 中:

    az keyvault secret set \
        --vault-name ${KEY_VAULT_NAME} \
        --name "CATALOG-DATABASE-NAME" \
        --value "acmefit_catalog"
    
  5. 使用下列命令,將資料庫登入認證儲存在 金鑰保存庫:

    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. 使用下列命令,將資料庫 連接字串 儲存在 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. 使用下列命令來擷取 Redis 連線屬性,並將其儲存在 金鑰保存庫:

    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. 如果您已設定單一登入,請使用下列命令將 JSON Web 金鑰 (JWK) URI 儲存在 金鑰保存庫:

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

將 金鑰保存庫 秘密的存取權授與應用程式

下列指示說明如何將 金鑰保存庫 秘密的存取權授與部署至 Azure Spring Apps 企業版方案的應用程式。

  1. 使用下列命令來啟用購物車服務應用程式的系統指派身分識別:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name cart-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  2. 使用下列命令來設定 Cart Service 應用程式的 金鑰保存庫 存取原則get list

    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. 使用下列命令為 Order Service 應用程式啟用系統指派的身分識別:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name order-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  4. 使用下列命令,為 Order Service 應用程式設定 金鑰保存庫 的存取原則get list

    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. 使用下列命令為目錄服務應用程式啟用系統指派的身分識別:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name catalog-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  6. 使用下列命令,在目錄服務應用程式的 金鑰保存庫 上設定 的存取原則get list

    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. 如果您已設定 單一登入,請使用下列命令為 Identity Service 應用程式啟用系統指派的身分識別:

    az spring app identity assign \
        --resource-group ${RESOURCE_GROUP} \
        --name identity-service \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME}
    
  8. 如果您已設定單一登錄,請使用下列命令,為 Identity Service 應用程式設定 金鑰保存庫 的存取get list原則:

    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
    

更新應用程式以載入 金鑰保存庫秘密

授與從 金鑰保存庫 讀取秘密的存取權之後,請使用下列步驟來更新應用程式,以在其設定中使用新的秘密值。

  1. 使用下列命令擷取要用於更新應用程式的 金鑰保存庫 URI:

    export KEYVAULT_URI=$(az keyvault show --name ${KEY_VAULT_NAME} --resource-group ${RESOURCE_GROUP} | jq -r '.properties.vaultUri')
    
  2. 使用下列命令擷取要用於更新應用程式的 Spring Cloud Gateway URL:

    export GATEWAY_URL=$(az spring gateway show \
        --resource-group ${RESOURCE_GROUP} \
        --service ${AZURE_SPRING_APPS_SERVICE_INSTANCE_NAME} | jq -r '.properties.url')
    
  3. 使用下列命令來移除 Service 連線 or 系結 Order Service 應用程式和 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器:

    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. 使用下列命令以 URI 更新 Order Service 環境,以存取 金鑰保存庫:

    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. 使用下列命令來移除服務 連線 或系結目錄服務應用程式和 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器:

    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. 使用下列命令來更新目錄服務環境和組態模式,以存取 金鑰保存庫:

    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. 使用下列命令來移除 Service 連線 or 系結 Cart Service 應用程式和 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. 使用下列命令來更新 Cart Service 環境以存取 金鑰保存庫:

    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. 如果您已設定單一登錄,請使用下列命令來更新 Identity Service 環境和組態模式,以存取 金鑰保存庫:

    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. 使用下列命令來擷取 Spring Cloud Gateway 的 URL:

    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}"
    

    您可以在瀏覽器中開啟輸出 URL,以探索更新的應用程式。

清除資源

如果您打算繼續進行後續的快速入門和教學課程,您可以讓這些資源留在原處。 如果不再需要,請刪除資源群組,這會刪除資源群組中的資源。 若要使用 Azure CLI 刪除資源群組,請使用下列命令:

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

下一步

繼續進行下列任一選擇性快速入門: