Menggunakan TLS untuk mengamankan layanan web melalui Azure Machine Learning

Artikel ini memperlihatkan kepada Anda cara mengamankan layanan web yang disebarkan melalui Azure Machine Learning.

Anda menggunakan HTTPS untuk membatasi akses ke layanan web dan mengamankan data yang dikirimkan klien. HTTPS membantu mengamankan komunikasi antara klien dan layanan web dengan mengenkripsi komunikasi antara keduanya. Enkripsi menggunakan Keamanan Lapisan Transportasi (TLS). TLS terkadang masih disebut sebagai Secure Sockets Layer (SSL), yang merupakan pendahulu TLS.

Tip

Azure Machine Learning SDK menggunakan istilah "SSL" untuk properti yang terkait dengan komunikasi yang aman. Hal ini tidak berarti bahwa layanan web Anda tidak menggunakan TLS. SSL hanyalah istilah yang lebih umum dikenal.

Secara khusus, layanan web yang disebarkan melalui Azure Machine Learning mendukung TLS versi 1.2 untuk AKS dan ACI. Untuk penyebaran ACI, jika Anda menggunakan versi TLS yang lebih lama, sebaiknya sebarkan ulang untuk mendapatkan versi TLS terbaru.

TLS versi 1.3 untuk Azure Machine Learning - Inferensi AKS tidak didukung.

TLS dan SSL mengandalkan sertifikat digital, yang membantu enkripsi dan verifikasi identitas. Untuk informasi selengkapnya tentang cara kerja sertifikat digital, lihat topik Wikipedia Infrastruktur kunci umum.

Peringatan

Jika Anda tidak menggunakan HTTPS untuk layanan web Anda, data yang dikirim ke dan dari layanan mungkin terlihat oleh orang lain di internet.

HTTPS juga memungkinkan klien untuk memverifikasi keaslian server yang tersambung. Fitur ini melindungi klien dari serangan man-in-the-middle.

Ini adalah proses umum untuk mengamankan layanan web:

  1. Mendapatkan nama domain.

  2. Mendapatkan sertifikat digital.

  3. Menerapkan atau memperbarui layanan web dengan TLS diaktifkan.

  4. Memperbarui DNS Anda untuk diarahkan ke layanan web.

Penting

Jika Anda menyebarkan ke Azure Kubernetes Service (AKS), Anda dapat membeli sertifikat Anda sendiri atau menggunakan sertifikat yang disediakan oleh Microsoft. Jika Anda menggunakan sertifikat dari Microsoft, Anda tidak perlu mendapatkan nama domain atau sertifikat TLS/SSL. Untuk informasi selengkapnya, lihat bagian Mengaktifkan TLS dan menyebarkannyadi artikel ini.

Terdapat sedikit perbedaan saat Anda mengamankan s di seluruh target penyebaran.

Mendapatkan nama domain

Jika Anda belum memiliki nama domain, beli dari pendaftar nama domain. Proses dan harga berbeda di antara pendaftar. Pendaftar menyediakan alat untuk mengelola nama domain. Anda menggunakan alat-alat ini untuk memetakan nama domain yang sepenuhnya memenuhi syarat (FQDN) (seperti www.contoso.com) ke alamat IP yang menghosting layanan web Anda.

Mendapatkan sertifikat TLS/SSL

Ada banyak cara untuk mendapatkan sertifikat TLS/SSL (sertifikat digital). Yang paling umum adalah membeli dari otoritas sertifikat (CA). Terlepas dari tempat mendapatkan sertifikat, Anda memerlukan file berikut:

  • Sertifikat. Sertifikat harus berisi rantai sertifikat penuh, dan harus "dikodekan PEM".
  • Kunci. Kuncinya juga harus dikodekan PEM.

Saat Anda meminta sertifikat, Anda harus memberikan FQDN alamat yang Anda rencanakan untuk digunakan layanan web (misalnya, www.contoso.com). Alamat yang dicap ke dalam sertifikat dan alamat yang digunakan klien dibandingkan dengan memverifikasi identitas layanan web. Jika alamat tersebut tidak cocok, klien akan mendapatkan pesan kesalahan.

Tip

Jika otoritas sertifikat tidak dapat menyediakan sertifikat dan kunci sebagai file yang dikodekan PEM, Anda dapat menggunakan utilitas seperti OpenSSL untuk mengubah format.

Peringatan

Gunakan sertifikat yang ditandatangani sendiri hanya untuk pengembangan. Jangan menggunakannya di lingkungan produksi. Sertifikat yang ditandatangani sendiri dapat menyebabkan masalah dalam aplikasi klien Anda. Untuk informasi selengkapnya, lihat dokumentasi untuk pustaka jaringan yang digunakan aplikasi klien Anda.

Mengaktifkan TLS dan menyebarkannya

Untuk penyebaran AKS, Anda dapat mengaktifkan penghentian TLS saat membuat atau melampirkan kluster AKS di ruang kerja AML. Pada waktu penyebaran model AKS, Anda dapat menonaktifkan penghentian TLS dengan objek konfigurasi penyebaran. Jika tidak, semua penyebaran model AKS secara default akan mengaktifkan penghentian TLS pada kluster AKS yang membuat atau melampirkan waktu.

Untuk penyebaran ACI, Anda dapat mengaktifkan penghentian TLS pada waktu penyebaran model dengan objek konfigurasi penyebaran.

Menyebarkan pada Azure Kubernetes Service

Catatan

Informasi di bagian ini juga berlaku saat Anda menyebarkan layanan web aman untuk perancang. Jika Anda tidak terbiasa menggunakan Python SDK, lihat Apa itu Azure Machine Learning SDK untuk Python?.

Saat membuat atau melampirkan kluster AKS di ruang kerja AML, Anda dapat mengaktifkan penghentian TLS dengan objek konfigurasi AksCompute.provisioning_configuration() dan AksCompute.attach_configuration() . Kedua metode mengembalikan objek konfigurasi yang memiliki metode enable_ssl dan Anda dapat menggunakan metode enable_ssl untuk mengaktifkan TLS.

Anda dapat mengaktifkan TLS baik dengan sertifikat Microsoft atau sertifikat kustom yang dibeli dari CA.

  • Saat Anda menggunakan sertifikat dari Microsoft, Anda harus menggunakan parameter leaf_domain_label Anda. Parameter ini menghasilkan nama DNS untuk layanan. Misalnya, nilai "contoso" membuat nama domain "contoso<six-random-characters>.<azureregion>cloudapp.azure.com", tempat <azureregion> merupakan wilayah yang berisi layanan. Secara opsional, Anda dapat menggunakan parameter overwrite_existing_domain untuk menimpa leaf_domain_label yang sudah ada. Contoh berikut menunjukkan cara membuat konfigurasi yang memungkinkan TLS dengan sertifikat Microsoft:

    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")
    

    Penting

    Saat menggunakan sertifikat dari Microsoft, Anda tidak perlu membeli sertifikat atau nama domain Anda sendiri.

    Peringatan

    Jika kluster AKS Anda dikonfigurasi dengan penyeimbang muatan internal, menggunakan sertifikat yang disediakan Microsoft tidak didukung dan Anda harus menggunakan sertifikat kustom untuk mengaktifkan TLS.

  • Saat Anda menggunakan sertifikat kustom yang Anda beli, Anda menggunakan parameter ssl_cert_pem_file, ssl_key_pem_file, dan ssl_cname. Contoh berikut menunjukkan cara menggunakan file .pem untuk membuat konfigurasi yang menggunakan sertifikat TLS/SSL yang Anda beli:

    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")
    

Untuk informasi selengkapnya tentang enable_ssl, lihat AksProvisioningConfiguration.enable_ssl() dan AksAttachConfiguration.enable_ssl().

Terapkan pada Azure Container Instances

Saat Anda menerapkan ke Azure Container Instances, Anda menyediakan nilai untuk parameter terkait TLS, seperti yang ditunjukkan oleh cuplikan kode berikut:

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")

Untuk informasi selengkapnya, lihat AciWebservice.deploy_configuration().

Memperbarui DNS Anda

Untuk penyebaran AKS dengan sertifikat kustom atau penyebaran ACI, Anda harus memperbarui rekaman DNS untuk mengarahkan ke alamat IP titik akhir penilaian.

Penting

Saat Anda menggunakan sertifikat dari Microsoft untuk penyebaran AKS, Anda tidak perlu memperbarui nilai DNS untuk kluster secara manual. Nilai harus diatur secara otomatis.

Anda dapat mengikuti langkah-langkah berikut untuk memperbarui catatan DNS untuk nama domain kustom Anda:

  1. Dapatkan penilaian alamat IP titik akhir dari URI titik akhir penilaian, yang biasanya dalam format http://104.214.29.152:80/api/v1/service/<service-name>/score . Dalam contoh ini, alamat IPnya adalah 104.214.29.152.

  2. Gunakan alat dari pendaftar nama domain Anda guna memperbarui catatan DNS untuk nama domain Anda. Rekaman memetakan FQDN (contohnya, www.contoso.com) ke alamat IP. Catatan harus menunjuk ke alamat IP dari titik akhir penilaian.

    Tip

    Microsoft tidak bertanggung jawab untuk memperbarui DNS untuk nama atau sertifikat DNS kustom Anda. Anda harus memperbaruinya dengan registrar nama domain Anda.

  3. Setelah pembaruan catatan DNS, Anda dapat memvalidasi resolusi DNS menggunakan perintah nslookup custom-domain-name. Jika catatan DNS diperbarui dengan benar, nama domain kustom akan menunjuk ke alamat IP titik akhir penilaian.

    Mungkin terdapat penundaan beberapa menit atau jam sebelum klien dapat menyelesaikan nama domain, bergantung pada pendaftar dan "waktu untuk live" (TTL) yang dikonfigurasi untuk nama domain.

Untuk informasi selengkapnya tentang resolusi DNS dengan Azure Machine Learning, lihat Cara menggunakan ruang kerja Anda dengan server DNS kustom.

Memperbarui sertifikat TLS/SSL

Sertifikat TLS/SSL kedaluwarsa dan harus diperpanjang. Biasanya hal ini terjadi setiap tahun. Gunakan informasi di bagian berikut untuk memperbarui dan memperpanjang sertifikat untuk model yang disebarkan ke Azure Kubernetes Service:

Memperbarui sertifikat yang dihasilkan Microsoft

Jika sertifikat awalnya dibuat oleh Microsoft (saat menggunakan leaf_domain_label untuk membuat layanan), sertifikat tersebut akan diperpanjang secara otomatis saat diperlukan. Jika Anda ingin memperbaruinya secara manual, gunakan salah satu contoh berikut untuk memperbarui sertifikat:

Penting

  • Jika sertifikat yang ada masih valid, gunakan renew=True (SDK) atau --ssl-renew (CLI) untuk memaksa konfigurasi memperbaruinya. Misalnya, jika sertifikat yang ada masih berlaku selama 10 hari dan Anda tidak menggunakan renew=True, sertifikat mungkin tidak diperpanjang.
  • Saat layanan awalnya disebarkan, layanan leaf_domain_label digunakan untuk membuat nama DNS menggunakan pola <leaf-domain-label>######.<azure-region>.cloudapp.azure.com. Untuk mempertahankan nama yang ada (termasuk 6 digit yang awalnya dihasilkan), gunakan nilai asli leaf_domain_label. Jangan sertakan 6 digit yang dihasilkan.

Menggunakan SDK

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)

Menggunakan CLI

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

Untuk informasi selengkapnya, lihat dokumen referensi berikut ini:

Memperbarui sertifikat kustom

Jika sertifikat awalnya dihasilkan oleh otoritas sertifikat, gunakan langkah-langkah berikut:

  1. Gunakan dokumentasi yang disediakan oleh otoritas sertifikat untuk memperpanjang sertifikat. Proses ini membuat file sertifikat baru.

  2. Gunakan SDK atau CLI untuk memperbarui layanan dengan sertifikat baru:

    Menggunakan SDK

    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)
    

    Menggunakan CLI

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

Untuk informasi selengkapnya, lihat dokumen referensi berikut ini:

Menonaktifkan TLS

Guna menonaktifkan TLS untuk model yang disebarkan ke Azure Kubernetes Service, buat SslConfiguration dengan status="Disabled", kemudian lakukan pembaruan:

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)

Langkah berikutnya

Pelajari cara: