Žádosti aplikací na většinu služeb Azure musí být ověřeny pomocí klíčů nebo připojení bez hesla. Vývojáři musí být usilovní, aby klíče nikdy nezpřístupnili v nezabezpečeném umístění. Každý, kdo získá přístup ke klíči, se může ověřit ve službě. Ověřování bez klíčů nabízí lepší výhody správy a zabezpečení u klíče účtu, protože neexistuje žádný klíč (nebo připojovací řetězec) pro ukládání.
Připojení bez klíčů jsou povolená pomocí následujících kroků:
- Nakonfigurujte ověřování.
- Podle potřeby nastavte proměnné prostředí.
- K vytvoření objektu klienta Azure OpenAI použijte typ přihlašovacích údajů knihovny Azure Identity Library.
Ověřování
K používání klientských knihoven Azure se vyžaduje ověřování pro Microsoft Entra ID.
Ověřování se liší v závislosti na prostředí, ve kterém je aplikace spuštěná:
Bezklíčový stavební blok Azure OpenAI
Pomocí následujícího odkazu můžete prozkoumat šablonu AI stavebního bloku Azure OpenAI bez klíčů. Tato šablona zřídí účet Azure OpenAI s oprávněním role RBAC uživatelského účtu pro ověřování bez klíčů (Microsoft Entra) pro přístup k sadm SDK rozhraní OpenAI API.
Poznámka:
Tento článek používá jednu nebo více šablon aplikací AI jako základ pro příklady a pokyny v tomto článku. Šablony aplikací AI poskytují dobře udržované a snadno použitelné referenční implementace, které pomáhají zajistit vysoce kvalitní výchozí bod pro vaše aplikace AI.
Prozkoumejte kompletní šablonu AI stavebního bloku ověřování Azure OpenAI bez klíčů.
Ověřování pro místní vývoj
Ověřování pro prostředí hostovaná v Azure
Najděte roli pro vaše využití Azure OpenAI. V závislosti na tom, jak chcete tuto roli nastavit, potřebujete název nebo ID.
| Název role |
Role ID |
| Pro Azure CLI nebo Azure PowerShell můžete použít název role. |
Pro Bicep potřebujete ID role. |
Pomocí následující tabulky vyberte roli a ID.
| Případ použití |
Název role |
Role ID |
| Asistenti |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
| Dokončení chatu |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Vyberte typ identity, který chcete použít.
-
Osobní identita: Vaše osobní identita svázaná s přihlášením k Azure.
-
Spravovaná identita: Identita spravovaná a vytvořená pro použití v Azure. Pro spravovanou identitu vytvořte spravovanou identitu přiřazenou uživatelem. Při vytváření spravované identity potřebujete ,
Client IDoznačované také jako app ID.
Pokud chcete najít svou osobní identitu, použijte jeden z následujících příkazů. ID použijte jako <identity-id> v dalším kroku.
Pokud chcete získat vlastní ID identity pro místní vývoj, použijte následující příkaz. Před použitím tohoto příkazu se musíte přihlásit az login .
az ad signed-in-user show \
--query id -o tsv
Pokud chcete získat vlastní ID identity pro místní vývoj, použijte následující příkaz. Před použitím tohoto příkazu se musíte přihlásit Connect-AzAccount .
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
Identita osoby nebo služby, která spouští nasazení, je nastavená na principalId parametr při použití Bicep nasazeného pomocí Azure Developer CLI.
main.parameters.json Následující proměnná je nastavená na identitu, která proces spouští.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Pro použití v Azure zadejte spravovanou identitu přiřazenou uživatelem jako součást procesu nasazení Bicep. Vytvořte spravovanou identitu přiřazenou uživatelem odděleně od identity, která spouští proces.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: managedIdentityName
location: location
}
Přiřaďte roli řízení přístupu na základě role (RBAC) k identitě skupiny prostředků.
Pokud chcete prostředku udělit oprávnění k identitě prostřednictvím RBAC, přiřaďte roli pomocí příkazu 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>"
Pokud chcete udělit oprávnění aplikace k prostředku Azure OpenAI prostřednictvím RBAC, přiřaďte roli pomocí rutiny Azure PowerShellu New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Pomocí následující šablony Azure OpenAI Bicep vytvořte prostředek a nastavte ověřování pro danou identityIdšablonu . Bicep vyžaduje ID role. Zobrazený name v tomto fragmentu kódu Bicep není role Azure, je specifická pro nasazení 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'
}
}
K vytvoření jakékoli role se volá main.bicep následující obecný bicep.
// 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)
}
}
Použijte postup, který najdete na otevření stránky Přidat přiřazení role na webu Azure Portal.
Tam, kde je to možné, nahraďte <identity-id><subscription-id>a <resource-group-name> skutečnými hodnotami.
Pokud se chcete připojit k Azure OpenAI, váš kód potřebuje znát koncový bod prostředku a může potřebovat další proměnné prostředí.
Vytvořte proměnnou prostředí pro koncový bod Azure OpenAI.
-
AZURE_OPENAI_ENDPOINT: Tato adresa URL je přístupovým bodem vašeho prostředku Azure OpenAI.
Vytvořte proměnné prostředí na základě umístění, ve kterém vaše aplikace běží:
| Umístění |
Identita |
Popis |
| Místní |
Osobní |
Pro místní moduly runtime s vaší osobní identitou se přihlaste a vytvořte přihlašovací údaje pomocí nástroje. |
| Azure Cloud |
Spravovaná identita přiřazená uživatelem |
Vytvořte proměnnou AZURE_CLIENT_ID prostředí obsahující ID klienta spravované identity přiřazené uživatelem, která se má ověřit jako. |
Instalace klientské knihovny Azure Identity
Pomocí následujícího odkazu nainstalujte klientskou knihovnu Azure Identity.
Nainstalujte klientskou knihovnu .NET Azure Identity:
dotnet add package Azure.Identity
Nainstalujte klientskou knihovnu Go Azure Identity:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Nainstalujte klientskou knihovnu Azure Identity Java s následujícím souborem POM:
<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>
Použití DefaultAzureCredential
Knihovna DefaultAzureCredential identit Azure umožňuje zákazníkovi spustit stejný kód v místním vývojovém prostředí a v cloudu Azure.
Další informace o DefaultAzureCredential pro .NET najdete v DefaultAzureCredential přehledu.
Pomocí jednoho z následujících přístupů nastavte ID klienta spravované identity přiřazené uživatelem:
Nastavte proměnnou prostředí AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential bez parametrů používá hodnotu této proměnné prostředí, pokud je k dispozici.
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());
Nastavte vlastnost 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);
Další informace o DefaultAzureCredential pro Go najdete v DefaultAzureCredential přehledu.
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
}
Další informace o DefaultAzureCredential pro Javu najdete v DefaultAzureCredential .
Pomocí jednoho z následujících přístupů nastavte ID klienta spravované identity přiřazené uživatelem:
Nastavte proměnnou prostředí AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential bez parametrů používá hodnotu této proměnné prostředí, pokud je k dispozici.
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();
Přiřaďte konkrétní uživatelsky přiřazenou spravovanou identitu s použitím DefaultAzureCredential a DefaultAzureCredentialBuilder a nastavte ji pomocí ID 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();
Další informace o DefaultAzureCredential pro JavaScript najdete v přehledu DefaultAzureCredential.
Pomocí jednoho z následujících přístupů nastavte ID klienta spravované identity přiřazené uživatelem:
Nastavte proměnnou prostředí AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential bez parametrů používá hodnotu této proměnné prostředí, pokud je k dispozici.
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);
Přiřaďte konkrétní spravovanou identitu přiřazenou uživatelem pomocí DefaultAzureCredential a nakonfigurujte ji s použitím ID klienta managedIdentityClientId.
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);
Další informace o DefaultAzureCredential pro Python najdete v přehledu DefaultAzureCredential.
Pomocí jednoho z následujících přístupů nastavte ID klienta spravované identity přiřazené uživatelem:
Nastavte proměnnou prostředí AZURE_CLIENT_ID. Konstruktor DefaultAzureCredential bez parametrů používá hodnotu této proměnné prostředí, pokud je k dispozici.
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
)
Přiřaďte konkrétní spravovanou identitu přiřazenou uživatelem pomocí DefaultAzureCredential a nakonfigurujte ji s použitím ID klienta managed_identity_client_id.
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
)
Zdroje informací