Azure OpenAI einrichten und anbinden

Um die KI-Services in Aeneis zu nutzen, müssen Sie Azure OpenAI mit zertifikatsbasierter Entra-ID-Authentifizierung entsprechend einrichten.

Voraussetzungen

  • Azure Entra ID mit Berechtigung zum Erstellen von App-Registrierungen und Rollenzuordnung auf der Azure OpenAI-Ressource

  • Bereitgestellte Azure OpenAI-Ressourcen (Region, Deployments/Modelle, Quota)

  • OpenSSL auf dem System, auf dem Aeneis ausgeführt wird

  • Verwendung der entsprechenden Zertifikatsdateien in Entra ID und der application.yml im Aeneis-Anwendungsverzeichnis

  • Aeneis-Dienstkonto mit Lesezugriff auf die Zertifikatsdateien

App-Registrierung in Entra ID einrichten

Um KI-Services in Aeneis zu nutzen, richten Sie Ihre App-Registrierung in Entra ID entsprechend ein.

Anleitung:

  1. Erstellen Sie eine neue App-Registrierung

  2. Geben Sie der App-Registrierung einen Namen

  3. Stellen Sie sicher, dass unter Unterstützte Kontotypen die Option Nur Konten in diesem Organisationsverzeichnis ausgewählt ist

  4. Notieren Sie sich die Verzeichnis-ID (Tenant-ID) und Anwendungs-ID (Client-ID)

Zertifikatsdateien erzeugen

Für die Anbindung der OpenAI-Services erstellen Sie ein Zertifikat mit einem SSL-Tool, z. B. OpenSSL. Über ein Skript erzeugen Sie folgende notwendige Dateien.

  • aoai-key.enc.pem (verschlüsselter Private Key, PKCS#8)
  • aoai-cert.csr (CSR)
  • aoai-cert.pem (self-signed, für Entra-Upload)
  • aoai-key.pass (Passphrase, ohne Newline)
  • aoai-cert.cer (Base64 aus PEM), falls das Azure-Portal CER-Dateien bevorzugt

Zertifikatsdateien über PowerShell erzeugen

Erstellen Sie in PowerShell ein Skript nach folgendem Beispiel und führen Sie es aus, um die Zertifikatsdateien zu erzeugen.

Kopieren
Beispiel: PowerShell
# Erzeugt verschlüsselten Private Key (PKCS#8), CSR, self-signed Cert und Passphrase-Datei.
$ErrorActionPreference = "Stop"

# --- Pfade ---
# >>> ANPASSEN: Basis-Verzeichnisse für AOAI-Assets und Passphrase-Datei.
$AoaiDir  = "C:\Users\PUBLIC\aeneis\aoai"
$PassDir  = "C:\Users\PUBLIC\aeneis\pass"

# >>> ANPASSEN: Dateinamen (falls gewünscht)
$KeyEnc   = Join-Path $AoaiDir "aoai-key.enc.pem"
$Csr      = Join-Path $AoaiDir "aoai-cert.csr"
$CertPem  = Join-Path $AoaiDir "aoai-cert.pem"
$CertCer  = Join-Path $AoaiDir "aoai-cert.cer"   # (optional) CER aus PEM
$ExtCnf   = Join-Path $AoaiDir "ext.cnf"
$PassFile = Join-Path $PassDir "aoai-key.pass"

$CreatedPaths = @()

if (-not (Get-Command openssl -ErrorAction SilentlyContinue)) {
  throw "OpenSSL wurde nicht gefunden. Bitte OpenSSL installieren bzw. openssl.exe in den PATH legen."
}

New-Item -ItemType Directory -Force $AoaiDir | Out-Null
New-Item -ItemType Directory -Force $PassDir | Out-Null

# --- Passphrase abfragen ---
# >>> ANPASSEN: Mindestlänge/Policy nach Bedarf erzwingen
$sec = Read-Host "Bitte Passphrase für aoai-key.enc.pem eingeben" -AsSecureString
$bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec)
try {
  $plain = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr)
} finally {
  if ($bstr -ne [IntPtr]::Zero) { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) }
}
if ([string]::IsNullOrWhiteSpace($plain)) { throw "Keine Passphrase eingegeben." }

# 1) Encrypted Private Key (RSA-3072, AES-256)
if (-not (Test-Path $KeyEnc)) {
  # >>> ANPASSEN (optional): rsa_keygen_bits (z.B. 4096)
  & openssl genpkey -algorithm RSA -aes256 -pkeyopt rsa_keygen_bits:3072 -out "$KeyEnc" -pass pass:$plain
  if (Test-Path $KeyEnc) { $CreatedPaths += $KeyEnc }
}

# 2) CSR
if (-not (Test-Path $Csr)) {
  # >>> ANPASSEN: DN (Firma/Standort/CN)
  & openssl req -new -key "$KeyEnc" -out "$Csr" `
    -subj "/C=DE/ST=Baden-Wuerttemberg/O=Intellior GmbH/CN=aeneis-aoai-client" `
    -passin pass:$plain
  if (Test-Path $Csr) { $CreatedPaths += $Csr }
}

# 3) Extensions-Datei
@"
[ext]
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
"@ | Set-Content -Path "$ExtCnf" -Encoding ASCII
if (Test-Path $ExtCnf) { $CreatedPaths += $ExtCnf }

# 4) Self-signed Zertifikat
if (-not (Test-Path $CertPem)) {
  # >>> ANPASSEN: Gültigkeitstage
  & openssl x509 -req -days 365 -in "$Csr" -signkey "$KeyEnc" -out "$CertPem" -extfile "$ExtCnf" -extensions ext -passin pass:$plain
  if (Test-Path $CertPem) { $CreatedPaths += $CertPem }
}

# 4a) CER aus PEM erzeugen – für Entra-Upload
if ((Test-Path $CertPem) -and -not (Test-Path $CertCer)) {
  & openssl x509 -in "$CertPem" -outform PEM -out "$CertCer"
  if (Test-Path $CertCer) { $CreatedPaths += $CertCer }
  # Alternative (DER-Format):
  # & openssl x509 -in "$CertPem" -outform DER -out "$CertCer"
}

# 5) Passphrase-Datei
# >>> HINWEIS: Enthält Klartext-Passphrase – NTFS-ACLs einschränken!
if (-not (Test-Path $PassFile)) {
  [System.IO.File]::WriteAllText($PassFile, $plain, [System.Text.Encoding]::ASCII)
  if (Test-Path $PassFile) { $CreatedPaths += $PassFile }
}

# Aufräumen
$plain = $null

# Nur Pfade neu erstellter Dateien ausgeben
$CreatedPaths | ForEach-Object { Write-Host $_ }

Zertifikatsdateien über Bash für Linux erzeugen

Erstellen Sie in Bash ein Skript nach folgendem Beispiel und führen Sie es aus, um die Zertifikatsdateien zu erzeugen.

Kopieren
Beispiel: Bash
#!/usr/bin/env bash
set -euo pipefail

# --- Pfade ---
# >>> ANPASSEN: Basis-Verzeichnisse für AOAI-Assets und Passphrase-Datei.
AOAI_DIR="${HOME}/aeneis/aoai"
PASS_DIR="${HOME}/aeneis/pass"

# >>> ANPASSEN: Dateinamen (falls gewünscht)
KEY_ENC="${AOAI_DIR}/aoai-key.enc.pem"
CSR="${AOAI_DIR}/aoai-cert.csr"
CERT_PEM="${AOAI_DIR}/aoai-cert.pem"
CERT_CER="${AOAI_DIR}/aoai-cert.cer"   # (optional) CER aus PEM
EXT_CNF="${AOAI_DIR}/ext.cnf"
PASS_FILE="${PASS_DIR}/aoai-key.pass"

declare -a CREATED

command -v openssl >/dev/null 2>&1 || { echo "OpenSSL nicht gefunden."; exit 1; }

mkdir -p "$AOAI_DIR" "$PASS_DIR"

# --- Passphrase abfragen ---
# >>> ANPASSEN: Mindestlänge/Policy nach Bedarf
read -r -s -p "Bitte Passphrase für aoai-key.enc.pem eingeben: " PLAIN
echo
[[ -z "${PLAIN// }" ]] && { echo "Keine Passphrase eingegeben."; exit 1; }

# 1) Encrypted Private Key (RSA-3072, AES-256-CBC)
if [[ ! -f "$KEY_ENC" ]]; then
  # >>> ANPASSEN (optional): rsa_keygen_bits (z.B. 4096)
  openssl genpkey -algorithm RSA -aes-256-cbc -pkeyopt rsa_keygen_bits:3072 \
    -out "$KEY_ENC" -pass pass:"$PLAIN"
  [[ -f "$KEY_ENC" ]] && CREATED+=("$KEY_ENC")
fi

# 2) CSR
if [[ ! -f "$CSR" ]]; then
  # >>> ANPASSEN: DN (Firma/Standort/CN)
  openssl req -new -key "$KEY_ENC" -out "$CSR" \
    -subj "/C=DE/ST=Baden-Wuerttemberg/O=Intellior GmbH/CN=aeneis-aoai-client" \
    -passin pass:"$PLAIN"
  [[ -f "$CSR" ]] && CREATED+=("$CSR")
fi

# 3) Extensions-Datei
cat > "$EXT_CNF" <<'EOF'
[ext]
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = clientAuth
EOF
[[ -f "$EXT_CNF" ]] && CREATED+=("$EXT_CNF")

# 4) Self-signed Zertifikat
if [[ ! -f "$CERT_PEM" ]]; then
  # >>> ANPASSEN: Gültigkeitstage
  openssl x509 -req -days 365 -in "$CSR" -signkey "$KEY_ENC" -out "$CERT_PEM" \
    -extfile "$EXT_CNF" -extensions ext -passin pass:"$PLAIN"
  [[ -f "$CERT_PEM" ]] && CREATED+=("$CERT_PEM")
fi

# 4a) CER aus PEM erzeugen – für Entra-Upload
if [[ -f "$CERT_PEM" && ! -f "$CERT_CER" ]]; then
  openssl x509 -in "$CERT_PEM" -outform PEM -out "$CERT_CER"
  [[ -f "$CERT_CER" ]] && CREATED+=("$CERT_CER")
  # Alternative (DER-Format):
  # openssl x509 -in "$CERT_PEM" -outform DER -out "$CERT_CER"
fi

# 5) Passphrase-Datei
# >>> HINWEIS: Enthält Klartext-Passphrase – Dateirechte einschränken!
if [[ ! -f "$PASS_FILE" ]]; then
  umask 0077
  printf "%s" "$PLAIN" > "$PASS_FILE"
  [[ -f "$PASS_FILE" ]] && CREATED+=("$PASS_FILE")
fi

unset PLAIN

# Nur Pfade neu erstellter Dateien ausgeben
for p in "${CREATED[@]:-}"; do
  echo "$p"
done

Öffentliches Zertifikat in Entra ID hochladen

Für die Anmeldung via ClientCertificateCredential müssen Sie das öffentliche Zertifikat in Entra ID in der App-Registrierung hochladen.

Anleitung:

  1. Öffnen Sie in Microsoft Entra ID den Bereich Zertifikate & Geheimnisse der App-Registrierung, die Sie in Aeneis für den Azure-Open-AI-Service verwenden

  2. Laden Sie im Tab Zertifikate über die Schaltfläche Zertifikat hochladen die PEM-Datei hoch, die Sie über Ihr SSL-Tool erzeugt haben

Rollenbasierte Zugriffssteuerung auf der Azure-OpenAI-Ressource einrichten

Weisen Sie auf der Azure OpenAI-Ressource unter Zugriffssteuerung (IAM) über Rollenzuweisung hinzufügen Rollen der App-Registrierung (Service Principal) zu:

  • Cognitive Services OpenAI User

  • Cognitive Services OpenAI Contributor

application.yml erweitern

Um Azure OpenAI Aeneis-seitig einzurichten, erweitern Sie die application.yml im Anwendungsverzeichnis wie im folgenden Beispiel.

Hinweis: Passen Sie die Einträge im Beispiel gemäß Ihrer Konfiguration entsprechend an.

Kopieren

Beispiel: application.yml

azure-openai:
  tenant-id: 7307f031-e86b-4b14-8f88-81aa936df3d8 # >>> ANPASSEN
  client-id: 8d225fb4-8ce9-4a26-b3f4-86cfd365805f # >>> ANPASSEN
  endpoint: https://openai-instanz02-resource.services.ai.azure.com/ # >>> ANPASSEN
  gpt-5-mini: gpt-5-mini
  gpt-4o: gpt-4o
  pem-cert-file: C:\Users\bob\aeneis\aoai\aoai-cert.pem # >>> ANPASSEN
  pem-key-file: C:\Users\bob\aeneis\aoai\aoai-key.enc.pem # >>> ANPASSEN
  pem-passphrase-file: C:\Users\bob\aeneis\aoai\pass\aoai-key.pass # >>> ANPASSEN
  billing:
    models:
      gpt-5-mini: {inputPricePerMillionEur: 0.22, outputPricePerMillionEur: 1.74}
      gpt-4o: {inputPricePerMillionEur: 2.18, outputPricePerMillionEur: 8.7}

Wichtige Hinweise:

  • Die Pfade zu den Zertifikatsdaten müssen exakt sein.
  • Das Aeneis-Dienstkonto benötigt Lesezugriff auf alle drei Zertifikatsdateien.
  • Wenn Sie Linux verwenden, geben Sie Pfade mit / an (z. B. /opt/aeneis/aoai/aoai-cert.pem).

KI-Credit-Limit setzen

In Aeneis stehen KI-Credits für ein variables Kontingent an KI-Anfragen, das monatlich erneuert und zurückgesetzt wird. Wenn Sie Aeneis On-Premise nutzen, können Sie in den Einstellungen der ServerAdministration über die Eigenschaft KI-Credits eine monatliche Obergrenze für KI-Anfragen festlegen.

Den aktuellen Verbrauch der KI-Credits können Sie über Hilfe im Portal-Header einsehen.

Funktionstest durchführen

Wenn Sie die Einrichtung abgeschlossen haben, können Sie einen Funktionstest durchführen.

Anleitung:

  1. Starten Sie Aeneis

  2. Öffnen Sie im Portal den Chatbot und stellen Sie eine Frage

Troubleshooting

Falls eines der folgenden Symptome auftritt, können Sie wie folgt Abhilfe schaffen:

Symptom

Ursache

Abhilfe

401 invalid_client

Öffentliches Zertifikat nicht/anders hochgeladen

aoai-cert.pem oder aoai-cert.cer in Entra erneut hochladen; Thumbprint/Ablauf prüfen

403 Forbidden

Rolle fehlt

OpenAI User und OpenAI Contributor auf Ressource zuweisen

404 Deployment not found

Falscher Deployment-Name

Namen unter Deployments prüfen und application.yml anpassen

TLS/Key Fehler

Falsches Format oder Passphrase

PKCS#8 sicherstellen, Pfade prüfen, aoai-key.pass ohne Newline

Kein Streaming

Proxy/Firewall/Endpoint

*.services.ai.azure.com freigeben; TLS-Inspection prüfen

Lokal ok, als Dienst nicht

Dateirechte

Lesezugriff des Dienstkontos auf alle 3 Dateien setzen

Portal akzeptiert nur .cer

PEM wird abgelehnt

.cer aus PEM erzeugen (siehe Schritt 3 „4a“) und hochladen