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 grubunuzml
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:
- 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ı.
- (İ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.
- (İ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.
- 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.
- Uç noktaları çağıran uygulamaları yeni çevrimiçi uç noktaların puanlama URI'lerini kullanacak şekilde güncelleştirin.
- 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çinView 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 kontrolproperties.creationTime
edebilirsiniz.Alternatif olarak CLI ile,
my_ml_client.workspace.get("my-workspace-name")
SDK ile veyacurl
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
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>"
Ç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.
Ç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
Ö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.
Uç noktanın adını ayarlayın.
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
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
Ç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
Dağıtımın durumunu alın.
az ml online-endpoint show -n $ENDPOINT_NAME
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
Dağıtım günlüklerini alın.
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
Artık ihtiyacınız yoksa uç noktayı silin.
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
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_mode
Azure 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_mode
iç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 AzureServices
iç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.
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.Ö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
Approved
ayarlandığı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
Puanlama isteğini veren istemcinin Azure Machine Learning çalışma alanına erişebilen bir sanal ağ olduğunu doğrulayın.
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
- Kubernetes çevrimiçi uç noktası için uç nokta ana bilgisayar adı, Kubernetes kümenizde belirtilen CName (etki alanı adı) olmalıdır.
- Uç nokta HTTP ise, IP adresi studio kullanıcı arabiriminden alabileceğiniz uç nokta URI'sinde yer alır.
- Uç noktanın IP adresini almanın daha fazla yolunu Güvenli Kubernetes çevrimiçi uç noktasında bulabilirsiniz.
nslookup
Komut ana bilgisayar adını çözmezse aşağıdaki eylemleri gerçekleştirin:
Yönetilen çevrimiçi uç noktalar
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.Çı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.
Ö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ı
Kubernetes kümesindeki DNS yapılandırmasını denetleyin.
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"
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.
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
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
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
olurSucceeded
.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.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 gözden geçirin.