Öğretici: Key Vault kullanarak App Service 'den güvenli bilişsel hizmet bağlantısı

Azure App Service , bağlantı dizelerini yönetmek için bağlantı parolalarını ortadan kaldıran ve arka uç bağlantınızı bir üretim ortamında güvende tutan bir bağlantı dizesi olmadan arka uç hizmetlerine bağlanmak için Yönetilen kimlikler kullanabilir. Yönetilen kimlikleri desteklemeyen ve hala bağlantı parolaları gerektiren arka uç hizmetleri için bağlantı gizli dizilerini yönetmek üzere Key Vault kullanabilirsiniz. Bu öğretici, bir örnek olarak bilişsel hizmetler 'i kullanarak uygulamada nasıl yapıldığını gösterir. İşiniz bittiğinde, App Service içinde herhangi bir bağlantı gizli dizilerini depolamadan, bilişsel hizmetler 'e programlı çağrılar yapan bir uygulamanız vardır.

İpucu

Azure bilişsel hizmetler, Yönetilen kimlikler aracılığıyla kimlik doğrulamasını destekler, ancak bu öğretici, uygulama hizmetlerinden yönetilen kimlikleri desteklemeyen bir Azure hizmetine nasıl bağlanabileceğinizi göstermek için abonelik anahtarı kimlik doğrulamasını kullanır.

Öğretici senaryosu için mimari diyagramı.

Bu mimariyle:

  • Key Vault bağlantı, Yönetilen kimlikler tarafından güvenli hale getirilir
  • App Service, uygulama ayarları olarak Key Vault başvurularını kullanarak gizli anahtarlara erişir.
  • Anahtar kasasına erişim uygulamayla kısıtlıdır. Yöneticiler gibi uygulama katkı sağlayanlar App Service kaynakların denetimini tamamen alabilir ve aynı anda Key Vault gizli dizileri için erişim sahibi olmaz.
  • Uygulama kodunuz zaten uygulama ayarlarıyla bağlantı gizli erişimlerine eriştiğinde hiçbir değişiklik yapılması gerekmez.

Öğrenirsiniz:

  • Yönetilen kimlikleri etkinleştirme
  • Key Vault bağlanmak için Yönetilen kimlikler kullanın
  • Key Vault başvurularını kullanma
  • Bilişsel hizmetler erişimi

Önkoşullar

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

  • Azure Cloud Shell'Da Bash ortamını kullanın.

    Cloud Shell’i yeni bir pencerede başlatma

  • Dilerseniz CLI başvuru komutlarını çalıştırmak için Azure CLI’yi yükleyebilirsiniz.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Ek oturum açma seçenekleri için bkz. Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantılarını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Bilişsel Hizmetler bağlantısı ile uygulama oluşturma

  1. Tüm kaynaklarınızı içeren 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. Bilişsel hizmetler kaynağı oluşturun. <cs-resource-name> İstediğ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 bilişsel hizmetler kaynağı oluşturur. Her abonelik, bir ücretsiz katman kaynağı kotasıyla sınırlıdır TextAnalytics . Zaten kotayı kullanıyorsanız, --sku S bunun yerine kullanın.

  3. Örnek depoyu yerel olarak kopyalayın ve örnek uygulamayı App Service dağıtın. <app-name> Benzersiz bir adla değiştirin.

    # Save app name as variable for convenience
    appName=<app-name>
    
    # Clone sample application
    git clone https://github.com/Azure-Samples/app-service-language-detector.git
    cd app-service-language-detector/dotnet
    
    az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region
    
  4. Bilişsel hizmetler gizli dizilerini uygulama ayarları olarak yapılandırın CS_ACCOUNT_NAME ve CS_ACCOUNT_KEY .

    # 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"
    
  5. Tarayıcıda, dağıtım uygulamanıza gidin <app-name>.azurewebsites.net ve çeşitli dillerdeki dizeler ile dil algılayıcısının deneyin.

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

    Uygulama koduna bakarsanız, algılama sonuçları için hata ayıklama çıkışının arka planla aynı yazı tipi rengine sahip olduğunu fark edebilirsiniz. Sonucun hemen altındaki boşluğu vurgulamaya çalışırken 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, uygulama kod tabanınızdan bağlantı gizli dizilerini zaten güvenli hale getirir. 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şırsınız ve yalnızca sizin yönetebilmeniz ve yalnızca App Service uygulamasının yönetilen kimliğini kullanarak okuyabilmesi için erişimi kilitlersiniz.

  1. Anahtar kasası oluşturma. <vault-name> 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
    

    --enable-rbac-authorizationParametresi, Azure rol tabanlı erişim denetimi 'NI (RBAC) izin modeli olarak ayarlar. Bu ayar varsayılan olarak tüm erişim ilkeleri izinlerini geçersiz kılar.

  2. Kasa için kendinize Key Vault gizli bilgileri Müdürü RBAC rolü sağlayın.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query objectId --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 dizi Kullanıcı RBAC rolü sağlayın.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. Bilişsel hizmetler kaynak adı ve abonelik anahtarı ' nı kasaya gizli dizi olarak ekleyin ve kimliklerini bir sonraki adım için 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ı olarak CS_ACCOUNT_NAME ve uygulamanızda ayarlarsınız CS_ACCOUNT_KEY . Şimdi bunları bunun yerine 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, tekrar ' ye gidin <app-name>.azurewebsites.net . Algılama sonuçlarını geri alırsanız, Anahtar Kasası başvurularıyla bilişsel hizmetler uç noktasına bağlanıyorsunuz.

Tebrikler, uygulamanız artık uygulama kodunuzda herhangi bir değişiklik yapmadan anahtar kasasında tutulan gizli dizileri kullanarak bilişsel hizmetlere 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