この記事では、Microsoft Entra ワークロード ID を使用して、Azure Kubernetes Service (AKS) から Azure OpenAI へのアクセスをセキュリティで保護する方法について説明します。 あなたは次のことを学びます。
- AKS クラスターでワークロード ID を有効にします。
- Azureユーザー割り当てマネージド ID を作成します。
- Microsoft Entra IDのフェデレーテッド資格情報を作成します。
- Kubernetes ポッドでワークロード ID を有効にします。
注記
Azure OpenAI アクセスには AKS でMicrosoft Entra ワークロード ID とマネージド ID を使用することをお勧めします。これは、Azure リソースにアクセスするための安全なパスワードレス認証プロセスが可能になるためです。
開始する前に
- アクティブなサブスクリプションを持つAzure アカウントが必要です。 お持ちでない場合は、無料のアカウントを作成してください。
- この記事は、「AKS で OpenAI を使用するアプリケーションをデプロイする」に基づいています。 この記事を開始する前に、その記事を完了する必要があります。
- Microsoft Entra承認に使用するには、Azure OpenAI アカウントで有効になっているカスタム ドメイン名が必要です。 詳細については、「 Foundry Tools のカスタム サブドメイン名」を参照してください。
前提条件
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Get started with Azure Cloud Shell」を参照してください。
CLI 参照コマンドをローカルで実行する場合は、Azure CLIinstallします。 Windowsまたは macOS で実行している場合は、Docker コンテナーでAzure CLIを実行することを検討してください。 詳細については、「 Docker コンテナーでAzure CLIを実行する方法を参照してください。
ローカル インストールを使用している場合は、az login コマンドを使用してAzure CLIにサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「Azure CLI を使用して Azure に認証する」を参照してください。
メッセージが表示されたら、最初に使用するときにAzure CLI拡張機能をインストールします。 拡張機能の詳細については、「
Azure CLI を参照してください。az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
AKS クラスターでMicrosoft Entra ワークロード ID を有効にする
Microsoft Entra ワークロード ID および OIDC 発行者エンドポイントの機能は、AKS では既定では有効になっていません。 それらを使用する前に AKS クラスターで有効にする必要があります。
リソース グループ名と AKS クラスター リソース グループ名の変数を設定します。
# Set the resource group variable RG_NAME=myResourceGroup # Set the AKS cluster name based on the resource group variable AKS_NAME=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.ContainerService/managedClusters --query "[0].name" -o tsv)az aks updateコマンドを使用して、既存の AKS クラスターでMicrosoft Entra ワークロード ID および OIDC 発行者エンドポイント機能を有効にします。az aks update \ --resource-group $RG_NAME \ --name $AKS_NAME \ --enable-workload-identity \ --enable-oidc-issuerコマンドを使用して、AKS の OIDC 発行者エンドポイント URL を取得します。
AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
Azureユーザー割り当てマネージド ID を作成する
az identity createコマンドを使用して、Azureユーザー割り当てマネージド ID を作成します。# 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コマンドを使用して、マネージド ID のクライアント ID とオブジェクト ID を取得します。
# 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)az resource listコマンドを使用して、Azure OpenAI リソース ID を取得します。AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)az role assignment createコマンドを使用して、マネージド ID に Azure OpenAI リソースへのアクセス権を付与します。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 IDフェデレーティッドクレデンシャルを作成する
フェデレーション資格情報、名前空間、サービス アカウント変数を設定します。
# 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 \ --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}
AKS でMicrosoft Entra ワークロード ID を使用する
AKS でMicrosoft Entra ワークロード ID を使用するには、ai-service 配置マニフェストにいくつかの変更を加える必要があります。
ServiceAccount を作成する
コマンドを使用して、クラスターの kubeconfig を取得します。
az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAMEコマンドを使用して Kubernetes サービス アカウントを作成します。
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 ワークロード ID を有効にする
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)コマンドを使用して、ServiceAccount と の注釈を設定した状態で を再デプロイします。
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
アプリケーションをテストする
コマンドを使用して、新しいポッドが実行中であることを確認します。
kubectl get pods --selector app=ai-serviceコマンドを使用してポッド環境変数を取得します。 出力は、Azure OpenAI API キーがポッドの環境変数に存在しなくなったことを示しています。
kubectl describe pod --selector app=ai-service新しいターミナルを開き、次の のコマンドを使用してストア管理サービスの IP を取得します。
echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"Web ブラウザーを開き、前の手順の IP アドレスに移動します。
[製品] を選択します。 Azure OpenAI を使用して、新しい製品を追加し、その製品の説明を取得できるはずです。
次のステップ
この記事では、Microsoft Entra ワークロード ID を使用して、Azure Kubernetes Service (AKS) から Azure OpenAI へのアクセスをセキュリティで保護する方法について説明しました。
Microsoft Entra ワークロード ID の詳細については、「Microsoft Entra ワークロード ID を参照してください。