Permintaan aplikasi ke sebagian besar layanan Azure harus diautentikasi dengan kunci atau koneksi tanpa kata sandi. Pengembang harus rajin untuk tidak pernah mengekspos kunci di lokasi yang tidak aman. Siapa pun yang mendapatkan akses ke kunci dapat mengautentikasi ke layanan. Autentikasi tanpa kunci menawarkan manfaat manajemen dan keamanan yang ditingkatkan atas kunci akun karena tidak ada kunci (atau string koneksi) untuk disimpan.
Koneksi tanpa kunci diaktifkan dengan langkah-langkah berikut:
- Konfigurasikan autentikasi Anda.
- Atur variabel lingkungan, sesuai kebutuhan.
- Gunakan jenis kredensial pustaka Azure Identity untuk membuat objek klien Azure OpenAI.
Autentikasi
Autentikasi ke ID Microsoft Entra diperlukan untuk menggunakan pustaka klien Azure.
Autentikasi berbeda berdasarkan lingkungan tempat aplikasi berjalan:
Blok Pembangun Tanpa Kunci Azure OpenAI
Gunakan tautan berikut untuk menjelajahi templat Azure OpenAI Keyless Building Block AI. Templat ini menyediakan akun Azure OpenAI dengan izin peran RBAC akun pengguna Anda untuk autentikasi tanpa kunci (Microsoft Entra) untuk mengakses SDK OPENAI API.
Catatan
Artikel ini menggunakan satu atau beberapa templat aplikasi AI sebagai dasar untuk contoh dan panduan dalam artikel. Templat aplikasi AI memberi Anda implementasi referensi yang terawat dan mudah disebarkan dengan baik yang membantu memastikan titik awal berkualitas tinggi untuk aplikasi AI Anda.
Mengautentikasi untuk pengembangan lokal
Mengautentikasi untuk lingkungan yang dihosting Azure
Temukan peran untuk penggunaan Azure OpenAI Anda. Bergantung pada bagaimana Anda berniat untuk mengatur peran tersebut, Anda memerlukan nama atau ID.
| Nama peran |
ID Peran |
| Untuk Azure CLI atau Azure PowerShell, Anda bisa menggunakan nama peran. |
Untuk Bicep, Anda memerlukan ID peran. |
Gunakan tabel berikut untuk memilih peran dan ID.
| Gunakan huruf besar |
Nama peran |
ID Peran |
| Asisten |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
| Penyelesaian obrolan |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Pilih jenis identitas yang akan digunakan.
-
Identitas pribadi: Identitas pribadi Anda terkait dengan masuk ke Azure.
-
Identitas terkelola: Identitas yang dikelola oleh dan dibuat untuk digunakan di Azure. Untuk identitas terkelola, buat identitas terkelola yang ditetapkan pengguna. Saat Anda membuat identitas terkelola, Anda memerlukan
Client ID, juga dikenal sebagai app ID.
Untuk menemukan identitas pribadi Anda, gunakan salah satu perintah berikut. Gunakan ID sebagai di <identity-id> langkah berikutnya.
Untuk pengembangan lokal, untuk mendapatkan ID identitas Anda sendiri, gunakan perintah berikut. Anda perlu masuk sebelum az login menggunakan perintah ini.
az ad signed-in-user show \
--query id -o tsv
Untuk pengembangan lokal, untuk mendapatkan ID identitas Anda sendiri, gunakan perintah berikut. Anda perlu masuk sebelum Connect-AzAccount menggunakan perintah ini.
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
Identitas orang atau layanan yang menjalankan penyebaran diatur ke principalId parameter saat menggunakan Bicep yang disebarkan dengan Azure Developer CLI.
Variabel berikut main.parameters.json diatur ke identitas yang menjalankan proses.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Untuk digunakan di Azure, tentukan identitas terkelola yang ditetapkan pengguna sebagai bagian dari proses penyebaran Bicep. Buat identitas terkelola yang ditetapkan pengguna terpisah dari identitas yang menjalankan proses.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: managedIdentityName
location: location
}
Gunakan langkah-langkah yang ditemukan di sini: temukan ID objek pengguna di portal Azure.
Tetapkan peran kontrol akses berbasis peran (RBAC) ke identitas untuk grup sumber daya.
Untuk memberikan izin identitas Anda ke sumber daya Anda melalui RBAC, tetapkan peran menggunakan perintah Azure CLI az role assignment create.
az role assignment create \
--role "Cognitive Services OpenAI User" \
--assignee "<identity-id>" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Untuk memberikan izin aplikasi Anda ke sumber daya Azure OpenAI Anda melalui RBAC, tetapkan peran menggunakan cmdlet Azure PowerShell New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Gunakan templat Azure OpenAI Bicep berikut untuk membuat sumber daya dan mengatur autentikasi untuk identityId. Bicep memerlukan ID peran. Cuplikan name Bicep yang ditunjukkan ini bukan peran Azure; khusus untuk penyebaran Bicep.
// main.bicep
param environment string = 'production'
// USER ROLES
module openAiRoleUser 'core/security/role.bicep' = {
scope: openAiResourceGroup
name: 'openai-role-user'
params: {
principalId: (environment == 'development') ? principalId : userAssignedManagedIdentity
principalType: (environment == 'development') ? 'User' : 'ServicePrincipal'
roleDefinitionId: '5e0bd9bd-7b93-4f28-af87-19fc36ad61bd'
}
}
Bicep generik berikut dipanggil dari main.bicep untuk membuat peran apa pun.
// core/security/role.bicep
metadata description = 'Creates a role assignment for an identity.'
param principalId string // passed in from main.bicep identityId
@allowed([
'Device'
'ForeignGroup'
'Group'
'ServicePrincipal'
'User'
])
param principalType string = 'ServicePrincipal'
param roleDefinitionId string
resource role 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(subscription().id, resourceGroup().id, principalId, roleDefinitionId)
properties: {
principalId: principalId
principalType: principalType
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', roleDefinitionId)
}
}
Gunakan langkah-langkah yang ditemukan saat membuka halaman Tambahkan penetapan peran di portal Azure.
Jika berlaku, ganti <identity-id>, <subscription-id>, dan <resource-group-name> dengan nilai aktual Anda.
Untuk menyambungkan ke Azure OpenAI, kode Anda perlu mengetahui titik akhir sumber daya Anda, dan mungkin memerlukan variabel lingkungan lain.
Buat variabel lingkungan untuk titik akhir Azure OpenAI Anda.
-
AZURE_OPENAI_ENDPOINT: URL ini adalah titik akses untuk sumber daya Azure OpenAI Anda.
Buat variabel lingkungan berdasarkan lokasi tempat aplikasi Anda berjalan:
| Lokasi |
Identitas |
Deskripsi |
| Lokal |
Pribadi |
Untuk runtime lokal dengan identitas pribadi Anda, masuk untuk membuat kredensial Anda dengan alat. |
| Cloud Azure |
Identitas terkelola yang ditetapkan pengguna |
Buat variabel lingkungan yang AZURE_CLIENT_ID berisi ID klien identitas terkelola yang ditetapkan pengguna untuk mengautentikasi sebagai. |
Menginstal pustaka klien Azure Identity
Gunakan tautan berikut untuk menginstal pustaka klien Azure Identity.
Instal pustaka klien .NET Azure Identity:
dotnet add package Azure.Identity
Instal pustaka klien Go Azure Identity:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Instal pustaka klien Java Azure Identity dengan file POM berikut:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.18.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Instal pustaka klien JavaScript Azure Identity:
npm install --save @azure/identity
Instal pustaka klien Python Azure Identity:
pip install azure-identity
Gunakan DefaultAzureCredential
Pustaka DefaultAzureCredential Azure Identity memungkinkan pelanggan untuk menjalankan kode yang sama di lingkungan pengembangan lokal dan di Azure Cloud.
Untuk informasi selengkapnya tentang DefaultAzureCredential untuk .NET, lihat gambaran umum DefaultAzureCredential.
Lakukan salah satu pendekatan berikut untuk mengatur ID klien identitas terkelola yang ditetapkan pengguna:
Atur variabel lingkungan AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential tanpa parameter menggunakan nilai variabel lingkungan ini, jika ada.
using Azure;
using Azure.AI.OpenAI;
using Azure.Identity;
using System;
using static System.Environment;
string endpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
OpenAIClient client = new(new Uri(endpoint), new DefaultAzureCredential());
Atur properti ManagedIdentityClientId di DefaultAzureCredentialOptions:
using Azure;
using Azure.AI.OpenAI;
using Azure.Identity;
using System;
using static System.Environment;
string endpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
var credential = new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
ManagedIdentityClientId = "<user_assigned_client_id>"
});
OpenAIClient client = new(new Uri(endpoint), credential);
Untuk informasi selengkapnya tentang DefaultAzureCredential untuk Go, lihat gambaran umum DefaultAzureCredential.
import (
"log"
"github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
)
func main() {
dac, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("ERROR: %s", err)
}
client, err := azopenai.NewClient(os.Getenv("AZURE_OPENAI_ENDPOINT"), dac, nil)
if err != nil {
log.Fatalf("ERROR: %s", err)
}
_ = client
}
Untuk informasi selengkapnya tentang DefaultAzureCredential untuk Java, lihat gambaran umum DefaultAzureCredential.
Lakukan salah satu pendekatan berikut untuk mengatur ID klien identitas terkelola yang ditetapkan pengguna:
Atur variabel lingkungan AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential tanpa parameter menggunakan nilai variabel lingkungan ini, jika ada.
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.ai.openai.OpenAIClient;
import com.azure.ai.openai.OpenAIClientBuilder;
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
OpenAIClient client = new OpenAIClientBuilder()
.credential(credential)
.endpoint(endpoint)
.buildClient();
Tetapkan identitas terkelola tertentu yang ditetapkan pengguna dengan DefaultAzureCredential dengan menggunakan DefaultAzureCredentialBuilder untuk mengonfigurasinya dengan ID klien:
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.ai.openai.OpenAIClient;
import com.azure.ai.openai.OpenAIClientBuilder;
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
String userAssignedClientId = "<your managed identity client ID>";
TokenCredential dacWithUserAssignedManagedIdentity
= new DefaultAzureCredentialBuilder().managedIdentityClientId(userAssignedClientId).build();
OpenAIClient client = new OpenAIClientBuilder()
.credential(dacWithUserAssignedManagedIdentity)
.endpoint(endpoint)
.buildClient();
Untuk informasi selengkapnya tentang DefaultAzureCredential untuk JavaScript, lihat gambaran umum DefaultAzureCredential.
Lakukan salah satu pendekatan berikut untuk mengatur ID klien identitas terkelola yang ditetapkan pengguna:
Atur variabel lingkungan AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential tanpa parameter menggunakan nilai variabel lingkungan ini, jika ada.
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { AzureOpenAI } from "openai";
const credential = new DefaultAzureCredential();
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "<endpoint>";
const deployment = "<your Azure OpenAI deployment name>";
const apiVersion = "2024-10-21";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
Tetapkan identitas terkelola tertentu yang ditetapkan pengguna dengan DefaultAzureCredential dengan menggunakan parameter managedIdentityClientId untuk mengonfigurasinya dengan ID klien:
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
import { AzureOpenAI } from "openai";
const managedIdentityClientId = "<your managed identity client ID>";
const credential = new DefaultAzureCredential({
managedIdentityClientId: managedIdentityClientId,
});
const scope = "https://cognitiveservices.azure.com/.default";
const azureADTokenProvider = getBearerTokenProvider(credential, scope);
const endpoint = process.env["AZURE_OPENAI_ENDPOINT"] || "<endpoint>";
const deployment = "<your Azure OpenAI deployment name>";
const apiVersion = "2024-10-21";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
Untuk informasi selengkapnya tentang DefaultAzureCredential untuk Python, lihat gambaran umum DefaultAzureCredential.
Lakukan salah satu pendekatan berikut untuk mengatur ID klien identitas terkelola yang ditetapkan pengguna:
Atur variabel lingkungan AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential tanpa parameter menggunakan nilai variabel lingkungan ini, jika ada.
import openai
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")
openai_client = openai.AzureOpenAI(
api_version=os.getenv("AZURE_OPENAI_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider
)
Tetapkan identitas terkelola tertentu yang ditetapkan pengguna dengan DefaultAzureCredential dengan menggunakan parameter managed_identity_client_id untuk mengonfigurasinya dengan ID klien:
import openai
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
user_assigned_client_id = "<your managed identity client ID>"
credential = DefaultAzureCredential(
managed_identity_client_id=user_assigned_client_id
)
token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default")
openai_client = openai.AzureOpenAI(
api_version=os.getenv("AZURE_OPENAI_VERSION"),
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=token_provider
)
Sumber