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 çalışma alanı yönetilen sanal ağına 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ı yönetilen bir sanal ağı kullanmaya geçmek istiyorsanız, şu adımları izleyebilirsiniz:

  1. Yeni bir çalışma alanı oluşturun ve 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ı.
  2. (İsteğe bağlı) Çalışma alanı ağ ayarında, dağıtımlarınızın depolama hesabı, Azure Key Vault ve çalışma alanıyla ilişkili Azure Container Registry (ACR) dışında ek özel kaynaklara erişmesi gerekiyorsa (varsayılan olarak eklenir) özel uç nokta türüyle giden kuralları ekleyin.
  3. (İsteğe bağlı) Azure Machine Learning kayıt defterlerini kullanmayı planlıyorsanız, kayıt defterinize, depolama hesabınıza ve Azure Container Registry'sine giden iletişim için özel uç noktaları yapılandırın.
  4. Yeni çalışma alanında çevrimiçi uç noktalar / dağıtımlar oluşturun. Doğrudan onlardan dağıtım yapmak için Azure Machine Learning kayıt defterlerinden yararlanabilirsiniz. Daha fazla bilgi için bkz . Kayıt Defterinden dağıtma.
  5. Uç noktaları çağıran uygulamaları yeni çevrimiçi uç noktaların puanlama URI'lerini kullanacak şekilde güncelleştirin.
  6. Doğrulamadan sonra eski çalışma alanından çevrimiçi uç noktaları silin.

İşlemleri korumanız veya eski çalışma alanında çevrimiçi uç noktaları ve dağıtımları kapalı kalma süresi olmadan hizmet vermek için tutmanız gerekmiyorsa, mevcut çalışma alanında yer alan tüm işlemleri silebilir ve çalışma alanı yönetilen sanal ağını etkinleştirmek için çalışma alanını güncelleştirebilirsiniz.

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 Application Insights) 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.

    Önemli

    Çalışma alanı yönetilen sanal ağı bir çalışma alanı için ilk kez ayarlandığında, ağ henüz sağlanmaz. Çevrimiçi dağıtımlar oluşturmaya devam etmeden önce, Yönetilen ağı el ile sağlama yönergelerini izleyerek ağı sağlayın. Yönetilen ağ sağlanana kadar çevrimiçi dağıtım oluşturma işlemi reddedilir.

  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.sh cli 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

v2 API'lerini devre dışı bırakmak üzere için v1_legacy_modeAzure Machine Learning çalışma alanını yapılandırabilirsiniz. Yönetilen çevrimiçi uç noktalar v2 API platformunun bir özelliğidir ve çalışma alanı için etkinleştirildiyse v1_legacy_mode çalışmaz.

öğesini devre dışı bırakmak v1_legacy_modeiçin bkz . v2 ile ağ yalıtımı.

Önemli

devre dışı bırakmadan v1_legacy_modeönce ağ güvenlik ekibinize danışın çünkü bir nedenle etkinleştirmiş olabilirler.

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 anahtar kasasının 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 koduna 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 disabled dağıtım için olup olmadığını 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 için Azure kapsayıcı kayıt defterinin 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 kodunda alanın olarak Approvedayarlandığını status doğrulayın. Aksi takdirde, 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, örneğin:

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

    Yanıt, sanal ağ tarafından sağlanan aralıkta olması gereken bir adres içerir.

    Not

  3. nslookup Komut ana bilgisayar adını çözmezse aşağıdaki eylemleri gerçekleştirin:

Yönetilen çevrimiçi uç noktalar

  1. Sanal ağın özel Etki Alanı Adı Sunucusu (DNS) bölgesinde bir A kaydı olup olmadığını 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 bir DNS sunucusu kullanıyorsa, özel DNS'den alınan çözümün doğru çalıştığını doğrulamak için aşağıdaki komutu çalıştırın.

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

Kubernetes çevrimiçi uç noktaları

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

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

    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 aşağıdaki komutu kullanın:

     curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
    "Swagger not found"
    
  3. Curl HTTP'leri başarısız olursa veya zaman aşımına uğradıysa ancak HTTP çalışıyorsa sertifikanın geçerli olup olmadığını denetleyin.

  4. Yukarıdaki işlem 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
    
  5. Yukarıdaki komut başarılı olursa, özel DNS'de özel bağlantı için koşullu iletici sorunlarını giderin.

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

  1. Dağıtımın başarılı olup olmadığını görmek için aşağıdaki komutu çalıştırı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
    

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

    İpucu

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

  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> 
    
  4. 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 gözden geçirin.

Sonraki adımlar