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 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:
- Çalışma alanınızdaki tüm işlemleri silin.
- Ç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ı.
- 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.
- (İ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ç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 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
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.Ç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
Azure Machine Learning çalışma alanı için v1_legacy_mode
yapı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_mode
hakkı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 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
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.Ö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
Approved
ayarlandığı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
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: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.
Konak adı komutuyla
nslookup
çözümlenmezse:Yönetilen çevrimiçi uç nokta için
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.Çı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 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
Kubernetes kümesindeki DNS yapılandırmasını denetleyin.
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
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
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
İ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.
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.