Toepassingsaanvragen voor de meeste Azure-services moeten worden geverifieerd met sleutels of verbindingen zonder wachtwoord. Ontwikkelaars moeten ijverig zijn om de sleutels nooit beschikbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot de sleutel, kan zich verifiëren bij de service. Sleutelloze verificatie biedt verbeterde beheer- en beveiligingsvoordelen ten opzichte van de accountsleutel, omdat er geen sleutel (of verbindingsreeks) is om op te slaan.
Sleutelloze verbindingen zijn ingeschakeld met de volgende stappen:
- Configureer uw verificatie.
- Stel indien nodig omgevingsvariabelen in.
- Gebruik een referentietype voor de Azure Identity-bibliotheek om een Azure OpenAI-clientobject te maken.
Verificatie
Verificatie voor Microsoft Entra-id is vereist voor het gebruik van de Azure-clientbibliotheken.
Verificatie verschilt op basis van de omgeving waarin de app wordt uitgevoerd:
Sleutelloze bouwsteen van Azure OpenAI
Gebruik de volgende koppeling om de Azure OpenAI Keyless Building Block AI-sjabloon te verkennen. Deze sjabloon richt een Azure OpenAI-account in met de RBAC-rolmachtiging voor uw gebruikersaccount voor sleutelloze verificatie (Microsoft Entra) voor toegang tot de OpenAI API SDK's.
Notitie
In dit artikel worden een of meer AI-app-sjablonen gebruikt als basis voor de voorbeelden en richtlijnen in het artikel. AI-app-sjablonen bieden u een goed onderhouden, eenvoudig te implementeren referentie-implementaties die u helpen een startpunt van hoge kwaliteit voor uw AI-apps te garanderen.
Verifiëren voor lokale ontwikkeling
Verifiëren voor door Azure gehoste omgevingen
Meer informatie over het beheren van de DefaultAzureCredential voor toepassingen die zijn geïmplementeerd in Azure.
Meer informatie over het beheren van de DefaultAzureCredential voor toepassingen die zijn geïmplementeerd in Azure.
Meer informatie over het beheren van de DefaultAzureCredential voor toepassingen die zijn geïmplementeerd in Azure.
Meer informatie over het beheren van de DefaultAzureCredential voor toepassingen die zijn geïmplementeerd in Azure.
Meer informatie over het beheren van de DefaultAzureCredential voor toepassingen die zijn geïmplementeerd in Azure.
Zoek de rol voor uw gebruik van Azure OpenAI. Afhankelijk van hoe u die rol wilt instellen, hebt u de naam of id nodig.
| Rolnaam |
Rol-id |
| Voor Azure CLI of Azure PowerShell kunt u de rolnaam gebruiken. |
Voor Bicep hebt u de rol-id nodig. |
Gebruik de volgende tabel om een rol en id te selecteren.
| Gebruiksscenario |
Rolnaam |
Rol-id |
| Assistenten |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
| Chatvoltooiingen |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Selecteer een identiteitstype dat u wilt gebruiken.
-
Persoonlijke identiteit: uw persoonlijke identiteit die is gekoppeld aan uw aanmelding bij Azure.
-
Beheerde identiteit: een identiteit die wordt beheerd door en gemaakt voor gebruik in Azure. Maak voor een beheerde identiteit een door de gebruiker toegewezen beheerde identiteit. Wanneer u de beheerde identiteit maakt, hebt u de
Client ID, ook wel bekend als de app ID.
Gebruik een van de volgende opdrachten om uw persoonlijke identiteit te vinden. Gebruik de id als in <identity-id> de volgende stap.
Gebruik de volgende opdracht om uw eigen identiteits-id op te halen voor lokale ontwikkeling. U moet zich aanmelden voordat az login u deze opdracht gebruikt.
az ad signed-in-user show \
--query id -o tsv
Gebruik de volgende opdracht om uw eigen identiteits-id op te halen voor lokale ontwikkeling. U moet zich aanmelden voordat Connect-AzAccount u deze opdracht gebruikt.
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
De identiteit van de persoon of service die de implementatie uitvoert, wordt ingesteld op de principalId parameter bij het gebruik van Bicep geïmplementeerd met Azure Developer CLI.
De volgende main.parameters.json variabele wordt ingesteld op de identiteit waarop het proces wordt uitgevoerd.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Geef voor gebruik in Azure een door de gebruiker toegewezen beheerde identiteit op als onderdeel van het Bicep-implementatieproces. Maak een door de gebruiker toegewezen beheerde identiteit, gescheiden van de identiteit die het proces uitvoert.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: managedIdentityName
location: location
}
Wijs de RBAC-rol (op rollen gebaseerd toegangsbeheer) toe aan de identiteit voor de resourcegroep.
Als u uw identiteitsmachtigingen wilt verlenen aan uw resource via RBAC, wijst u een rol toe met behulp van de Azure CLI-opdracht az role assignment create.
az role assignment create \
--role "Cognitive Services OpenAI User" \
--assignee "<identity-id>" \
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Als u uw toepassingsmachtigingen wilt verlenen aan uw Azure OpenAI-resource via RBAC, wijst u een rol toe met behulp van de Azure PowerShell-cmdlet New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Gebruik de volgende Azure OpenAI Bicep-sjabloon om de resource te maken en de verificatie voor de identityIdresource in te stellen. Bicep vereist de rol-id. De name weergave in dit Bicep-fragment is niet de Azure-rol. Dit is specifiek voor de Bicep-implementatie.
// 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'
}
}
De volgende algemene Bicep wordt aangeroepen vanuit de main.bicep functie om een rol te maken.
// 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)
}
}
Gebruik de stappen die u kunt vinden op de pagina Roltoewijzing toevoegen in Azure Portal.
Vervang, vervang <identity-id>, <subscription-id>en <resource-group-name> door uw werkelijke waarden, indien van toepassing.
Als u verbinding wilt maken met Azure OpenAI, moet uw code uw resource-eindpunt kennen en mogelijk andere omgevingsvariabelen nodig hebben.
Maak een omgevingsvariabele voor uw Azure OpenAI-eindpunt.
-
AZURE_OPENAI_ENDPOINT: Deze URL is het toegangspunt voor uw Azure OpenAI-resource.
Maak omgevingsvariabelen op basis van de locatie waarop uw app wordt uitgevoerd:
| Locatie |
Identiteit |
Beschrijving |
| Lokaal |
Persoonlijk |
Voor lokale runtimes met uw persoonlijke identiteit meldt u zich aan om uw referenties te maken met een hulpprogramma. |
| Azure-cloud |
Door de gebruiker toegewezen beheerde identiteit |
Maak een AZURE_CLIENT_ID omgevingsvariabele met de client-id van de door de gebruiker toegewezen beheerde identiteit om te verifiëren als. |
Azure Identity-clientbibliotheek installeren
Gebruik de volgende koppeling om de Azure Identity-clientbibliotheek te installeren.
Installeer de Java Azure Identity-clientbibliotheek met het volgende POM-bestand:
<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>
DefaultAzureCredential gebruiken
Met de Azure Identity-bibliotheek DefaultAzureCredential kan de klant dezelfde code uitvoeren in de lokale ontwikkelomgeving en in de Azure Cloud.
Zie het overzicht van DefaultAzureCredentialvoor meer informatie over DefaultAzureCredential voor .NET.
Voer een van de volgende methoden uit om de client-id van de door de gebruiker toegewezen beheerde identiteit in te stellen:
Stel omgevingsvariabele in AZURE_CLIENT_ID. De parameterloze constructor gebruikt DefaultAzureCredential de waarde van deze omgevingsvariabele, indien aanwezig.
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());
Eigenschap ManagedIdentityClientId instellen op 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);
Zie het overzicht van DefaultAzureCredentialvoor meer informatie over DefaultAzureCredential voor Go.
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
}
Zie het DefaultAzureCredentialvoor meer informatie over DefaultAzureCredential voor Java.
Voer een van de volgende methoden uit om de client-id van de door de gebruiker toegewezen beheerde identiteit in te stellen:
Stel omgevingsvariabele in AZURE_CLIENT_ID. De parameterloze constructor gebruikt DefaultAzureCredential de waarde van deze omgevingsvariabele, indien aanwezig.
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();
Wijs een specifieke door de gebruiker toegewezen beheerde identiteit toe met DefaultAzureCredential met behulp van de DefaultAzureCredentialBuilder om deze te configureren met een client-id:
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();
Zie het DefaultAzureCredentialvoor meer informatie over DefaultAzureCredential voor JavaScript.
Voer een van de volgende methoden uit om de client-id van de door de gebruiker toegewezen beheerde identiteit in te stellen:
Stel omgevingsvariabele in AZURE_CLIENT_ID. De parameterloze constructor gebruikt DefaultAzureCredential de waarde van deze omgevingsvariabele, indien aanwezig.
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);
Wijs een specifieke door de gebruiker toegewezen beheerde identiteit toe met DefaultAzureCredential met behulp van de parameter managedIdentityClientId om deze te configureren met een client-id:
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);
Zie het DefaultAzureCredentialvoor meer informatie over DefaultAzureCredential voor Python.
Voer een van de volgende methoden uit om de client-id van de door de gebruiker toegewezen beheerde identiteit in te stellen:
Stel omgevingsvariabele in AZURE_CLIENT_ID. De parameterloze constructor gebruikt DefaultAzureCredential de waarde van deze omgevingsvariabele, indien aanwezig.
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
)
Wijs een specifieke door de gebruiker toegewezen beheerde identiteit toe met DefaultAzureCredential met behulp van de parameter managed_identity_client_id om deze te configureren met een 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
)
Resources