Aracılığıyla paylaş


Öğretici: Key Vault kullanarak JavaScript App Service'ten Bilişsel Hizmet bağlantısının güvenliğini sağlama

Azure App Service , bir bağlantı dizesi olmadan arka uç hizmetlerine bağlanmak için yönetilen kimlikleri kullanabilir ve bu sayede yönetim için bağlantı gizli dizilerini ortadan kaldırır ve arka uç bağlantınızın bir üretim ortamında güvenli kalmasını sağlar. Yönetilen kimlikleri desteklemeyen ve hala bağlantı gizli dizileri gerektiren arka uç hizmetleri için, bağlantı gizli dizilerini yönetmek için Key Vault'ı kullanabilirsiniz. Bu öğreticide, uygulamada nasıl yapıldığını göstermek için örnek olarak Azure yapay zeka hizmetleri gerçekleştirilir. İşiniz bittiğinde, App Service'te bağlantı gizli dizilerini depolamadan Azure AI hizmetlerine programlı çağrılar yapan bir uygulamanız olur.

İpucu

Azure AI hizmetleri yönetilen kimlikler aracılığıyla kimlik doğrulamasını destekler, ancak bu öğreticide, App Services'ten yönetilen kimlikleri desteklemeyen bir Azure hizmetine nasıl bağlanabileceğinizi göstermek için abonelik anahtarı kimlik doğrulaması kullanılır.

Öğretici senaryosu için mimari diyagramı.

Bu mimari ile:

  • Key Vault bağlantısı yönetilen kimlikler tarafından güvenli hale getirildi
  • App Service, uygulama ayarları olarak Key Vault başvurularını kullanarak gizli dizilere erişir .
  • Anahtar kasasına erişim uygulamayla sınırlıdır. Yöneticiler gibi uygulama katkıda bulunanları App Service kaynakları için tam denetime sahip olabilir ve aynı zamanda Key Vault gizli dizilerine erişimi olmayabilir.
  • Uygulama kodunuz uygulama ayarlarıyla bağlantı gizli dizilerine zaten erişiyorsa değişiklik gerekmez.

Öğrenecekleriniz:

  • Yönetilen kimlikleri etkinleştirme
  • Key Vault'a bağlanmak için yönetilen kimlikleri kullanma
  • Key Vault başvurularını kullanma
  • Azure AI hizmetlerine erişme

Önkoşullar

Ortamınızı Azure CLI için hazırlayın.

Azure AI hizmetlerine bağlantısı olan uygulama oluşturma

  1. Tüm kaynaklarınızı içerecek bir kaynak grubu oluşturun:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. Azure AI hizmetleri kaynağı oluşturma. cs-resource-name> değerini seçtiğiniz benzersiz bir adla değiştirin<.

    # Save resource name as variable for convenience. 
    csResourceName=<cs-resource-name>
    
    az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
    

    Not

    --sku F0 ücretsiz bir katman Azure AI hizmetleri kaynağı oluşturur. Her abonelik tek bir serbest katmanlı TextAnalytics kaynak kotası ile sınırlıdır. Kotayı aştıysanız bunun yerine kullanın --sku S .

JavaScript uygulamasını yapılandırma

Örnek depoyu yerel olarak kopyalayın ve örnek uygulamayı App Service'e dağıtın. uygulama adını> benzersiz bir adla değiştirin<.

# Clone and prepare sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/javascript
zip default.zip *.*

# Save app name as variable for convenience
appName=<app-name>

az appservice plan create --resource-group $groupName --name $appName --sku FREE --location $region --is-linux
az webapp create --resource-group $groupName --plan $appName --name $appName --runtime "node|14-lts"
az webapp config appsettings set --resource-group $groupName --name $appName --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true
az webapp deployment source config-zip --resource-group $groupName --name $appName --src ./default.zip

Önceki komutlar:

  • Linux app service planı oluşturma
  • Node.js 14 LTS için web uygulaması oluşturma
  • Dağıtımda npm paketlerini yüklemek için web uygulamasını yapılandırma
  • Zip dosyasını karşıya yükleyin ve npm paketlerini yükleyin

Gizli dizileri uygulama ayarları olarak yapılandırma

  1. Azure AI hizmetleri gizli dizilerini uygulama ayarları CS_ACCOUNT_NAME ve CS_ACCOUNT_KEYolarak yapılandırın.

    # Get subscription key for Cognitive Services resource
    csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv)
    
    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
    
  2. Tarayıcıda adresinden dağıtım uygulamanıza <app-name>.azurewebsites.net gidin ve çeşitli dillerdeki dizelerle dil algılayıcısını deneyin.

    App Service'te dağıtılan dil algılayıcı uygulamasını gösteren ekran görüntüsü.

    Uygulama koduna bakarsanız, algılama sonuçları için hata ayıklama çıktısının arka planla aynı yazı tipi renginde olduğunu fark edebilirsiniz. Sonucun hemen altındaki boşluğu vurgulamaya çalışarak bunu görebilirsiniz.

Güvenli arka uç bağlantısı

Şu anda bağlantı gizli dizileri App Service uygulamanızda uygulama ayarları olarak depolanır. Bu yaklaşım zaten uygulama kod tabanınızdan bağlantı gizli dizilerini güvenli hale getiriyor. Ancak, uygulamanızı yönetebilen tüm katkıda bulunanlar da uygulama ayarlarını görebilir. Bu adımda, bağlantı gizli dizilerini bir anahtar kasasına taşır ve erişimi kilitlersiniz; böylece yalnızca siz yönetebilir ve yalnızca App Service uygulaması yönetilen kimliğini kullanarak okuyabilir.

  1. Anahtar kasası oluşturma. Kasa adını> benzersiz bir adla değiştirin<.

    # Save app name as variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    parametresi, --enable-rbac-authorizationizin modeli olarak Azure rol tabanlı erişim denetimini (RBAC) ayarlar. Bu ayar varsayılan olarak tüm erişim ilkeleri izinlerini geçersiz kılandır.

  2. Kendinize kasa için Key Vault Gizli Dizileri Yetkilisi RBAC rolünü verin.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query id --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. Uygulamanız için sistem tarafından atanan yönetilen kimliği etkinleştirin ve kasa için Key Vault Gizli Dizileri Kullanıcı RBAC rolünü verin.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Azure AI hizmetleri kaynak adını ve abonelik anahtarını kasaya gizli dizi olarak ekleyin ve sonraki adım için kimliklerini ortam değişkenleri olarak kaydedin.

    csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv)
    csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
    
  5. Daha önce gizli dizileri uygulama ayarları CS_ACCOUNT_NAME olarak ve CS_ACCOUNT_KEY uygulamanızda ayarlarsınız. Şimdi bunları anahtar kasası başvuruları olarak ayarlayın.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    
  6. Tarayıcıda yeniden adresine <app-name>.azurewebsites.net gidin. Algılama sonuçlarını geri alırsanız anahtar kasası başvuruları ile Azure AI hizmetleri uç noktasına bağlanıyorsunuz demektir.

Tebrikler, uygulamanız artık uygulama kodunuzda hiçbir değişiklik yapmadan anahtar kasanızda tutulan gizli dizileri kullanarak Azure AI hizmetlerine bağlanıyor.

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name $groupName

Bu komutun çalıştırılması bir dakika sürebilir.

Sonraki adımlar