Безопасный доступ к Azure OpenAI из Служба Azure Kubernetes (AKS)
В этой статье вы узнаете, как защитить доступ к Azure OpenAI из Служба Azure Kubernetes (AKS) с помощью Идентификация рабочей нагрузки Microsoft Entra. Узнайте следующие темы:
- Включите удостоверения рабочей нагрузки в кластере AKS.
- Создайте управляемое удостоверение, назначаемое пользователем.
- Создайте федеративные учетные данные идентификатора Microsoft Entra.
- Включите удостоверение рабочей нагрузки в модуле Pod Kubernetes.
Примечание.
Мы рекомендуем использовать Идентификация рабочей нагрузки Microsoft Entra и управляемые удостоверения в AKS для Azure OpenAI access, так как это обеспечивает безопасный процесс проверки подлинности без пароля для доступа к ресурсам Azure.
Подготовка к работе
- Вам потребуется учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
- Эта статья основана на развертывании приложения, использующего OpenAI в AKS. Перед началом работы с этой статьей необходимо выполнить эту статью.
- Для авторизации Microsoft Entra необходимо включить имя личного домена в учетной записи Azure OpenAI. Дополнительные сведения см. в разделе "Пользовательские имена поддомена" для служб ИИ Azure.
Необходимые компоненты
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Включение Идентификация рабочей нагрузки Microsoft Entra в кластере AKS
Функции конечной точки издателя OIDC и Идентификация рабочей нагрузки Microsoft Entra по умолчанию не включены в AKS. Прежде чем использовать их, необходимо включить их в кластере AKS.
Задайте имя группы ресурсов и переменные имени группы ресурсов кластера AKS.
# Set the resource group variable RG_NAME=myResourceGroup # Set the AKS cluster resource group variable AKS_NAME=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.ContainerService/managedClusters --query "[0].name" -o tsv)
Включите функции конечной точки издателя Идентификация рабочей нагрузки Microsoft Entra и OIDC в существующем кластере
az aks update
AKS с помощью команды.az aks update \ --resource-group $RG_NAME \ --name $AKS_NAME \ --enable-workload-identity \ --enable-oidc-issuer
Получите URL-адрес конечной точки издателя AKS OIDC с помощью
az aks show
команды.AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
Создание управляемого удостоверения, назначаемое пользователем Azure
Создайте управляемое удостоверение, назначаемое пользователем Azure, с помощью
az identity create
команды.# Set the managed identity name variable MANAGED_IDENTITY_NAME=myIdentity # Create the managed identity az identity create \ --resource-group $RG_NAME \ --name $MANAGED_IDENTITY_NAME
Получите идентификатор клиента управляемого удостоверения и идентификатор объекта с помощью
az identity show
команды.# Get the managed identity client ID MANAGED_IDENTITY_CLIENT_ID=$(az identity show --resource-group $RG_NAME --name $MANAGED_IDENTITY_NAME --query clientId -o tsv) # Get the managed identity object ID MANAGED_IDENTITY_OBJECT_ID=$(az identity show --resource-group $RG_NAME --name $MANAGED_IDENTITY_NAME --query principalId -o tsv)
Получите идентификатор ресурса Azure OpenAI с помощью
az resource list
команды.AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
Предоставьте управляемому удостоверению доступ к ресурсу Azure OpenAI с помощью
az role assignment create
команды.az role assignment create \ --role "Cognitive Services OpenAI User" \ --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $AOAI_RESOURCE_ID
Создание федеративных учетных данных идентификатора Microsoft Entra
Задайте федеративные учетные данные, пространство имен и переменные учетной записи службы.
# Set the federated credential name variable FEDERATED_CREDENTIAL_NAME=myFederatedCredential # Set the namespace variable SERVICE_ACCOUNT_NAMESPACE=default # Set the service account variable SERVICE_ACCOUNT_NAME=ai-service-account
Создайте федеративные учетные данные с помощью
az identity federated-credential create
команды.az identity federated-credential create \ --name ${FEDERATED_CREDENTIAL_NAME} \ --resource-group ${RG_NAME} \ --identity-name ${MANAGED_IDENTITY_NAME} \ --issuer ${AKS_OIDC_ISSUER} \ --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
Использование Идентификация рабочей нагрузки Microsoft Entra в AKS
Чтобы использовать Идентификация рабочей нагрузки Microsoft Entra в AKS, необходимо внести несколько изменений в ai-service
манифест развертывания.
Создание ServiceAccount
Получите kubeconfig для кластера с помощью
az aks get-credentials
команды.az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAME
Создайте Kubernetes ServiceAccount с помощью
kubectl apply
команды.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: ${MANAGED_IDENTITY_CLIENT_ID} name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOF
Включение Идентификация рабочей нагрузки Microsoft Entra в pod
Задайте имя ресурса Azure OpenAI, конечную точку и переменные имени развертывания.
# Get the Azure OpenAI resource name AOAI_NAME=$(az resource list \ --resource-group $RG_NAME \ --resource-type Microsoft.CognitiveServices/accounts \ --query "[0].name" -o tsv) # Get the Azure OpenAI endpoint AOAI_ENDPOINT=$(az cognitiveservices account show \ --resource-group $RG_NAME \ --name $AOAI_NAME \ --query properties.endpoint -o tsv) # Get the Azure OpenAI deployment name AOAI_DEPLOYMENT_NAME=$(az cognitiveservices account deployment list \ --resource-group $RG_NAME \ --name $AOAI_NAME \ --query "[0].name" -o tsv)
ai-service
Повторно разверните приложение ServiceAccount иazure.workload.identity/use
заметок, заданныеkubectl apply
true
для использования команды.kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: ai-service spec: replicas: 1 selector: matchLabels: app: ai-service template: metadata: labels: app: ai-service azure.workload.identity/use: "true" spec: serviceAccountName: $SERVICE_ACCOUNT_NAME nodeSelector: "kubernetes.io/os": linux containers: - name: ai-service image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest ports: - containerPort: 5001 env: - name: USE_AZURE_OPENAI value: "True" - name: USE_AZURE_AD value: "True" - name: AZURE_OPENAI_DEPLOYMENT_NAME value: "${AOAI_DEPLOYMENT_NAME}" - name: AZURE_OPENAI_ENDPOINT value: "${AOAI_ENDPOINT}" resources: requests: cpu: 20m memory: 50Mi limits: cpu: 50m memory: 128Mi EOF
Тестирование приложения
Убедитесь, что новый модуль pod выполняется с помощью
kubectl get pods
команды.kubectl get pods --selector app=ai-service -w
Получите журналы pod с помощью
kubectl logs
команды. Для инициализации модуля pod может потребоваться несколько минут.kubectl logs --selector app=ai-service -f
В следующем примере выходных данных показано, что приложение инициализировано и готово к приему запросов. Первая строка предполагает, что код отсутствует переменные конфигурации. Однако пакет SDK для удостоверений Azure обрабатывает этот процесс и задает
AZURE_CLIENT_ID
переменные.AZURE_TENANT_ID
Incomplete environment configuration. These variables are set: AZURE_CLIENT_ID, AZURE_TENANT_ID INFO: Started server process [1] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:5001 (Press CTRL+C to quit)
Получение переменных среды pod с помощью
kubectl describe pod
команды. В выходных данных показано, что ключ API Azure OpenAI больше не существует в переменных среды Pod.kubectl describe pod --selector app=ai-service
Откройте новый терминал и получите IP-адрес службы администрирования магазина с помощью следующей
echo
команды.echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Откройте веб-браузер и перейдите к IP-адресу из предыдущего шага.
Выберите Продукты. Вы должны иметь возможность добавить новый продукт и получить описание для него с помощью Azure OpenAI.
Следующие шаги
В этой статье вы узнали, как защитить доступ к Azure OpenAI из Служба Azure Kubernetes (AKS) с помощью Идентификация рабочей нагрузки Microsoft Entra.
Дополнительные сведения о Идентификация рабочей нагрузки Microsoft Entra см. в Идентификация рабочей нагрузки Microsoft Entra.
Azure Kubernetes Service