Menyiapkan autentikasi untuk sumber daya dan alur kerja Azure Machine Learning

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Pelajari cara menyiapkan autentikasi ke ruang kerja Azure Pembelajaran Mesin Anda dari Azure CLI atau Azure Pembelajaran Mesin SDK v2. Autentikasi ke ruang kerja Azure Pembelajaran Mesin Anda didasarkan pada ID Microsoft Entra untuk sebagian besar hal. Secara umum, ada empat alur kerja autentikasi yang dapat Anda gunakan saat menyambungkan ke ruang kerja:

  • Interaktif: Anda menggunakan akun Anda di ID Microsoft Entra untuk mengautentikasi secara langsung, atau untuk mendapatkan token yang digunakan untuk autentikasi. Autentikasi interaktif digunakan selama eksperimen dan pengembangan berulang. Autentikasi interaktif memungkinkan Anda mengontrol akses ke sumber daya (seperti layanan web) pada basis per pengguna.

  • Perwakilan layanan: Anda membuat akun perwakilan layanan di ID Microsoft Entra, dan menggunakannya untuk mengautentikasi atau mendapatkan token. Perwakilan layanan digunakan saat Anda memerlukan proses otomatis untuk mengautentikasi ke layanan tanpa memerlukan interaksi pengguna. Misalnya, integrasi berkelanjutan dan skrip penyebaran yang melatih dan menguji model setiap kali kode pelatihan berubah.

  • Sesi Azure CLI: Anda menggunakan sesi Azure CLI yang aktif untuk mengautentikasi. Ekstensi Azure CLI untuk Pembelajaran Mesin (ekstensi ml atau CLI v2) adalah alat baris perintah untuk bekerja dengan Azure Machine Learning. Anda dapat masuk ke Azure melalui Azure CLI di stasiun kerja lokal Anda, tanpa menyimpan info masuk dalam kode Python atau meminta pengguna untuk mengautentikasi. Demikian pula, Anda dapat menggunakan kembali skrip yang sama sebagai bagian dari integrasi berkelanjutan dan alur penyebaran, sambil mengautentikasi Azure CLI dengan identitas perwakilan layanan.

  • Identitas terkelola: Saat menggunakan SDK Azure Machine Learning SDK v2 di instans komputasi, atau di Azure Virtual Machine Anda dapat menggunakan identitas terkelola untuk Azure. Alur kerja ini memungkinkan VM terhubung ke ruang kerja menggunakan identitas terkelola, tanpa menyimpan kredensial dalam kode Python atau meminta pengguna untuk mengautentikasi. Kluster komputasi Azure Machine Learning juga dapat dikonfigurasi untuk menggunakan identitas terkelola guna mengakses ruang kerja saat melatih model.

Terlepas dari alur kerja autentikasi yang digunakan, kontrol akses berbasis peran Azure (Azure RBAC) digunakan untuk mencakup tingkat akses (otorisasi) yang diizinkan ke sumber daya. Misalnya, admin atau proses otomatisasi mungkin memiliki akses untuk membuat instans komputasi, tetapi tidak menggunakannya, sementara ilmuwan data dapat menggunakannya, tetapi tidak menghapus atau membuatnya. Untuk informasi selengkapnya, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

Microsoft Entra Conditional Access dapat digunakan untuk mengontrol atau membatasi akses lebih lanjut ke ruang kerja untuk setiap alur kerja autentikasi. Misalnya, admin hanya dapat mengizinkan akses ruang kerja dari perangkat terkelola.

Prasyarat

Microsoft Entra ID

Semua alur kerja autentikasi untuk ruang kerja Anda mengandalkan ID Microsoft Entra. Jika Anda ingin pengguna mengautentikasi menggunakan akun individual, mereka harus memiliki akun di ID Microsoft Entra Anda. Jika Anda ingin menggunakan perwakilan layanan, perwakilan layanan tersebut harus ada di ID Microsoft Entra Anda. Identitas terkelola juga merupakan fitur ID Microsoft Entra.

Untuk informasi selengkapnya tentang ID Microsoft Entra, lihat Apa itu autentikasi Microsoft Entra.

Setelah Anda membuat akun Microsoft Entra, lihat Mengelola akses ke ruang kerja Azure Pembelajaran Mesin untuk informasi tentang memberi mereka akses ke ruang kerja dan operasi lain di Azure Pembelajaran Mesin.

Menggunakan autentikasi interaktif

BERLAKU UNTUK: Python SDK azure-ai-ml v2 (saat ini)

Autentikasi interaktif menggunakan paket Azure Identity untuk Python. Sebagian besar contoh menggunakan DefaultAzureCredential untuk mengakses kredensial Anda. Ketika token diperlukan, token meminta satu menggunakan beberapa identitas (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) pada gilirannya, berhenti ketika satu menyediakan token. Untuk informasi selengkapnya, lihat referensi kelas DefaultAzureCredential.

Berikut ini adalah contoh penggunaan DefaultAzureCredential untuk mengautentikasi. Jika autentikasi menggunakan DefaultAzureCredential gagal, fallback autentikasi melalui browser web Anda akan digunakan sebagai gantinya.

from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

try:
    credential = DefaultAzureCredential()
    # Check if given credential can get token successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
    # This will open a browser page for
    credential = InteractiveBrowserCredential()

Setelah objek kredensial dibuat, kelas MLClient digunakan untuk menyambungkan ke ruang kerja. Misalnya, kode berikut menggunakan metode from_config() untuk memuat informasi koneksi:

from azure.ai.ml import MLClient
try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Mengonfigurasi perwakilan layanan

Untuk menggunakan perwakilan layanan (SP), Anda harus terlebih dahulu membuat SP. Kemudian berikan akses ke ruang kerja Anda. Seperti yang disebutkan sebelumnya, kontrol akses berbasis peran Azure (Azure RBAC) digunakan untuk mengontrol akses, jadi Anda juga harus memutuskan akses apa yang akan diberikan kepada SP.

Penting

Saat menggunakan perwakilan layanan, berikan akses minimum yang diperlukan untuk tugas yang digunakan. Misalnya, Anda tidak akan memberikan akses kepada pemilik atau kontributor utama layanan jika semua yang digunakan adalah membaca token akses untuk penyebaran web.

Alasan untuk memberikan akses paling sedikit adalah karena perwakilan layanan menggunakan kata sandi untuk mengautentikasi, dan kata sandi dapat disimpan sebagai bagian dari skrip otomatisasi. Jika kata sandi bocor, memiliki akses minimum yang diperlukan untuk tugas tertentu akan meminimalkan penggunaan SP yang berbahaya.

Cara termudah untuk membuat SP dan memberikan akses ke ruang kerja Anda adalah dengan menggunakan Azure CLI. Untuk membuat perwakilan layanan dan memberinya akses ke ruang kerja Anda, gunakan langkah-langkah berikut:

Catatan

Anda harus menjadi admin di langganan untuk melakukan semua langkah ini.

  1. Autentikasi ke langganan Azure Anda:

    az login
    

    Jika CLI dapat membuka browser default Anda, CLI akan melakukannya dan memuat halaman masuk. Jika tidak, Anda perlu membuka browser dan mengikuti instruksi pada baris perintah. Petunjuknya meliputi penjelajahan ke https://aka.ms/devicelogin dan memasukkan kode otorisasi.

    Jika Anda memiliki beberapa langganan Azure, Anda dapat menggunakan perintah az account set -s <subscription name or ID> untuk mengatur langganan. Untuk informasi selengkapnya, lihat Menggunakan beberapa langganan Azure.

    Untuk metode autentikasi lainnya, lihat Masuk dengan Azure CLI.

  2. Buat perwakilan layanan. Dalam contoh berikut, SP bernama ml-auth dibuat:

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    Parameter --json-auth tersedia dalam versi >Azure CLI = 2.51.0. Versi sebelum penggunaan --sdk-authini .

    Outputnya akan menjadi JSON yang mirip dengan berikut ini. Perhatikan bidang clientId, clientSecret, dan tenantId, karena Anda akan memerlukannya untuk langkah lain dalam artikel ini.

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. Ambil detail untuk perwakilan layanan dengan menggunakan nilai clientId yang ditampilkan pada langkah sebelumnya:

    az ad sp show --id your-client-id
    

    JSON berikut adalah contoh sederhana output dari perintah. Catat bidang objectId, karena Anda akan membutuhkan nilainya untuk langkah berikutnya.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Untuk memberikan akses ke ruang kerja dan sumber daya lain yang digunakan oleh Azure Machine Learning, gunakan informasi dalam artikel berikut ini:

    Penting

    Akses pemilik memungkinkan perwakilan layanan melakukan hampir semua operasi di ruang kerja Anda. Hal ini digunakan dalam dokumen ini untuk menunjukkan cara memberikan akses; di lingkungan produksi, Microsoft merekomendasikan untuk memberikan akses minimum kepada perwakilan layanan yang diperlukan untuk menjalankan peran yang Anda inginkan. Untuk informasi tentang membuat peran kustom dengan akses yang diperlukan untuk skenario Anda, lihat Mengelola akses ke ruang kerja Azure Machine Learning.

Mengonfigurasi identitas terkelola

Penting

Identitas terkelola hanya didukung saat menggunakan Azure Pembelajaran Mesin SDK dari Azure Virtual Machine, kluster komputasi Azure Pembelajaran Mesin, atau instans komputasi.

Identitas terkelola dengan VM

  1. Aktifkan identitas terkelola yang ditetapkan sistem untuk sumber daya Azure di VM.

  2. Dari Portal Microsoft Azure, pilih ruang kerja Anda, lalu pilih Access Control (IAM).

  3. Pilih Tambahkan, Tambahkan Penetapan Peran untuk membuka Tambahkan halaman penetapan peran.

  4. Pilih peran yang ingin Anda tetapkan identitas terkelolanya. Misalnya, Pembaca. Untuk langkah-langkah mendetail, lihat Menetapkan peran Azure menggunakan portal Azure.

Identitas terkelola dengan kluster komputasi

Untuk informasi selengkapnya, lihat Menyiapkan identitas terkelola untuk kluster komputasi.

Identitas terkelola dengan instans komputasi

Untuk informasi selengkapnya, lihat Menyiapkan identitas terkelola untuk instans komputasi.

Menggunakan autentikasi perwakilan layanan

BERLAKU UNTUK: Python SDK azure-ai-ml v2 (saat ini)

Mengautentikasi dengan perwakilan layanan menggunakan paket Azure Identity untuk Python. Kelas DefaultAzureCredential mencari variabel lingkungan berikut dan menggunakan nilai saat mengautentikasi sebagai perwakilan layanan:

  • AZURE_CLIENT_ID - ID klien ditampilkan saat Anda membuat perwakilan layanan.
  • AZURE_TENANT_ID - ID penyewa ditampilkan saat Anda membuat perwakilan layanan.
  • AZURE_CLIENT_SECRET - Kata sandi/informasi masuk yang dihasilkan untuk perwakilan layanan.

Tip

Selama pengembangan, pertimbangkan untuk menggunakan paket python-dotenv untuk mengatur variabel lingkungan ini. Python-dotenv memuat variabel lingkungan dari file .env. File .gitignore standar untuk Python secara otomatis mengecualikan file .env, sehingga mereka tidak boleh dimasukkan ke repositori GitHub apa pun selama pengembangan.

Contoh berikut menunjukkan penggunaan python-dotenv untuk memuat variabel lingkungan dari file .env lalu menggunakan DefaultAzureCredential untuk membuat objek informasi masuk:

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

Setelah objek kredensial dibuat, kelas MLClient digunakan untuk menyambungkan ke ruang kerja. Misalnya, kode berikut menggunakan metode from_config() untuk memuat informasi koneksi:

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Perwakilan layanan juga dapat digunakan untuk mengautentikasi ke REST API Azure Machine Learning. Anda menggunakan alur pemberian kredensial klien Microsoft Entra ID, yang memungkinkan panggilan layanan-ke-layanan untuk autentikasi headless dalam alur kerja otomatis.

Penting

Jika saat ini Anda menggunakan Pustaka Autentikasi Azure Active Directory (ADAL) untuk mendapatkan info masuk, sebaiknya Anda Bermigrasi ke Pustaka Autentikasi Microsoft (MSAL). Dukungan ADAL berakhir pada 30 Juni 2022.

Untuk informasi dan sampel tentang autentikasi dengan MSAL, lihat artikel berikut:

Menggunakan autentikasi identitas terkelola

BERLAKU UNTUK: Python SDK azure-ai-ml v2 (saat ini)

Mengautentikasi dengan identitas terkelola menggunakan paket Azure Identity untuk Python. Untuk mengautentikasi ke ruang kerja dari VM atau kluster komputasi yang dikonfigurasi dengan identitas terkelola, gunakan kelas DefaultAzureCredential. Kelas ini secara otomatis mendeteksi apakah identitas terkelola sedang digunakan, dan menggunakan identitas terkelola untuk mengautentikasi ke layanan Azure.

Contoh berikut menunjukkan menggunakan kelas DefaultAzureCredential untuk membuat objek kredensial, lalu menggunakan kelas MLClient untuk menyambungkan ke ruang kerja:

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Menggunakan Akses Bersyarat

Sebagai administrator, Anda dapat menerapkan kebijakan Akses Bersyarat Microsoft Entra untuk pengguna yang masuk ke ruang kerja. Misalnya, Anda dapat memerlukan autentikasi dua faktor atau mengizinkan proses masuk hanya dari perangkat terkelola. Untuk menggunakan Akses Bersyar untuk ruang kerja Azure Pembelajaran Mesin secara khusus, tetapkan kebijakan Akses Bersyar ke aplikasi bernama Azure Pembelajaran Mesin. ID aplikasi adalah 0736f41a-0425-bdb5-1563eff02385.

Langkah berikutnya