Aracılığıyla paylaş


TLS kullanarak Azure Machine Learning aracılığıyla web hizmetinin güvenliğini sağlama

ŞUNUN IÇIN GEÇERLIDIR: Python SDK azureml v1

Bu makalede, Azure Machine Learning aracılığıyla dağıtılan bir web hizmetinin güvenliğini sağlama adımları gösterilmektedir.

Web hizmetlerine erişimi kısıtlamak ve istemcilerin gönderdiği verilerin güvenliğini sağlamak için HTTPS kullanırsınız. HTTPS, ikisi arasındaki iletişimi şifreleyerek bir istemci ile web hizmeti arasındaki iletişimin güvenliğini sağlar. Şifreleme aktarım katmanı güvenliği (TLS) kullanır. TLS bazen TLS'nin öncülü olan Güvenli Yuva Katmanı (SSL) olarak da adlandırılır.

İpucu

Azure Machine Learning SDK'sı, güvenli iletişimle ilgili özellikler için "SSL" terimini kullanır. Bu, web hizmetinizin TLS kullanmadığı anlamına gelmez. SSL yalnızca daha yaygın olarak tanınan bir terimdir.

Özellikle, Azure Machine Learning aracılığıyla dağıtılan web hizmetleri AKS ve ACI için TLS sürüm 1.2'yi destekler. ACI dağıtımları için eski TLS sürümü kullanıyorsanız en son TLS sürümünü almak için yeniden dağıtmanızı öneririz.

Azure Machine Learning için TLS sürüm 1.3 - AKS Çıkarımı desteklenmez.

HEM TLS hem de SSL, şifreleme ve kimlik doğrulamasına yardımcı olan dijital sertifikaları kullanır. Dijital sertifikaların nasıl çalıştığı hakkında daha fazla bilgi için Ortak anahtar altyapısı Wikipedia konusuna bakın.

Uyarı

Web hizmetiniz için HTTPS kullanmıyorsanız, hizmete gönderilen ve hizmetten gönderilen veriler İnternet'te başkaları tarafından görülebilir.

HTTPS, istemcinin bağlandığını sunucunun orijinalliğini doğrulamasını da sağlar. Bu özellik istemcileri ortadaki adam saldırılarına karşı korur.

Web hizmetinin güvenliğini sağlamaya yönelik genel işlem şöyledir:

  1. Etki alanı adı alın.

  2. Dijital sertifika alın.

  3. TLS etkinleştirilmiş olarak web hizmetini dağıtın veya güncelleştirin.

  4. DNS’nizi web hizmetine işaret edecek şekilde güncelleştirin.

Önemli

Azure Kubernetes Service'e (AKS) dağıtıyorsanız, kendi sertifikanızı satın alabilir veya Microsoft tarafından sağlanan bir sertifikayı kullanabilirsiniz. Microsoft'tan bir sertifika kullanıyorsanız, etki alanı adı veya TLS/SSL sertifikası almanız gerekmez. Daha fazla bilgi için bu makalenin TLS'yi etkinleştirme ve dağıtma bölümüne bakın.

Dağıtım hedefleri arasında güvenlik sağlarken küçük farklılıklar vardır.

Önemli

Bu makaledeki Azure CLI komutlarından bazıları Azure Machine Learning için uzantısını veya v1'i kullanır azure-cli-ml. v1 uzantısı desteği 30 Eylül 2025'te sona erecektir. Bu tarihe kadar v1 uzantısını yükleyebilecek ve kullanabileceksiniz.

30 Eylül 2025'e kadar , veya v2 uzantısına geçmenizi mlöneririz. v2 uzantısı hakkında daha fazla bilgi için bkz . Azure ML CLI uzantısı ve Python SDK v2.

Etki alanı adı alma

Henüz bir etki alanı adınız yoksa, etki alanı adı kayıt şirketinden bir etki alanı adı satın alın. Süreç ve fiyat kayıt şirketleri arasında farklılık gösterir. Kayıt şirketi, etki alanı adını yönetmek için araçlar sağlar. Bu araçları, tam etki alanı adını (FQDN) (www.contoso.com gibi) web hizmetinizi barındıran IP adresiyle eşlemek için kullanırsınız.

TLS/SSL sertifikası alma

TLS/SSL sertifikası (dijital sertifika) almanın birçok yolu vardır. En yaygın olanı bir sertifika yetkilisinden (CA) satın almaktır. Sertifikayı nereden aldığınıza bakılmaksızın aşağıdaki dosyalara ihtiyacınız vardır:

  • Bir sertifika. Sertifikanın tam sertifika zinciri içermesi ve "PEM ile kodlanmış" olması gerekir.
  • Bir anahtar. Anahtar ayrıca PEM ile kodlanmış olmalıdır.

Sertifika istediğinizde, web hizmeti için kullanmayı planladığınız adresin FQDN'sini sağlamanız gerekir (örneğin, www.contoso.com). Sertifikaya damgalanan adres ve istemcilerin kullandığı adres, web hizmetinin kimliğini doğrulamak için karşılaştırılır. Bu adresler eşleşmiyorsa istemci bir hata iletisi alır.

İpucu

Sertifika yetkilisi sertifikayı ve anahtarı PEM ile kodlanmış dosyalar olarak sağlayamıyorsa, biçimi değiştirmek için OpenSSL gibi bir yardımcı program kullanabilirsiniz.

Uyarı

Otomatik olarak imzalanan sertifikaları yalnızca geliştirme için kullanın. Bunları üretim ortamlarında kullanmayın. Otomatik olarak imzalanan sertifikalar istemci uygulamalarınızda sorunlara neden olabilir. Daha fazla bilgi için istemci uygulamanızın kullandığı ağ kitaplıklarının belgelerine bakın.

TLS'yi etkinleştirme ve dağıtma

AKS dağıtımı için, Azure Machine Learning çalışma alanında aks kümesi oluştururken veya eklerken TLS sonlandırmayı etkinleştirebilirsiniz. AKS modeli dağıtım zamanında, dağıtım yapılandırma nesnesiyle TLS sonlandırmayı devre dışı bırakabilirsiniz, aksi takdirde varsayılan olarak tüm AKS modeli dağıtımlarında AKS kümesi oluşturma veya ekleme zamanında TLS sonlandırma etkinleştirilir.

ACI dağıtımı için, dağıtım yapılandırma nesnesiyle model dağıtım zamanında TLS sonlandırmayı etkinleştirebilirsiniz.

Azure Kubernetes Service'te dağıtma

Not

Bu bölümdeki bilgiler, tasarımcı için güvenli bir web hizmeti dağıttığınızda da geçerlidir. Python SDK'sını kullanmayı bilmiyorsanız bkz . Python için Azure Machine Learning SDK nedir?.

Azure Machine Learning çalışma alanında aks kümesi oluşturduğunuzda veya eklediğinizde, AksCompute.provisioning_configuration() ve AksCompute.attach_configuration() yapılandırma nesneleriyle TLS sonlandırmayı etkinleştirebilirsiniz. Her iki yöntem de enable_ssl yöntemi olan bir yapılandırma nesnesi döndürür ve TLS'yi etkinleştirmek için enable_ssl yöntemini kullanabilirsiniz.

TLS'yi Microsoft sertifikasıyla veya CA'dan satın alınan özel bir sertifikayla etkinleştirebilirsiniz.

  • Microsoft'tan bir sertifika kullandığınızda leaf_domain_label parametresini kullanmanız gerekir. Bu parametre, hizmetin DNS adını oluşturur. Örneğin, "contoso" değeri "contoso<altı rastgele karakterden> oluşan bir etki alanı adı oluşturur.<azureregion.cloudapp.azure.com>", burada <azureregion> hizmeti içeren bölgedir. İsteğe bağlı olarak, mevcut leaf_domain_label üzerine yazmak için overwrite_existing_domain parametresini kullanabilirsiniz. Aşağıdaki örnekte, Microsoft sertifikasıyla TLS'yi etkinleştiren bir yapılandırmanın nasıl oluşturulacağı gösterilmektedir:

    from azureml.core.compute import AksCompute
    
    # Config used to create a new AKS cluster and enable TLS
    provisioning_config = AksCompute.provisioning_configuration()
    
    # Leaf domain label generates a name using the formula
    #  "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
    #  where "######" is a random series of characters
    provisioning_config.enable_ssl(leaf_domain_label = "contoso")
    
    
    # Config used to attach an existing AKS cluster to your workspace and enable TLS
    attach_config = AksCompute.attach_configuration(resource_group = resource_group,
                                          cluster_name = cluster_name)
    
    # Leaf domain label generates a name using the formula
    #  "<leaf-domain-label>######.<azure-region>.cloudapp.azure.com"
    #  where "######" is a random series of characters
    attach_config.enable_ssl(leaf_domain_label = "contoso")
    

    Önemli

    Microsoft'tan bir sertifika kullandığınızda, kendi sertifikanızı veya etki alanı adınızı satın almanız gerekmez.

  • Satın aldığınız özel bir sertifika kullandığınızda ssl_cert_pem_file, ssl_key_pem_file ve ssl_cname parametrelerini kullanırsınız. Geçiş tümceciği korumasına sahip PEM dosyası desteklenmez. Aşağıdaki örnekte satın aldığınız TLS/SSL sertifikası kullanan bir yapılandırma oluşturmak için .pem dosyalarının nasıl kullanılacağı gösterilmektedir:

    from azureml.core.compute import AksCompute
    
    # Config used to create a new AKS cluster and enable TLS
    provisioning_config = AksCompute.provisioning_configuration()
    provisioning_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
    
    # Config used to attach an existing AKS cluster to your workspace and enable SSL
    attach_config = AksCompute.attach_configuration(resource_group = resource_group,
                                         cluster_name = cluster_name)
    attach_config.enable_ssl(ssl_cert_pem_file="cert.pem",
                                        ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")
    

enable_ssl hakkında daha fazla bilgi için bkz. AksProvisioningConfiguration.enable_ssl() ve AksAttachConfiguration.enable_ssl().

Azure Container Instances’ta dağıtma

Azure Container Instances'a dağıttığınızda, aşağıdaki kod parçacığında gösterildiği gibi TLS ile ilgili parametreler için değerler sağlarsınız:

from azureml.core.webservice import AciWebservice

aci_config = AciWebservice.deploy_configuration(
    ssl_enabled=True, ssl_cert_pem_file="cert.pem", ssl_key_pem_file="key.pem", ssl_cname="www.contoso.com")

Daha fazla bilgi için bkz . AciWebservice.deploy_configuration().

DNS'nizi güncelleştirme

Özel sertifika ile AKS dağıtımı veya ACI dağıtımı için, DNS kaydınızı puanlama uç noktasının IP adresine işaret eden şekilde güncelleştirmeniz gerekir.

Önemli

AKS dağıtımı için Microsoft'tan bir sertifika kullandığınızda, küme için DNS değerini el ile güncelleştirmeniz gerekmez. Değer otomatik olarak ayarlanmalıdır.

Özel etki alanı adınızın DNS kaydını güncelleştirmek için aşağıdaki adımları izleyebilirsiniz:

  1. Puanlama uç noktası IP adresini genellikle biçiminde olan puanlama uç noktası URI'sinden http://104.214.29.152:80/api/v1/service/<service-name>/scorealın. Bu örnekte IP adresi 104.214.29.152'dir.

  2. Etki alanı adınızın DNS kaydını güncelleştirmek için etki alanı adı kayıt şirketinizdeki araçları kullanın. Kayıt, FQDN'yi (örneğin, www.contoso.com) IP adresiyle eşler. Kaydın puanlama uç noktasının IP adresine işaret etmesi gerekir.

    İpucu

    Microsoft, özel DNS adınız veya sertifikanız için DNS'yi güncelleştirmekle sorumlu değildir. Etki alanı adı kayıt şirketinizle güncelleştirmeniz gerekir.

  3. DNS kaydı güncelleştirmesinin ardından nslookup custom-domain-name komutunu kullanarak DNS çözümlemesini doğrulayabilirsiniz. DNS kaydı doğru güncelleştirildiyse, özel etki alanı adı puanlama uç noktasının IP adresini gösterir.

    İstemcilerin etki alanı adını çözümlemesi için kayıt şirketine ve etki alanı adı için yapılandırılan "yaşam süresine" (TTL) bağlı olarak birkaç dakika veya saat gecikme olabilir.

Azure Machine Learning ile DNS çözümlemesi hakkında daha fazla bilgi için bkz . Çalışma alanınızı özel dns sunucusuyla kullanma.

TLS/SSL sertifikasını güncelleştirme

TLS/SSL sertifikalarının süresi doldu ve yenilenmesi gerekiyor. Genellikle bu her yıl gerçekleşir. Azure Kubernetes Service'e dağıtılan modeller için sertifikanızı güncelleştirmek ve yenilemek için aşağıdaki bölümlerdeki bilgileri kullanın:

Microsoft tarafından oluşturulan bir sertifikayı güncelleştirme

Sertifika ilk olarak Microsoft tarafından oluşturulduysa (hizmeti oluşturmak için leaf_domain_label kullanırken), gerektiğinde otomatik olarak yenilenir. Sertifikayı el ile yenilemek istiyorsanız, sertifikayı güncelleştirmek için aşağıdaki örneklerden birini kullanın:

Önemli

  • Mevcut sertifika hala geçerliyse yapılandırmayı yenilemeye zorlamak için (SDK) veya --ssl-renew (CLI) kullanın renew=True . Bu işlemin etkili olması yaklaşık 5 saat sürer.
  • Hizmet başlangıçta dağıtıldığında, desenini leaf_domain_label <leaf-domain-label>######.<azure-region>.cloudapp.azure.comkullanarak bir DNS adı oluşturmak için kullanılır. Mevcut adı (başlangıçta oluşturulan 6 basamak dahil) korumak için özgün leaf_domain_label değeri kullanın. Oluşturulan 6 basamağı eklemeyin.

SDK'yi kullanma

from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration

# Get the existing cluster
aks_target = AksCompute(ws, clustername)

# Update the existing certificate by referencing the leaf domain label
ssl_configuration = SslConfiguration(leaf_domain_label="myaks", overwrite_existing_domain=True, renew=True)
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)

CLI kullanma

ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-leaf-domain-label "myaks" --ssl-overwrite-domain True --ssl-renew

Daha fazla bilgi için aşağıdaki başvuru belgelerine bakın:

Özel sertifikayı güncelleştirme

Sertifika başlangıçta bir sertifika yetkilisi tarafından oluşturulduysa aşağıdaki adımları kullanın:

  1. Sertifikayı yenilemek için sertifika yetkilisi tarafından sağlanan belgeleri kullanın. Bu işlem yeni sertifika dosyaları oluşturur.

  2. Hizmeti yeni sertifikayla güncelleştirmek için SDK veya CLI kullanın:

    SDK'yi kullanma

    from azureml.core.compute import AksCompute
    from azureml.core.compute.aks import AksUpdateConfiguration
    from azureml.core.compute.aks import SslConfiguration
    
    # Read the certificate file
    def get_content(file_name):
        with open(file_name, 'r') as f:
            return f.read()
    
    # Get the existing cluster
    aks_target = AksCompute(ws, clustername)
    
    # Update cluster with custom certificate
    ssl_configuration = SslConfiguration(cname="myaks", cert=get_content('cert.pem'), key=get_content('key.pem'))
    update_config = AksUpdateConfiguration(ssl_configuration)
    aks_target.update(update_config)
    

    CLI kullanma

    ŞUNLAR IÇIN GEÇERLIDIR: Azure CLI ml uzantısı v1

    az ml computetarget update aks -g "myresourcegroup" -w "myresourceworkspace" -n "myaks" --ssl-cname "myaks"--ssl-cert-file "cert.pem" --ssl-key-file "key.pem"
    

Daha fazla bilgi için aşağıdaki başvuru belgelerine bakın:

TLS'yi devre dışı bırakma

Azure Kubernetes Service'e dağıtılan bir modelin TLS'sini devre dışı bırakmak için ile status="Disabled"bir SslConfiguration oluşturun ve bir güncelleştirme gerçekleştirin:

from azureml.core.compute import AksCompute
from azureml.core.compute.aks import AksUpdateConfiguration
from azureml.core.compute.aks import SslConfiguration

# Get the existing cluster
aks_target = AksCompute(ws, clustername)

# Disable TLS
ssl_configuration = SslConfiguration(status="Disabled")
update_config = AksUpdateConfiguration(ssl_configuration)
aks_target.update(update_config)

Sonraki adımlar

Şunları nasıl yapacağınızı öğrenin: