Menggunakan rahasia kredensial autentikasi dalam pekerjaan Azure Machine Learning

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

Informasi autentikasi, seperti nama pengguna dan kata sandi Anda, adalah rahasia. Misalnya, jika Anda tersambung ke database eksternal untuk mengkueri data pelatihan, Anda perlu meneruskan nama pengguna dan kata sandi Anda ke konteks pekerjaan jarak jauh. Pengkodian nilai tersebut ke dalam skrip pelatihan dalam teks yang jelas tidak aman karena mengekspos rahasia.

Azure Key Vault menyediakan penyimpanan dan pengambilan rahasia yang aman. Dalam artikel ini, pelajari cara mengambil rahasia yang disimpan dalam brankas kunci dari pekerjaan pelatihan yang berjalan pada kluster komputasi.

Penting

Gunakan pustaka klien Rahasia Azure Key Vault untuk Python untuk menyimpan dan mengambil rahasia. Azure Machine Learning SDK v2 menyediakan informasi ruang kerja yang Anda perlukan untuk terhubung ke Key Vault Anda.

Prasyarat

Sebelum mengikuti langkah-langkah dalam artikel ini, pastikan Anda memiliki prasyarat berikut:

Petunjuk / Saran

Banyak prasyarat di bagian ini memerlukan kontributor, Pemilik, atau akses yang setara ke langganan Azure Anda, atau Grup Sumber Daya Azure yang berisi sumber daya. Anda mungkin perlu menghubungi administrator Azure Anda dan meminta mereka melakukan tindakan ini.

  • Langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning.

  • Python 3.10 atau yang lebih baru. Paket azure-keyvault-secrets dan azure-identity memerlukan Python 3.9 atau yang lebih baru, tetapi Python 3.10 atau yang lebih baru direkomendasikan.

  • Ruang kerja Azure Machine Learning. Jika Anda tidak memilikinya, gunakan langkah-langkah dalam artikel Membuat sumber daya untuk memulai untuk membuatnya.

  • Layanan Azure Key Vault. Jika Anda menggunakan artikel Membuat sumber daya untuk memulai untuk membuat ruang kerja, brankas kunci dibuat untuk Anda. Anda juga dapat membuat instans brankas kunci terpisah dengan menggunakan informasi di artikel Mulai Cepat: Membuat brankas kunci .

    Petunjuk / Saran

    Anda tidak perlu menggunakan brankas kunci yang sama dengan ruang kerja.

  • (Opsional) Kluster komputasi Azure Pembelajaran Mesin dikonfigurasi untuk menggunakan identitas terkelola. Kluster dapat dikonfigurasi untuk identitas terkelola yang ditetapkan sistem atau ditetapkan pengguna.

  • Jika pekerjaan Anda berjalan pada kluster komputasi, berikan akses identitas terkelola untuk kluster komputasi ke rahasia yang disimpan di Kunci Vault. Atau, jika pekerjaan berjalan pada komputasi tanpa server, berikan identitas terkelola yang ditentukan untuk akses pekerjaan ke rahasia. Metode yang digunakan untuk memberikan akses tergantung pada bagaimana brankas kunci Anda dikonfigurasi:

  • Nilai rahasia tersimpan di brankas kunci. Anda dapat mengambil nilai ini dengan menggunakan kunci. Untuk informasi selengkapnya, lihat Panduan Memulai Cepat: Menetapkan dan mengambil rahasia dari Azure Key Vault.

    Petunjuk / Saran

    Tautan panduan cepat mengarah ke langkah-langkah untuk menggunakan Azure Key Vault Python SDK. Dalam daftar isi di panel kiri terdapat tautan ke cara lain untuk mengatur kunci.

Mendapatkan URL brankas kunci

Saat Anda membuat ruang kerja Azure Machine Learning, brankas kunci default disediakan bersama ruang kerja tersebut. Gunakan MLClient untuk mengambil URL vault secara terprogram:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

subscription_id = "<subscription-id>"
resource_group = "<resource-group>"
workspace_name = "<workspace-name>"

ml_client = MLClient(
    DefaultAzureCredential(),
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=workspace_name,
)

workspace = ml_client.workspaces.get(workspace_name)
key_vault_arm_id = workspace.key_vault
vault_name = key_vault_arm_id.split("/")[-1]
vault_url = f"https://{vault_name}.vault.azure.net/"
print(vault_url)  # https://<your-vault-name>.vault.azure.net/

Anda kemudian dapat meneruskan nilai ini vault_url ke pekerjaan pelatihan Anda sebagai variabel lingkungan, seperti yang ditunjukkan dalam contoh berikut.

Petunjuk / Saran

Anda juga dapat menemukan URL brankas kunci di portal Microsoft Azure dengan menavigasi ke ruang kerja Anda dan memilih Gambaran Umum. Brankas kunci (key vault) tercantum dalam properti ruang kerja.

Mendapatkan rahasia

Anda bisa mendapatkan rahasia selama pelatihan dengan dua cara:

  • Gunakan identitas terkelola yang terkait dengan sumber daya komputasi tempat pekerjaan pelatihan berjalan.
  • Gunakan identitas Anda sendiri dengan meminta komputasi menjalankan pekerjaan atas nama Anda.
  1. Tambahkan paket azure-keyvault-secrets dan azure-identity ke dalam lingkungan Azure Machine Learning yang Anda gunakan untuk melatih model. Misalnya, tambahkan ke file conda yang digunakan untuk membangun lingkungan.

    Gunakan lingkungan ini untuk membangun gambar Docker tempat pekerjaan pelatihan berjalan pada kluster komputasi.

  2. Dari kode pelatihan Anda, gunakan pustaka klien Azure Identity SDK dan Key Vault untuk mendapatkan kredensial identitas terkelola dan autentikasi ke brankas kunci. Variabel KEY_VAULT_URL lingkungan diteruskan ke pekerjaan pada waktu pengiriman (lihat langkah 3):

    import os
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
    from azure.keyvault.secrets import SecretClient
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    
    vault_url = os.environ["KEY_VAULT_URL"]
    secret_client = SecretClient(vault_url=vault_url, credential=credential)
    

    Petunjuk / Saran

    Dalam produksi, atur AZURE_TOKEN_CREDENTIALS variabel lingkungan ke ManagedIdentityCredential untuk membatasi DefaultAzureCredential rantai hanya pada kredensial identitas terkelola. Perubahan ini meningkatkan waktu startup dan mengurangi ambiguitas.

  3. Setelah mengautentikasi, gunakan pustaka klien Key Vault untuk mengambil rahasia dengan menyediakan kunci terkait:

    secret = secret_client.get_secret("secret-name")
    print(secret.value)
    
  4. Saat Anda mengirimkan pekerjaan pelatihan, berikan URL Key Vault sebagai variabel lingkungan. Gunakan nilai yang vault_url diperoleh pada bagian Dapatkan URL brankas kunci:

    from azure.ai.ml import command
    
    job = command(
        code="./src",
        command="python train.py",
        environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:1",
        compute="cpu-cluster",
        environment_variables={"KEY_VAULT_URL": vault_url},
    )
    
    ml_client.jobs.create_or_update(job)
    

Untuk contoh mengirimkan pekerjaan pelatihan dengan menggunakan Azure Machine Learning Python SDK v2, lihat Melatih model dengan Python SDK v2.