Żądania aplikacji do większości usług platformy Azure muszą być uwierzytelniane przy użyciu kluczy lub połączeń bez hasła. Deweloperzy muszą być sumienni, aby nigdy nie ujawniać kluczy w niezabezpieczonej lokalizacji. Każdy, kto uzyskuje dostęp do klucza, może uwierzytelnić się w usłudze. Uwierzytelnianie bez klucza oferuje ulepszone korzyści związane z zarządzaniem i zabezpieczeniami za pośrednictwem klucza konta, ponieważ nie ma klucza (lub parametry połączenia) do przechowywania.
Połączenia bez klucza są włączone, wykonując następujące czynności:
- Skonfiguruj uwierzytelnianie.
- Ustaw zmienne środowiskowe zgodnie z potrzebami.
- Użyj typu poświadczeń biblioteki tożsamości platformy Azure, aby utworzyć obiekt klienta usługi Azure OpenAI.
Uwierzytelnianie
Uwierzytelnianie do identyfikatora Entra firmy Microsoft jest wymagane do korzystania z bibliotek klienckich platformy Azure.
Uwierzytelnianie różni się w zależności od środowiska, w którym działa aplikacja:
Blok konstrukcyjny bez klucza usługi Azure OpenAI
Skorzystaj z poniższego linku, aby zapoznać się z szablonem AI bez kluczy usługi Azure OpenAI. Ten szablon aprowizuje konto usługi Azure OpenAI przy użyciu uprawnień roli RBAC konta użytkownika na potrzeby uwierzytelniania bez klucza (Microsoft Entra) w celu uzyskania dostępu do zestawów SDK interfejsu API OpenAI.
Uwaga
W tym artykule użyto co najmniej jednego szablonu aplikacji sztucznej inteligencji jako podstawy przykładów i wskazówek w artykule. Szablony aplikacji sztucznej inteligencji zapewniają dobrze utrzymywane, łatwe w wdrażaniu implementacje referencyjne, które pomagają zapewnić wysokiej jakości punkt wyjścia dla aplikacji sztucznej inteligencji.
Zapoznaj się z szablonem AI bloków konstrukcyjnych bloków uwierzytelniania bez kluczy w usłudze Azure OpenAI.
Zapoznaj się z szablonem AI bloku konstrukcyjnego bloku konstrukcyjnego bez kluczy usługi Azure OpenAI, aby zapoznać się z szablonem End to end to end Azure OpenAI Authentication Block Building Block (Kompleksowe tworzenie bloków AI uwierzytelniania bez kluczy w języku JavaScript).
Uwierzytelnianie na potrzeby programowania lokalnego
Uwierzytelnianie w środowiskach hostowanych na platformie Azure
Znajdź rolę użycia usługi Azure OpenAI. W zależności od tego, jak zamierzasz ustawić tę rolę, potrzebujesz nazwy lub identyfikatora.
| Nazwa roli |
Identyfikator roli |
| W przypadku interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell można użyć nazwy roli. |
W przypadku aplikacji Bicep potrzebny jest identyfikator roli. |
Użyj poniższej tabeli, aby wybrać rolę i identyfikator.
| Przypadek użycia |
Nazwa roli |
Identyfikator roli |
| Asystenci |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
| Ukończenie czatu |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Wybierz typ tożsamości do użycia.
-
Tożsamość osobista: Tożsamość osobista powiązana z logowaniem do platformy Azure.
-
Tożsamość zarządzana: tożsamość zarządzana przez usługę i utworzona do użycia na platformie Azure. W przypadku tożsamości zarządzanej utwórz tożsamość zarządzaną przypisaną przez użytkownika. Podczas tworzenia tożsamości zarządzanej potrzebny jest również element
Client ID, znany również jako app ID.
Aby znaleźć swoją tożsamość osobistą, użyj jednego z następujących poleceń. Użyj identyfikatora <identity-id> w następnym kroku.
W przypadku programowania lokalnego, aby uzyskać własny identyfikator tożsamości, użyj następującego polecenia. Przed użyciem az login tego polecenia musisz zalogować się przy użyciu polecenia .
az ad signed-in-user show \
--query id -o tsv
W przypadku programowania lokalnego, aby uzyskać własny identyfikator tożsamości, użyj następującego polecenia. Przed użyciem Connect-AzAccount tego polecenia musisz zalogować się przy użyciu polecenia .
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
Tożsamość osoby lub usługi uruchamiającej wdrożenie jest ustawiona na parametr principalId podczas korzystania z Bicep, wdrożonej za pomocą Azure Developer CLI.
Następująca main.parameters.json zmienna jest ustawiona na tożsamość uruchamianą przez proces.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Do użycia na platformie Azure określ tożsamość zarządzaną przypisaną przez użytkownika w ramach procesu wdrażania Bicep. Utwórz tożsamość zarządzaną przypisaną przez użytkownika niezależnie od tożsamości uruchamianej przez proces.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: managedIdentityName
location: location
}
Przypisz rolę kontroli dostępu opartej na rolach (RBAC) do tożsamości grupy zasobów.
Aby udzielić uprawnień tożsamości do zasobu za pomocą kontroli dostępu opartej na rolach, przypisz rolę przy użyciu polecenia interfejsu wiersza polecenia platformy Azure az role assignment create.
az role assignment create \
--role "Cognitive Services OpenAI User" \
--assignee "<identity-id>" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Aby udzielić uprawnień aplikacji do zasobu usługi Azure OpenAI za pomocą kontroli dostępu opartej na rolach, przypisz rolę przy użyciu polecenia cmdlet programu Azure PowerShell New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Użyj następującego szablonu Bicep usługi Azure OpenAI, aby utworzyć zasób i ustawić uwierzytelnianie dla elementu identityId. Bicep wymaga identyfikatora roli. Pokazany name w tym fragmencie kodu Bicep nie jest rolą platformy Azure— jest specyficzny dla wdrożenia 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'
}
}
Następujący ogólny Bicep jest wywoływany z elementu , main.bicep aby utworzyć dowolną rolę.
// 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)
}
}
Jeśli ma to zastosowanie, zastąp <identity-id>wartości , <subscription-id>i <resource-group-name> rzeczywistymi wartościami.
Aby nawiązać połączenie z usługą Azure OpenAI, kod musi znać punkt końcowy zasobu, a może potrzebować innych zmiennych środowiskowych.
Utwórz zmienną środowiskową dla punktu końcowego usługi Azure OpenAI.
-
AZURE_OPENAI_ENDPOINT: ten adres URL jest punktem dostępu dla zasobu usługi Azure OpenAI.
Utwórz zmienne środowiskowe na podstawie lokalizacji, w której działa aplikacja:
| Lokalizacja |
Tożsamość |
opis |
| Lokalny |
Osobista |
W przypadku lokalnych środowisk uruchomieniowych z tożsamością osobistą zaloguj się, aby utworzyć poświadczenia za pomocą narzędzia. |
| Chmura platformy Azure |
Tożsamość zarządzana przypisana przez użytkownika |
Utwórz zmienną AZURE_CLIENT_ID środowiskową zawierającą identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika do uwierzytelnienia jako. |
Instalowanie biblioteki klienta usługi Azure Identity
Użyj poniższego linku, aby zainstalować bibliotekę klienta usługi Azure Identity.
Zainstaluj bibliotekę klienta .NET Azure Identity:
dotnet add package Azure.Identity
Zainstaluj bibliotekę klienta Java Azure Identity przy użyciu następującego pliku POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.10.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Użyj wartości domyślnejAzureCredential
Biblioteka tożsamości platformy Azure umożliwia klientowi DefaultAzureCredential uruchamianie tego samego kodu w lokalnym środowisku projektowym i w chmurze platformy Azure.
Aby uzyskać więcej informacji na temat DefaultAzureCredential dla platformy .NET, zobacz DefaultAzureCredential overview.
Zastosuj jedno z następujących podejść, aby ustawić identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
Ustaw zmienną środowiskową AZURE_CLIENT_ID. Konstruktor bez parametrów DefaultAzureCredential używa wartości tej zmiennej środowiskowej, jeśli istnieje.
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());
Ustaw właściwość ManagedIdentityClientId na 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);
Aby uzyskać więcej informacji na temat DefaultAzureCredential dla języka Go, zobacz przegląd 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
}
Aby uzyskać więcej informacji na temat DefaultAzureCredential dla języka Java, zobacz DefaultAzureCredential overview.
Zastosuj jedno z następujących podejść, aby ustawić identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
Ustaw zmienną środowiskową AZURE_CLIENT_ID. Konstruktor bez parametrów DefaultAzureCredential używa wartości tej zmiennej środowiskowej, jeśli istnieje.
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();
Przypisz określoną tożsamość zarządzaną, przypisaną przez użytkownika, z DefaultAzureCredential za pomocą DefaultAzureCredentialBuilder, aby skonfigurować ją z identyfikatorem klienta:
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();
Aby uzyskać więcej informacji na temat DefaultAzureCredential dla języka JavaScript, zobacz DefaultAzureCredential overview.
Zastosuj jedno z następujących podejść, aby ustawić identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
Ustaw zmienną środowiskową AZURE_CLIENT_ID. Konstruktor bez parametrów DefaultAzureCredential używa wartości tej zmiennej środowiskowej, jeśli istnieje.
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-05-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
Przypisz zarządzaną tożsamość przypisaną konkretnemu użytkownikowi za pomocą DefaultAzureCredential, korzystając z parametru managedIdentityClientId, aby skonfigurować ją z identyfikatorem klienta.
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-05-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
Aby uzyskać więcej informacji na temat DefaultAzureCredential dla języka Python, zobacz DefaultAzureCredential overview.
Zastosuj jedno z następujących podejść, aby ustawić identyfikator klienta tożsamości zarządzanej przypisanej przez użytkownika.
Ustaw zmienną środowiskową AZURE_CLIENT_ID. Konstruktor bez parametrów DefaultAzureCredential używa wartości tej zmiennej środowiskowej, jeśli istnieje.
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
)
Przypisz zarządzaną tożsamość przypisaną konkretnemu użytkownikowi za pomocą DefaultAzureCredential, korzystając z parametru managed_identity_client_id, aby skonfigurować ją z identyfikatorem klienta.
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
)
Zasoby