Запросы приложений к большинству служб Azure должны проходить проверку подлинности с помощью ключей или подключений без пароля. Разработчики должны уделять внимание тому, чтобы не раскрыть ключи в незащищенном расположении. Любой, кто получает доступ к ключу, может пройти проверку подлинности в службе. Проверка подлинности без ключей обеспечивает улучшенные преимущества управления и безопасности по сравнению с ключом учетной записи, так как для хранения ключа (или строка подключения) нет.
Подключения без ключей включены со следующими шагами:
- Настройте проверку подлинности.
- При необходимости задайте переменные среды.
- Используйте тип учетных данных библиотеки удостоверений Azure для создания клиентского объекта Azure OpenAI.
Проверка подлинности
Для использования клиентских библиотек Azure требуется проверка подлинности в идентификаторе Microsoft Entra.
Проверка подлинности отличается в зависимости от среды, в которой выполняется приложение:
Стандартный блок без ключей Azure OpenAI
Используйте следующую ссылку, чтобы изучить шаблон ИИ без ключей Azure OpenAI. Этот шаблон подготавливает учетную запись Azure OpenAI с разрешением роли RBAC учетной записи пользователя для проверки подлинности без ключа (Microsoft Entra) для доступа к пакетам SDK API OpenAI.
Примечание.
В этой статье используется один или несколько шаблонов приложений ИИ в качестве основы для примеров и рекомендаций в этой статье. Шаблоны приложений ИИ предоставляют вам хорошо поддерживаемые и простые в развертывании эталонные реализации, которые помогают обеспечить высококачественную отправную точку для приложений ИИ.
Ознакомьтесь с шаблоном ИИ стандартного блока проверки подлинности Azure OpenAI с открытым ключом.
Изучите стандартный шаблон ИИ для проверки подлинности Без ключей Azure OpenAI.
Ознакомьтесь с шаблоном и шаблоном ИИ стандартного блока проверки подлинности Azure OpenAI Без ключей.
Изучите стандартный шаблон ИИ для проверки подлинности Azure OpenAI Без ключей.
Проверка подлинности для локальной разработки
Проверка подлинности для сред, размещенных в Azure
Найдите роль для использования Azure OpenAI. В зависимости от того, как вы планируете задать эту роль, вам потребуется имя или идентификатор.
Имя роли |
Идентификатор роли |
Для Azure CLI или Azure PowerShell можно использовать имя роли. |
Для Bicep требуется идентификатор роли. |
Используйте следующую таблицу, чтобы выбрать роль и идентификатор.
Вариант использования |
Имя роли |
Идентификатор роли |
Помощники |
Cognitive Services OpenAI Contributor |
a001fd3d-188f-4b5d-821b-7da978bf7442 |
Завершение чата |
Cognitive Services OpenAI User |
5e0bd9bd-7b93-4f28-af87-19fc36ad61bd |
Выберите тип удостоверения для использования.
Чтобы найти личное удостоверение, используйте одну из следующих команд. Используйте идентификатор в качестве <identity-id>
следующего шага.
Чтобы получить собственный идентификатор удостоверения, используйте следующую команду для локальной разработки. Перед использованием этой команды необходимо войти в az login
систему.
az ad signed-in-user show \
--query id -o tsv
Чтобы получить собственный идентификатор удостоверения, используйте следующую команду для локальной разработки. Перед использованием этой команды необходимо войти в Connect-AzAccount
систему.
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
При использовании Bicep , развернутого с помощью Интерфейса командной строки разработчика Azure, для параметра устанавливается principalId
удостоверение пользователя или службы, выполняющего развертывание.
Следующая main.parameters.json
переменная устанавливается для удостоверения, выполняющего процесс.
"principalId": {
"value": "${AZURE_PRINCIPAL_ID}"
},
Для использования в Azure укажите управляемое удостоверение, назначаемое пользователем, в рамках процесса развертывания Bicep. Создайте управляемое удостоверение, назначаемое пользователем, отдельно от удостоверения, выполняющего процесс.
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2018-11-30' = {
name: managedIdentityName
location: location
}
Назначьте роль управления доступом на основе ролей (RBAC) идентификатору группы ресурсов.
Чтобы предоставить удостоверению разрешения на доступ к ресурсу через RBAC, назначьте роль с помощью команды 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>"
Чтобы предоставить приложению разрешения для ресурса Azure OpenAI через RBAC, назначьте роль с помощью командлета Azure PowerShell New-AzRoleAssignment.
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "Cognitive Services OpenAI User" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
Используйте следующий шаблон Azure OpenAI Bicep, чтобы создать ресурс и задать проверку подлинности для объекта identityId
. Bicep требует идентификатор роли. Приведенный name
в этом фрагменте кода Bicep не является ролью Azure. Это зависит от развертывания 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'
}
}
Для создания любой main.bicep
роли вызывается следующий универсальный 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)
}
}
Где применимо, замените <identity-id>
и <subscription-id>
<resource-group-name>
фактическими значениями.
Чтобы подключиться к Azure OpenAI, код должен знать конечную точку ресурса и может нуждаться в других переменных среды.
Создайте переменную среды для конечной точки Azure OpenAI.
-
AZURE_OPENAI_ENDPOINT
: этот URL-адрес является точкой доступа для ресурса Azure OpenAI.
Создайте переменные среды на основе расположения, в котором выполняется приложение:
Расположение |
Идентификация |
Description |
Local |
Персональный |
Для локальных сред выполнения с личным удостоверением войдите, чтобы создать учетные данные с помощью средства. |
Облако Azure |
Управляемое удостоверение, назначаемое пользователем |
AZURE_CLIENT_ID Создайте переменную среды, содержащую идентификатор клиента управляемого удостоверения, назначаемого пользователем, для проверки подлинности как. |
Установка клиентской библиотеки удостоверений Azure
Используйте следующую ссылку для установки клиентской библиотеки удостоверений Azure.
Установите клиентную библиотеку удостоверений Azure Go:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
Установите клиентную библиотеку удостоверений Java Azure с помощью следующего 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>
Использование DefaultAzureCredential
Библиотека DefaultAzureCredential
удостоверений Azure позволяет клиенту выполнять тот же код в локальной среде разработки и в облаке Azure.
Дополнительные сведения о DefaultAzureCredential
для .NET см. в DefaultAzureCredential
обзоре.
Выполните один из следующих подходов, чтобы задать идентификатор клиента управляемого удостоверения, назначаемого пользователем:
Задайте переменную среды AZURE_CLIENT_ID
. Конструктор без параметров DefaultAzureCredential
будет использовать значение этой переменной среды, если она присутствует.
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());
Задайте свойство ManagedIdentityClientId на 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);
Дополнительные сведения о DefaultAzureCredential
для Go см. в 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
}
Дополнительные сведения о DefaultAzureCredential
для Java см. в обзоре DefaultAzureCredential
.
Используйте один из следующих способов, чтобы задать идентификатор клиента назначенного пользователем управляемого удостоверения:
Задайте переменную среды AZURE_CLIENT_ID
. Конструктор без параметров DefaultAzureCredential
будет использовать значение этой переменной среды, если она присутствует.
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();
Назначьте назначенное пользователем управляемое удостоверение с помощью DefaultAzureCredential
и настройте его с идентификатором клиента через DefaultAzureCredentialBuilder
.
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();
Дополнительные сведения о DefaultAzureCredential
для JavaScript см. в обзоре DefaultAzureCredential
.
Выполните один из следующих способов, чтобы задать идентификатор клиента назначаемого пользователем управляемого удостоверения.
Задайте переменную среды AZURE_CLIENT_ID
. Конструктор без параметров DefaultAzureCredential
будет использовать значение этой переменной среды, если она присутствует.
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);
Назначьте управляемое удостоверение, назначаемое пользователем, с DefaultAzureCredential
, используя параметр 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-05-01-preview";
const options = { azureADTokenProvider, deployment, apiVersion, endpoint }
const client = new AzureOpenAI(options);
Дополнительные сведения о DefaultAzureCredential
для Python см. в обзоре DefaultAzureCredential
.
Используйте один из следующих методов, чтобы задать идентификатор клиента управляемого удостоверения, назначаемого пользователем.
Задайте переменную среды AZURE_CLIENT_ID
. Конструктор без параметров DefaultAzureCredential
будет использовать значение этой переменной среды, если она присутствует.
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
)
Назначьте управляемое удостоверение, назначаемое пользователем, с DefaultAzureCredential
с помощью параметра 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
)
Ресурсы