Mengakses rahasia dari penyebaran online menggunakan injeksi rahasia (pratinjau)

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

Dalam artikel ini, Anda belajar menggunakan injeksi rahasia dengan titik akhir dan penyebaran online untuk mengakses rahasia dari penyimpanan rahasia.

Anda akan belajar untuk:

  • Menyiapkan identitas pengguna Anda dan izinnya
  • Membuat koneksi ruang kerja dan/atau brankas kunci untuk digunakan sebagai penyimpanan rahasia
  • Membuat titik akhir dan penyebaran dengan menggunakan fitur injeksi rahasia

Penting

Fitur ini masih dalam pratinjau umum. Versi pratinjau ini disediakan tanpa perjanjian tingkat layanan, dan tidak disarankan untuk beban kerja produksi. Fitur tertentu mungkin tidak didukung atau mungkin memiliki kemampuan terbatas.

Untuk mengetahui informasi selengkapnya, lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure.

Prasyarat

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

  • Instal dan konfigurasikan ekstensi Azure Pembelajaran Mesin CLI (v2) atau Azure Pembelajaran Mesin Python SDK (v2).

  • Grup Sumber Daya Azure, di mana Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses User Access Administrator dan Contributor. Anda akan memiliki grup sumber daya seperti itu jika Anda mengonfigurasi ekstensi Azure Pembelajaran Mesin seperti yang dinyatakan sebelumnya.

  • Ruang kerja Azure Machine Learning. Anda akan memiliki ruang kerja jika Mengonfigurasi ekstensi Azure Pembelajaran Mesin seperti yang dinyatakan sebelumnya.

  • Setiap model pembelajaran mesin terlatih siap untuk penilaian dan penyebaran.

Pilih penyimpanan rahasia

Anda dapat memilih untuk menyimpan rahasia Anda (seperti kunci API) menggunakan:

  • Koneksi ruang kerja di bawah ruang kerja: Jika Anda menggunakan penyimpanan rahasia semacam ini, Anda nantinya dapat memberikan izin ke identitas titik akhir (pada waktu pembuatan titik akhir) untuk membaca rahasia dari koneksi ruang kerja secara otomatis, asalkan kondisi tertentu terpenuhi. Untuk informasi selengkapnya, lihat tab identitas yang ditetapkan sistem dari bagian Buat titik akhir.
  • Brankas kunci yang belum tentu berada di bawah ruang kerja: Jika Anda menggunakan penyimpanan rahasia semacam ini, identitas titik akhir tidak akan diberikan izin untuk membaca rahasia dari brankas kunci secara otomatis. Oleh karena itu, jika Anda ingin menggunakan layanan brankas kunci terkelola seperti Microsoft Azure Key Vault sebagai penyimpanan rahasia, Anda harus menetapkan peran yang tepat nanti.

Menggunakan koneksi ruang kerja sebagai penyimpanan rahasia

Anda dapat membuat koneksi ruang kerja untuk digunakan dalam penyebaran Anda. Misalnya, Anda dapat membuat koneksi ke Layanan Microsoft Azure OpenAI dengan menggunakan Koneksi ion Ruang Kerja - Buat REST API.

Atau, Anda dapat membuat koneksi kustom dengan menggunakan azure Pembelajaran Mesin studio (lihat Cara membuat koneksi kustom untuk alur perintah) atau Azure AI Studio (lihat Cara membuat koneksi kustom di AI Studio).

  1. Membuat koneksi Azure OpenAI:

    PUT https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.MachineLearningServices/workspaces/{{workspaceName}}/connections/{{connectionName}}?api-version=2023-08-01-preview
    Authorization: Bearer {{token}}
    Content-Type: application/json
    
    {
        "properties": {
            "authType": "ApiKey",
            "category": "AzureOpenAI",
            "credentials": {
                "key": "<key>",
                "endpoint": "https://<name>.openai.azure.com/",
            },
            "expiryTime": null,
            "target": "https://<name>.openai.azure.com/",
            "isSharedToAll": false,
            "sharedUserList": [],
            "metadata": {
                "ApiType": "Azure"
            }
        }
    }
    
  2. Atau, Anda dapat membuat koneksi kustom:

    PUT https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.MachineLearningServices/workspaces/{{workspaceName}}/connections/{{connectionName}}?api-version=2023-08-01-preview
    Authorization: Bearer {{token}}
    Content-Type: application/json
    
    {
        "properties": {
            "authType": "CustomKeys",
            "category": "CustomKeys",
            "credentials": {
                "keys": {
                    "OPENAI_API_KEY": "<key>",
                    "SPEECH_API_KEY": "<key>"
                }
            },
            "expiryTime": null,
            "target": "_",
            "isSharedToAll": false,
            "sharedUserList": [],
            "metadata": {
                "OPENAI_API_BASE": "<oai endpoint>",
                "OPENAI_API_VERSION": "<oai version>",
                "OPENAI_API_TYPE": "azure",
                "SPEECH_REGION": "eastus",
            }
        }
    }
    
  3. Verifikasi bahwa identitas pengguna dapat membaca rahasia dari koneksi ruang kerja, dengan menggunakan Koneksi ion Ruang Kerja - Daftar Rahasia REST API (pratinjau).

    POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.MachineLearningServices/workspaces/{{workspaceName}}/connections/{{connectionName}}/listsecrets?api-version=2023-08-01-preview
    Authorization: Bearer {{token}}
    

Catatan

Cuplikan kode sebelumnya menggunakan token di Authorization header saat melakukan panggilan REST API. Anda bisa mendapatkan token dengan menjalankan az account get-access-token. Untuk informasi selengkapnya tentang mendapatkan token, lihat Mendapatkan token akses.

(Opsional) Menggunakan Azure Key Vault sebagai penyimpanan rahasia

Buat brankas kunci dan atur rahasia untuk digunakan dalam penyebaran Anda. Untuk informasi selengkapnya tentang membuat brankas kunci, lihat Mengatur dan mengambil rahasia dari Azure Key Vault menggunakan Azure CLI. Juga

  1. Buat Azure Key Vault:

    az keyvault create --name mykeyvault --resource-group myrg --location eastus
    
  2. Buat rahasia:

    az keyvault secret set --vault-name mykeyvault --name secret1 --value <value>
    

    Perintah ini mengembalikan versi rahasia yang dibuatnya. Anda dapat memeriksa id properti respons untuk mendapatkan versi rahasia. Respons yang dikembalikan terlihat seperti https://mykeyvault.vault.azure.net/secrets/<secret_name>/<secret_version>.

  3. Verifikasi bahwa identitas pengguna dapat membaca rahasia dari brankas kunci:

    az keyvault secret show --vault-name mykeyvault --name secret1 --version <secret_version>
    

Penting

Jika Anda menggunakan brankas kunci sebagai penyimpanan rahasia untuk injeksi rahasia, Anda harus mengonfigurasi model izin brankas kunci sebagai kontrol akses berbasis peran (RBAC) Azure. Untuk informasi selengkapnya, lihat Azure RBAC vs. kebijakan akses untuk Key Vault.

Pilih identitas pengguna

Pilih identitas pengguna yang akan Anda gunakan untuk membuat titik akhir online dan penyebaran online. Identitas pengguna ini dapat berupa akun pengguna, akun perwakilan layanan, atau identitas terkelola di ID Microsoft Entra. Untuk menyiapkan identitas pengguna, ikuti langkah-langkah dalam Menyiapkan autentikasi untuk sumber daya dan alur kerja Azure Pembelajaran Mesin.

(Opsional) Menetapkan peran ke identitas pengguna

  • Jika identitas pengguna Anda ingin identitas yang ditetapkan sistem (SAI) titik akhir secara otomatis diberikan izin untuk membaca rahasia dari koneksi ruang kerja, identitas pengguna harus memiliki Azure Machine Learning Workspace Connection Secrets Reader peran (atau lebih tinggi) pada cakupan ruang kerja.

    • Admin yang memiliki Microsoft.Authorization/roleAssignments/write izin dapat menjalankan perintah CLI untuk menetapkan peran ke identitas pengguna:

      az role assignment create --assignee <UserIdentityID> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
      

    Catatan

    Identitas yang ditetapkan sistem (SAI) titik akhir tidak akan secara otomatis diberikan izin untuk membaca rahasia dari brankas kunci. Oleh karena itu, identitas pengguna tidak perlu diberi peran untuk Key Vault.

  • Jika Anda ingin menggunakan identitas yang ditetapkan pengguna (UAI) untuk titik akhir, Anda tidak perlu menetapkan peran ke identitas pengguna Anda. Sebaliknya, jika Anda ingin menggunakan fitur injeksi rahasia, Anda harus menetapkan peran ke UAI titik akhir secara manual.

    • Admin yang memiliki Microsoft.Authorization/roleAssignments/write izin dapat menjalankan perintah berikut untuk menetapkan peran ke identitas titik akhir:

      Untuk koneksi ruang kerja:

      az role assignment create --assignee <EndpointIdentityID> --role "Azure Machine Learning Workspace Connection Secrets Reader" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.MachineLearningServices/workspaces/<workspaceName>
      

      Untuk brankas kunci:

      az role assignment create --assignee <EndpointIdentityID> --role "Key Vault Secrets User" --scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.KeyVault/vaults/<vaultName>
      
  • Verifikasi bahwa identitas (identitas pengguna atau identitas titik akhir) memiliki peran yang ditetapkan, dengan membuka sumber daya di portal Azure. Misalnya, di ruang kerja Azure Pembelajaran Mesin atau Key Vault:

    1. Pilih tab Kontrol akses (IAM).
    2. Pilih tombol Periksa akses dan temukan identitas.
    3. Verifikasi bahwa peran yang tepat muncul di bawah tab Penetapan peran saat ini.

Buat titik akhir

Jika Anda menggunakan identitas yang ditetapkan sistem (SAI) sebagai identitas titik akhir, tentukan apakah Anda ingin menerapkan akses ke penyimpanan rahasia default (yaitu, koneksi ruang kerja di bawah ruang kerja) ke identitas titik akhir.

  1. Buat endpoint.yaml file:

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: my-endpoint
    auth_mode: key
    properties:
        enforce_access_to_default_secret_stores: enabled  # default: disabled
    
  2. Buat titik akhir, menggunakan endpoint.yaml file:

    az ml online-endpoint create -f endpoint.yaml
    

Jika Anda tidak menentukan identity properti dalam definisi titik akhir, titik akhir akan menggunakan SAI secara default.

Jika kondisi berikut terpenuhi, identitas titik akhir akan secara otomatis diberikan Azure Machine Learning Workspace Connection Secrets Reader peran (atau lebih tinggi) pada cakupan ruang kerja:

  • Identitas pengguna yang membuat titik akhir memiliki izin untuk membaca rahasia dari koneksi ruang kerja (Microsoft.MachineLearningServices/workspaces/connections/listsecrets/action).
  • Titik akhir menggunakan SAI.
  • Titik akhir didefinisikan dengan bendera untuk menerapkan akses ke penyimpanan rahasia default (koneksi ruang kerja di bawah ruang kerja saat ini) saat membuat titik akhir.

Identitas titik akhir tidak akan secara otomatis diberikan peran untuk membaca rahasia dari Key Vault. Jika Anda ingin menggunakan Key Vault sebagai penyimpanan rahasia, Anda perlu menetapkan peran yang tepat secara manual seperti Key Vault Secrets User ke identitas titik akhir pada cakupan Key Vault. Untuk informasi selengkapnya tentang peran, lihat Peran bawaan Azure untuk operasi sarana data Key Vault.

Membuat penyebaran

  1. Tulis skrip penilaian atau Dockerfile dan skrip terkait sehingga penyebaran dapat menggunakan rahasia melalui variabel lingkungan.

    • Anda tidak perlu memanggil API pengambilan rahasia untuk koneksi ruang kerja atau brankas kunci. Variabel lingkungan diisi dengan rahasia ketika kontainer pengguna dalam penyebaran dimulai.

    • Nilai yang disuntikkan ke dalam variabel lingkungan dapat menjadi salah satu dari tiga jenis:

      • Seluruh respons List Secrets API (pratinjau). Anda harus memahami struktur respons API, mengurainya, dan menggunakannya di kontainer pengguna Anda.
      • Rahasia individu atau metadata dari koneksi ruang kerja. Anda dapat menggunakannya tanpa memahami struktur respons API koneksi ruang kerja.
      • Versi rahasia individual dari Key Vault. Anda dapat menggunakannya tanpa memahami struktur respons API Key Vault.
  2. Mulai pembuatan penyebaran, menggunakan skrip penilaian (jika Anda menggunakan model kustom) atau Dockerfile (jika Anda mengambil pendekatan BYOC untuk penyebaran). Tentukan variabel lingkungan yang diharapkan pengguna dalam kontainer pengguna.

    Jika nilai yang dipetakan ke variabel lingkungan mengikuti pola tertentu, identitas titik akhir akan digunakan untuk melakukan pengambilan dan injeksi rahasia.

    Pola Perilaku
    ${{azureml://connections/<connection_name>}} Seluruh respons List Secrets API (pratinjau) disuntikkan ke dalam variabel lingkungan.
    ${{azureml://connections/<connection_name>/credentials/<credential_name>}} Nilai kredensial disuntikkan ke dalam variabel lingkungan.
    ${{azureml://connections/<connection_name>/metadata/<metadata_name>}} Nilai metadata disuntikkan ke dalam variabel lingkungan.
    ${{azureml://connections/<connection_name>/target}} Nilai target (jika berlaku) disuntikkan ke dalam variabel lingkungan.
    ${{keyvault:https://<keyvault_name>.vault.azure.net/secrets/<secret_name>/<secret_version>}} Nilai versi rahasia disuntikkan ke dalam variabel lingkungan.

    Misalnya:

    1. Buat deployment.yaml:

      $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
      name: blue
      endpoint_name: my-endpoint
      #…
      environment_variables:
          AOAI_CONNECTION: ${{azureml://connections/aoai_connection}}
          LANGCHAIN_CONNECTION: ${{azureml://connections/multi_connection_langchain}}
      
          OPENAI_KEY: ${{azureml://connections/multi_connection_langchain/credentials/OPENAI_API_KEY}}
          OPENAI_VERSION: ${{azureml://connections/multi_connection_langchain/metadata/OPENAI_API_VERSION}}
      
          USER_SECRET_KV1_KEY: ${{keyvault:https://mykeyvault.vault.azure.net/secrets/secret1/secretversion1}}
      
    2. Buat penyebaran:

      az ml online-deployment create -f deployment.yaml
      

enforce_access_to_default_secret_stores Jika bendera diatur untuk titik akhir, izin identitas pengguna untuk membaca rahasia dari koneksi ruang kerja akan diperiksa baik pada waktu pembuatan titik akhir maupun pembuatan penyebaran. Jika identitas pengguna tidak memiliki izin, pembuatan akan gagal.

Pada waktu pembuatan penyebaran, jika ada variabel lingkungan yang dipetakan ke nilai yang mengikuti pola dalam tabel sebelumnya, pengambilan rahasia dan injeksi akan dilakukan dengan identitas titik akhir (baik SAI atau UAI). Jika identitas titik akhir tidak memiliki izin untuk membaca rahasia dari penyimpanan rahasia yang ditunjuk (baik koneksi ruang kerja atau brankas kunci), pembuatan penyebaran akan gagal. Selain itu, jika referensi rahasia yang ditentukan tidak ada di penyimpanan rahasia, pembuatan penyebaran akan gagal.

Untuk informasi selengkapnya tentang kesalahan yang dapat terjadi selama penyebaran Titik akhir online Azure Pembelajaran Mesin, lihat Kesalahan Injeksi Rahasia.

Mengonsumsi rahasia

Anda dapat menggunakan rahasia dengan mengambilnya dari variabel lingkungan dalam kontainer pengguna yang berjalan dalam penyebaran Anda.