Les requêtes d’application vers la plupart des services Azure doivent être authentifiées avec des clés ou des connexions sans mot de passe. Les développeurs doivent être vigilants pour ne jamais exposer les clés dans un emplacement non sécurisé. Toute personne ayant accès à la clé est en mesure de s’authentifier auprès du service. L’authentification sans clé offre des avantages de gestion et de sécurité améliorés sur la clé de compte, car il n’existe aucune clé (ou chaîne de connexion) à stocker.
Les connexions sans clé sont activées via les étapes suivantes :
- Configurez votre authentification.
- Définissez des variables d’environnement, si nécessaire.
- Utilisez un type d’information d’identification de la bibliothèque Azure Identity pour créer un objet client Azure OpenAI.
Authentification
L’authentification à Microsoft Entra ID est nécessaire pour utiliser les bibliothèques clientes Azure.
L’authentification varie en fonction de l’environnement dans lequel l’application s’exécute :
Bloc de construction sans clé Azure OpenAI
Utilisez le lien suivant pour explorer le modèle Azure OpenAI Keyless Building Block AI. Ce modèle provisionne un compte Azure OpenAI avec l’autorisation de rôle RBAC de votre compte d’utilisateur pour l’authentification sans clé (Microsoft Entra) pour accéder aux kits SDK d’API OpenAI.
Remarque
Cet article utilise un ou plusieurs modèles d’application IA comme base pour les exemples et les conseils qu’il contient. Les modèles d’application IA vous fournissent des implémentations de référence bien gérées et faciles à déployer, qui constituent un point de départ de qualité pour vos applications IA.
Explorez le modèle .NET End to end Azure OpenAI Keyless Authentication Building Block AI.
Explorez le modèle Go End to end Azure OpenAI Keyless Authentication Building Block AI.
Explorez le modèle Java End to end Azure OpenAI Keyless Authentication Building Block AI.
Explorez le modèle JavaScript End to end Azure OpenAI Keyless Authentication Building Block AI.
Explorez le modèle Azure OpenAI Keyless Keyless Authentication De bout en bout Python.
Authentifiez-vous pour le développement local
Authentifiez-vous pour les environnements hébergés sur Azure
Trouvez le rôle pour votre utilisation d’Azure OpenAI. Selon la façon dont vous avez l’intention de définir ce rôle, vous avez besoin du nom ou de l’ID.
Nom de rôle |
ID de rôle |
Pour Azure CLI ou Azure PowerShell, vous pouvez utiliser le nom du rôle. |
Pour Bicep, vous avez besoin de l’ID du rôle. |
Utilisez le tableau suivant pour sélectionner un rôle et un ID.
Cas d’usage |
Nom de rôle |
ID de rôle |
Assistants |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
Complétions de conversation |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Sélectionnez un type d’identité à utiliser.
- Identité personnelle : Il s’agit de votre identité personnelle liée à votre connexion à Azure.
- Identité managée : Il s’agit d’une identité gérée et créée pour une utilisation sur Azure. Pour identité managée, créez une identité managée assignée par l’utilisateur. Lorsque vous créez l’identité managée, vous avez besoin de
Client ID
, également connue sous le nom de app ID
.
Pour trouver votre identité personnelle, utilisez l’une des commandes suivantes. Utilisez l’ID comme <identity-id>
à l’étape suivante.
Pour le développement local, pour obtenir l’ID de votre propre identité, utilisez la commande suivante. Vous devez vous connecter avec az login
avant d’utiliser cette commande.
az ad signed-in-user show \
--query id -o tsv
Pour le développement local, pour obtenir l’ID de votre propre identité, utilisez la commande suivante. Vous devez vous connecter avec Connect-AzAccount
avant d’utiliser cette commande.
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
Lors de l’utilisation de Bicep déployé avec Azure Developer CLI, l’identité de la personne ou du service exécutant le déploiement est définie sur le paramètre principalId
.
La variable main.parameters.json
suivante est définie sur l’identité exécutant le processus.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Pour une utilisation sur Azure, spécifiez une identité managée assignée par l’utilisateur dans le cadre du processus de déploiement Bicep. Créez une identité managée assignée par l’utilisateur distincte de l’identité exécutant le processus.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: managedIdentityName
location: location
}
Attribuez le rôle de contrôle d’accès en fonction du rôle (RBAC) à l’identité du groupe de ressources.
Pour accorder à votre identité des autorisations sur votre ressource via le RBAC, attribuez un rôle en utilisant la commande 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>"
Pour accorder à votre application des autorisations sur votre ressource Azure OpenAI via le RBAC, attribuez un rôle en utilisant le cmdlet Azure PowerShell New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Utilisez le modèle Azure OpenAI Bicep suivant pour créer la ressource et configurer l’authentification pour le identityId
. Bicep nécessite l’ID de rôle. Le name
figurant dans l’extrait de code Bicep n’est pas le rôle Azure ; il est spécifique au déploiement 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'
}
}
Le Bicep générique suivant est appelé à partir de main.bicep
pour créer n’importe quel rôle.
// 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)
}
}
Le cas échéant, remplacez <identity-id>
, <subscription-id>
et <resource-group-name>
par vos valeurs réelles.
Pour vous connecter à Azure OpenAI, votre code doit connaître votre point de terminaison de ressource et peut avoir besoin d’autres variables d’environnement.
Créez une variable d’environnement pour votre point de terminaison Azure OpenAI.
AZURE_OPENAI_ENDPOINT
: Cette URL est le point d’accès à votre ressource Azure OpenAI.
Créez des variables d’environnement en fonction de l’emplacement où votre application s’exécute :
Emplacement |
Identité |
Description |
Local |
Personnel |
Pour les environnements d’exécution locaux avec votre identité personnelle, connectez-vous pour créer votre information d’identification avec un outil. |
Cloud Azure |
Identité managée affectée par l’utilisateur |
Créez une variable d’environnement AZURE_CLIENT_ID contenant l’ID client de l’identité managée assignée par l’utilisateur pour s’authentifier. |
Installer la bibliothèque de client Azure Identity
Utilisez le lien suivant pour installer la bibliothèque de client Azure Identity.
Installez la bibliothèque cliente Azure Identity pour Java avec le fichier POM suivant :
<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>
Utilisez DefaultAzureCredential
La bibliothèque Azure Identity DefaultAzureCredential
permet au client d’exécuter le même code dans l’environnement de développement local et dans le cloud Azure.
Pour plus d’informations sur DefaultAzureCredential
pour .NET, consultez la vue d’ensemble DefaultAzureCredential
.
Suivez l’une des approches suivantes pour définir l’ID client de l’identité managée affectée par l’utilisateur :
Définissez la variable d’environnement AZURE_CLIENT_ID
. Le constructeur sans paramètre de DefaultAzureCredential
utilise la valeur de cette variable d’environnement, le cas échéant.
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());
Définissez la propriété ManagedIdentityClientId sur 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);
Pour plus d’informations sur DefaultAzureCredential
pour Go, consultez la vue d’ensemble 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
}
Pour plus d’informations sur DefaultAzureCredential
pour Java, consultez la vue d’ensemble DefaultAzureCredential
.
Suivez l’une des approches suivantes pour définir l’ID client de l’identité managée affectée par l’utilisateur :
Définissez la variable d’environnement AZURE_CLIENT_ID
. Le constructeur sans paramètre de DefaultAzureCredential
utilise la valeur de cette variable d’environnement, le cas échéant.
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();
Attribuez une identité gérée spécifique attribuée à l'utilisateur avec DefaultAzureCredential
en utilisant le DefaultAzureCredentialBuilder
pour la configurer avec un ID client :
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();
Pour plus d’informations sur DefaultAzureCredential
pour JavaScript, consultez la vue d’ensemble DefaultAzureCredential
.
Suivez l’une des approches suivantes pour définir l’ID client de l’identité managée affectée par l’utilisateur :
Définissez la variable d’environnement AZURE_CLIENT_ID
. Le constructeur sans paramètre de DefaultAzureCredential
utilise la valeur de cette variable d’environnement, le cas échéant.
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);
Attribuez une identité managée spécifique attribuée par l'utilisateur avec DefaultAzureCredential
à l’aide du paramètre managedIdentityClientId
pour le configurer avec un identifiant client :
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);
Pour plus d’informations sur DefaultAzureCredential
pour Python, consultez la vue d’ensemble DefaultAzureCredential
.
Suivez l’une des approches suivantes pour définir l’ID client de l’identité managée affectée par l’utilisateur :
Définissez la variable d’environnement AZURE_CLIENT_ID
. Le constructeur sans paramètre de DefaultAzureCredential
utilise la valeur de cette variable d’environnement, le cas échéant.
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
)
Attribuez une identité managée spécifique attribuée par l'utilisateur avec DefaultAzureCredential
en utilisant le paramètre managed_identity_client_id
pour la configurer avec un ID client :
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
)
Ressources