Ağ yalıtımı ile yönetilen çevrimiçi uç noktalarınızın güvenliğini sağlama

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v2 (geçerli)Python SDK azure-ai-ml v2 (geçerli)

Bu makalede, yönetilen bir çevrimiçi uç noktanın güvenliğini sağlamak için ağ yalıtımı kullanacaksınız. Güvenli gelen iletişim için Azure Machine Learning çalışma alanının özel uç noktasını kullanan bir yönetilen çevrimiçi uç nokta oluşturacaksınız. Ayrıca, dağıtımlar için yalnızca onaylı giden iletişime izin veren yönetilen bir sanal ağ ile çalışma alanını yapılandıracaksınız. Son olarak, giden iletişim için çalışma alanının yönetilen sanal ağının özel uç noktalarını kullanan bir dağıtım oluşturacaksınız.

Ağ yalıtımı için eski yöntemi kullanan örnekler için azureml örnekleri GitHub deposundaki dağıtım dosyaları deploy-moe-vnet-legacy.sh (genel bir model kullanarak dağıtım için) ve deploy-moe-vnet-mlflow-legacy.sh (MLflow modeli kullanarak dağıtım için) bölümüne bakın.

Önkoşullar

  • Azure Machine Learning'i kullanmak için bir Azure aboneliğiniz olmalıdır. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun. Azure Machine Learning'in ücretsiz veya ücretli sürümünü bugün deneyin.

  • Azure CLI'yi ve Azure CLI uzantısını ml yükleyip yapılandırın. Daha fazla bilgi için bkz . CLI'yi (v2) yükleme, ayarlama ve kullanma.

    İpucu

    Azure Machine Learning yönetilen sanal ağı 23 Mayıs 2023'te kullanıma sunulmuştur. ML uzantısının eski bir sürümüne sahipseniz, bu makaledeki örneklerin çalışması için bu uzantıyı güncelleştirmeniz gerekebilir. Uzantıyı güncelleştirmek için aşağıdaki Azure CLI komutunu kullanın:

    az extension update -n ml
    
  • Bu makaledeki CLI örneklerinde Bash (veya uyumlu) kabuğu kullandığınız varsayılır. Örneğin, bir Linux sisteminden veya Linux için Windows Alt Sistemi.

  • Sizin (veya kullandığınız hizmet sorumlusunun) erişmesi gereken bir Azure Kaynak Grubunuz Contributor olmalıdır. Uzantınızı yapılandırdıysanız böyle bir kaynak grubunuz ml olur.

  • Çevrimiçi uç noktaları ve çevrimiçi dağıtımları oluşturmak ve yönetmek için kullanıcı tarafından atanan bir yönetilen kimlik kullanmak istiyorsanız, kimliğin uygun izinlere sahip olması gerekir. Gerekli izinler hakkında ayrıntılı bilgi için bkz . Hizmet kimlik doğrulamasını ayarlama. Örneğin, kimlik üzerinde Azure Key Vault için uygun RBAC iznini atamanız gerekir.

Eski ağ yalıtım yönteminden yönetilen sanal ağa geçiş

Daha önce yönetilen çevrimiçi uç noktaların ağ yalıtımı için eski yöntemi kullandıysanız ve uç noktalarınızın güvenliğini sağlamak için çalışma alanı tarafından yönetilen sanal ağı kullanmaya geçmek istiyorsanız şu adımları izleyin:

  1. Çalışma alanınızdaki tüm işlemleri silin.
  2. Çalışma alanınız için yönetilen sanal ağı etkinleştirin. Çalışma alanınız için yönetilen ağ yapılandırma hakkında daha fazla bilgi için bkz. Çalışma Alanı Yönetilen Sanal Ağ Yalıtımı.
  3. Yönetilen çevrimiçi uç noktalarınızın erişmesi gereken özel kaynaklara giden iletişim için özel uç noktaları yapılandırın. Bu özel kaynaklar arasında depolama hesabı, Azure Key Vault ve Azure Container Registry (ACR) bulunur.
  4. (İsteğe bağlı) Kullanıcı kayıt defteriyle tümleştirme gerçekleştiriyorsanız kayıt defterinize, depolama hesabınıza ve ACR'sine giden iletişim için özel uç noktaları yapılandırın.

Sınırlamalar

  • Azure Machine Learning çalışma alanınızda v1_legacy_mode bayrağı devre dışı bırakılmalıdır (false). Bu bayrak etkinleştirilirse yönetilen çevrimiçi uç nokta oluşturamazsınız. Daha fazla bilgi için bkz. v2 API ile ağ yalıtımı.

  • Azure Machine Learning çalışma alanınızda 24 Mayıs 2022'ye kadar oluşturulmuş bir özel uç nokta varsa, çevrimiçi uç noktalarınızı özel uç nokta kullanacak şekilde yapılandırmadan önce çalışma alanının özel uç noktasını yeniden oluşturmanız gerekir. Çalışma alanınıza özel uç nokta oluşturma hakkında daha fazla bilgi için bkz. Azure Machine Learning çalışma alanı için özel uç nokta yapılandırma.

    İpucu

    Çalışma alanının ne zaman oluşturulduğunu onaylamak için çalışma alanı özelliklerini de kontrol edebilirsiniz.

    Studio'da bölümüne gidin Directory + Subscription + Workspace (Studio'nun sağ üst kısmı) ve öğesini seçin View all properties in Azure Portal. "Genel Bakış" sayfasının sağ üst kısmındaN JSON görünümünü seçin ve ardından en son API sürümünü seçin. Bu sayfada değerini de kontrol properties.creationTimeedebilirsiniz.

    Alternatif olarak CLI ile, my_ml_client.workspace.get("my-workspace-name") SDK ile veya curl REST API ile bir çalışma alanında kullanabilirsinizaz ml workspace show.

  • Çevrimiçi uç noktalarla ağ yalıtımı kullandığınızda, çalışma alanınızdan farklı bir kaynak grubundan çalışma alanıyla ilişkili kaynakları (Azure Container Registry (ACR), Depolama hesabı, Key Vault ve Uygulama Analizler) kullanabilirsiniz. Ancak bu kaynakların çalışma alanınızla aynı aboneliğe ve kiracıya ait olması gerekir.

Not

Bu makalede açıklanan ağ yalıtımı, veri düzlemi işlemleri, yani puanlama isteklerinden (veya model sunma) kaynaklanan işlemler için geçerlidir. Denetim düzlemi işlemleri (kimlik doğrulama anahtarları oluşturma, güncelleştirme, silme veya alma istekleri gibi) genel ağ üzerinden Azure Resource Manager'a gönderilir.

Sisteminizi hazırlama

  1. Aşağıdaki komutları çalıştırarak bu örnek tarafından kullanılan ortam değişkenlerini oluşturun. değerini çalışma alanınız için kullanılacak adla değiştirin <YOUR_WORKSPACE_NAME> . değerini, çalışma alanınızı içerecek kaynak grubuyla değiştirin <YOUR_RESOURCEGROUP_NAME> .

    İpucu

    yeni bir çalışma alanı oluşturmadan önce, bu çalışma alanını içerecek bir Azure Kaynak Grubu oluşturmanız gerekir. Daha fazla bilgi için bkz . Azure Kaynak Gruplarını Yönetme.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Çalışma alanınızı oluşturun. parametresi, -m allow_only_approved_outbound çalışma alanı için yönetilen bir sanal ağ yapılandırılır ve onaylanan hedefler dışında giden trafiği engeller.

    az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
    

    Alternatif olarak, dağıtımın giden trafiği İnternet'e göndermesine izin vermek istiyorsanız aşağıdaki kodun açıklamasını kaldırın ve çalıştırın.

    # az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
    

    Yeni bir çalışma alanı oluşturma veya var olan çalışma alanınızı yönetilen bir sanal ağ kullanacak şekilde yükseltme hakkında daha fazla bilgi için bkz . İnternet gidenine izin vermek için yönetilen sanal ağ yapılandırma.

    Çalışma alanı özel bir uç noktayla yapılandırıldığında, özel uç nokta üzerinden erişime izin vermek için çalışma alanının Azure Container Registry'sinin Premium katman için yapılandırılması gerekir. Daha fazla bilgi için bkz. Azure Container Registry hizmet katmanları. Ayrıca, dağıtım oluşturma işlemi görüntülerin oluşturulmasını içerdiğinden image_build_compute çalışma alanı özelliğiyle ayarlanmalıdır. Daha fazla bilgi için bkz . Görüntü derlemelerini yapılandırma.

  3. Çalışma alanınızın ve kaynak grubunuzun değerlerini birden çok kez geçirmekten kaçınmak için CLI için varsayılanları yapılandırın.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Örnek depoyu kopyalayarak uç nokta ve dağıtım için örnek dosyaları alın, ardından deponun /cli dizinine gidin.

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd /cli
    

Bu öğreticideki komutlar dizindeki dosyada deploy-managed-online-endpoint-workspacevnet.shcli ve YAML yapılandırma dosyaları alt dizindedir endpoints/online/managed/sample/ .

Güvenli yönetilen çevrimiçi uç nokta oluşturma

Güvenli bir yönetilen çevrimiçi uç nokta oluşturmak için, çalışma alanınızda uç noktayı oluşturun ve gelen iletişimi denetlemek için disabled uç noktayı public_network_access olarak ayarlayın. Ardından uç noktanın gelen iletişim için çalışma alanının özel uç noktasını kullanması gerekir.

Çalışma alanı yönetilen bir sanal ağa sahip olacak şekilde yapılandırıldığından, uç noktanın tüm dağıtımları giden iletişim için yönetilen sanal ağın özel uç noktalarını kullanır.

  1. Uç noktanın adını ayarlayın.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Gelen trafiği engellemek için devre dışı bırakılmış bir uç nokta public_network_access oluşturun.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
    

    Uç nokta için genel ağ erişimini devre dışı bırakırsanız, uç noktayı çağırmanın tek yolu sanal ağınızda çalışma alanına erişebilen özel bir uç nokta kullanmaktır. Daha fazla bilgi için bkz . Gelen puanlama isteklerinin güvenliğini sağlama ve Azure Machine Learning çalışma alanı için özel uç nokta yapılandırma.

    Alternatif olarak, uç noktanın İnternet'ten puanlama istekleri almasına izin vermek istiyorsanız aşağıdaki kodun açıklamasını kaldırın ve çalıştırın.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Çalışma alanı yönetilen sanal ağında bir dağıtım oluşturun.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Dağıtımın durumunu alın.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. CLI kullanarak puanlama isteğiyle uç noktayı test edin.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Dağıtım günlüklerini alın.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Artık ihtiyacınız yoksa uç noktayı silin.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Bu makalede oluşturulan tüm kaynakları silin. değerini bu örnekte kullanılan kaynak grubunun adıyla değiştirin <resource-group-name> :

    az group delete --resource-group <resource-group-name>
    

Sorun giderme

Çevrimiçi uç nokta oluşturma işlemi V1LegacyMode == true iletisiyle başarısız oluyor

Azure Machine Learning çalışma alanı için v1_legacy_modeyapılandırılabilir ve bu da v2 API'lerini devre dışı bırakır. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirilirse v1_legacy_mode çalışmaz.

Önemli

'yi devre dışı bırakmadan v1_legacy_modeönce ağ güvenlik ekibinize danışın. Ağ güvenlik ekibiniz tarafından bir nedenle etkinleştirilmiş olabilir.

özelliğini devre dışı bırakma v1_legacy_modehakkında bilgi için bkz . v2 ile ağ yalıtımı.

Anahtar tabanlı kimlik doğrulamasıyla çevrimiçi uç nokta oluşturma işlemi başarısız oluyor

Çalışma alanınız için Azure Key Vault'un ağ kurallarını listelemek için aşağıdaki komutu kullanın. değerini anahtar kasanızın adıyla değiştirin <keyvault-name> :

az keyvault network-rule list -n <keyvault-name>

Bu komutun yanıtı aşağıdaki JSON belgesine benzer:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

değeri bypass değilseAzureServices, anahtarı olarak ayarlamak AzureServicesiçin Anahtar kasası ağ ayarlarını yapılandırma bölümünde yer alan yönergeleri kullanın.

Çevrimiçi dağıtımlar görüntü indirme hatasıyla başarısız oluyor

Not

Bu sorun, Azure Machine Learning'in bir uç nokta altında her dağıtım için yönetilen bir sanal ağ oluşturduğu yönetilen çevrimiçi uç noktalar için eski ağ yalıtım yöntemini kullandığınızda geçerlidir.

  1. Bayrağın egress-public-network-access dağıtım için devre dışı bırakılıp bırakılmadiğini denetleyin. Bu bayrak etkinse ve kapsayıcı kayıt defterinin görünürlüğü özelse, bu hata beklenir.

  2. Özel uç nokta bağlantısının durumunu denetlemek için aşağıdaki komutu kullanın. değerini, çalışma alanınızın Azure Container Registry adıyla değiştirin <registry-name> :

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Yanıt belgesinde alanın olarak Approvedayarlandığını status doğrulayın. Onaylanmamışsa, onaylamak için aşağıdaki komutu kullanın. değerini önceki komuttan döndürülen adla değiştirin <private-endpoint-name> :

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Puanlama uç noktası çözümlenemiyor

  1. Puanlama isteğini veren istemcinin Azure Machine Learning çalışma alanına erişebilen bir sanal ağ olduğunu doğrulayın.

  2. nslookup IP adresi bilgilerini almak için uç nokta ana bilgisayar adında komutunu kullanın:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Yanıt bir adres içeriyor. Bu adres sanal ağ tarafından sağlanan aralıkta olmalıdır

    Not

    Kubernetes çevrimiçi uç noktası için uç nokta ana bilgisayar adı, Kubernetes kümenizde belirtilen CName (etki alanı adı) olmalıdır. Bu bir HTTP uç noktasıysa, IP adresi doğrudan Studio kullanıcı arabiriminde alabileceğiniz uç nokta URI'sinde yer alır. Uç noktanın IP adresini almanın diğer yolları Güvenli Kubernetes çevrimiçi uç noktasında bulunabilir.

  3. Konak adı komutuyla nslookup çözümlenmezse:

    Yönetilen çevrimiçi uç nokta için

    1. Sanal ağ için özel DNS bölgesinde bir A kaydı olup olmadığını denetleyin.

      Kayıtları denetlemek için aşağıdaki komutu kullanın:

      az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
      

      Sonuçlara benzer *.<GUID>.inference.<region>bir girdi bulunmalıdır.

    2. Çıkarım değeri döndürülmezse, çalışma alanının özel uç noktasını silin ve yeniden oluşturun. Daha fazla bilgi için bkz . Özel uç nokta yapılandırma.

    3. Özel uç nokta içeren çalışma alanı özel dns kullanılarak ayarlanmışsa Çalışma alanınızı özel dns sunucusuyla kullanma, çözümlemenin özel DNS'den doğru çalışıp çalışmadığını doğrulamak için aşağıdaki komutu kullanın.

      dig endpointname.westcentralus.inference.ml.azure.com
      

    Kubernetes çevrimiçi uç noktası için

    1. Kubernetes kümesindeki DNS yapılandırmasını denetleyin.

    2. Ayrıca, azureml-fe'nin beklendiği gibi çalışıp çalışmadığını denetleyebilirsiniz, aşağıdaki komutu kullanın:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      (Run in azureml-fe pod)
      
      curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

      HTTP için

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Curl HTTP'leri başarısız olursa (örneğin, zaman aşımı) ancak HTTP çalışıyorsa lütfen sertifikanın geçerli olup olmadığını denetleyin.

    Bu, A kaydına çözümlenemezse, çözümlemenin Azure DNS'den (168.63.129.16) çalışıp çalışmadığını doğrulayın.

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    

    Bu başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderebilirsiniz.

Çevrimiçi dağıtımlar puanlanamıyor

  1. Dağıtımın başarıyla dağıtılıp dağıtılmadığını görmek için aşağıdaki komutu kullanın:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Dağıtım başarıyla tamamlandıysa değeri state olur Succeeded.

  2. Dağıtım başarılı olursa, trafiğin dağıtıma atandığını denetlemek için aşağıdaki komutu kullanın. değerini uç noktanızın adıyla değiştirin <endpointname> :

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    İpucu

    bu dağıtımı hedeflemek için isteğinizdeki üst bilgiyi kullanıyorsanız azureml-model-deployment bu adım gerekli değildir.

    Bu komuttan gelen yanıt, dağıtımlara atanan trafiğin yüzdesini listelemelidir.

  3. Trafik atamaları (veya dağıtım üst bilgisi) doğru ayarlanmışsa, uç noktanın günlüklerini almak için aşağıdaki komutu kullanın. değerini uç noktanın adıyla ve <deploymentname> dağıtımıyla değiştirin<endpointname>:

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    

    Dağıtıma bir istek gönderdiğinizde puanlama kodunu çalıştırırken sorun olup olmadığını görmek için günlükleri inceleyin.

Sonraki adımlar