Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Handbuch enthält standardmäßige Sicherheitskonfiguration und Härtungsmaßnahmen sowie bewährte Methoden zum sicheren Bereitstellen und Ausführen des Microsoft Entra SDK für Agent-ID in Produktionsumgebungen. Es umfasst wichtige Sicherheitskontrollen, einschließlich Netzwerkisolation, Anmeldeinformationsverwaltung, Tokenüberprüfung, Laufzeitsicherheit und Überwachung, um sicherzustellen, dass Ihre SDK-Bereitstellung bewährte Methoden befolgt.
Vorsicht
Das Microsoft Entra SDK für die Agent-ID-API darf niemals öffentlich zugänglich sein. Es sollte nur von Anwendungen innerhalb derselben Vertrauensgrenze erreichbar sein (z. B. denselben Pod, dasselbe virtuelle Netzwerk). Standardmäßig ist der zulässige Host localhost. Durch die öffentliche Bereitstellung dieser API kann der nicht autorisierte Tokenerwerb aktiviert werden, was ein kritisches Sicherheitsrisiko darstellt. Beachten Sie außerdem, dass alle Anwendungen innerhalb derselben Vertrauensgrenze Zugriff auf diese API haben. Stellen Sie sicher, dass jede Anwendung in dieser Grenze vertrauenswürdig und ordnungsgemäß gesichert ist.
Ist es sicher, das SDK auszuführen?
Das Microsoft Entra SDK für Die Agent-ID ist mit Sicherheit konzipiert, aber seine Sicherheit hängt von den richtigen Konfigurations- und Bereitstellungspraktiken ab. Befolgen Sie die folgenden bewährten Methoden, um eine sichere Bereitstellung sicherzustellen:
- Nur in containerisierten Umgebungen ausgeführt
- Zugriff auf "localhost/pod-internal" einschränken
- Verwenden von Kubernetes-Netzwerkrichtlinien
- Sicheres Speichern von Anmeldeinformationen (Key Vault, Geheime Schlüssel)
- Als Nicht-Stammbenutzer ausführen
- Aktivieren der Überwachungsprotokollierung
Netzwerksicherheit
Die Netzwerkisolation ist wichtig für den Schutz von Authentifizierungsvorgängen. Das Microsoft Entra SDK für Agent-ID muss innerhalb vertrauenswürdiger Grenzen mit strengen Zugriffskontrollen und umfassender Datenverkehrsfilterung ausgeführt werden. Dazu gehören localhost-only-Bindung, podinterne Kommunikation und Netzwerkrichtlinien, die nicht autorisierten Zugriff auf Authentifizierungsendpunkte verhindern.
Einschränken des SDK-Zugriffs
Konfigurieren Sie Kestrel so, dass sie nur auf localhost lauschen, um den Zugriff auf externe Netzwerke auf Authentifizierungsendpunkte zu verhindern:
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: Kestrel__Endpoints__Http__Url
value: "http://127.0.0.1:5000"
Alternativ können Sie die Hostfilterung von Kestrel mit AllowedHosts verwenden, um den Zugriff einzuschränken:
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: AllowedHosts
value: "localhost;127.0.0.1"
Verwenden Sie die lokale Pod-Kommunikation
Konfigurieren Sie Ihre Anwendung so, dass sie mit dem Microsoft Entra SDK für Agent-ID über localhost kommunizieren kann, um sicherzustellen, dass der Datenverkehr innerhalb desselben Pods verbleibt und das Netzwerk nicht durchläuft:
containers:
- name: app
env:
- name: SIDECAR_URL
value: "http://localhost:5000" # Pod-local communication only
Nie über LoadBalancer oder Ingress offenlegen (dies würde eine unautorisierte Token-Erfassung von außerhalb der vertrauenswürdigen Grenze zulassen):
# WRONG - exposes Microsoft Entra SDK for Agent ID publicly
apiVersion: v1
kind: Service
metadata:
name: sidecar-service
spec:
type: LoadBalancer # Exposes SDK publicly - INSECURE
selector:
app: myapp
ports:
- port: 5000
Verwaltung von Anmeldeinformationen
Die sichere Verwaltung von Anmeldeinformationen ist für die SDK-Sicherheit von grundlegender Bedeutung. Verwenden Sie verwaltete Identitäten, wenn möglich, um geheime Schlüssel zu beseitigen und dem Prinzip der geringsten Berechtigungen beim Konfigurieren von Authentifizierungsanmeldeinformationen zu folgen.
Workload Identity für Container bevorzugen
Verwenden Sie Microsoft Entra Workload ID für containerisierte Bereitstellungen (AKS), um geheime Schlüssel vollständig zu beseitigen und die sichere Verwaltung von Anmeldeinformationen mit dateibasierter Tokenprojektion sicherzustellen:
apiVersion: v1
kind: ServiceAccount
metadata:
name: myapp-sa
annotations:
azure.workload.identity/client-id: "<managed-identity-client-id>"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
azure.workload.identity/use: "true"
spec:
serviceAccountName: myapp-sa
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: AzureAd__ClientId
value: "<web-api-client-id>"
# Workload Identity credentials - uses file-based token projection
- name: AzureAd__ClientCredentials__0__SourceType
value: "SignedAssertionFilePath"
Benefits: Die Workload-Identität beseitigt die Notwendigkeit, Geheimnisse zu speichern oder zu rotieren, indem sie eine automatische Anmeldeinformationsverwaltung, Azure RBAC-Integration und einen vollständigen Prüfpfad bietet. Das Token wird automatisch vom Workload Identity Webhook auf den Pod projiziert, und das SDK liest es mithilfe des SignedAssertionFilePath Anmeldeinformationstyps vor. Dieser Ansatz reduziert im Vergleich zur herkömmlichen geheimen Authentifizierung erheblich Sicherheitsrisiken und betrieblichen Aufwand.
Note: Verwenden Sie für Azure VMs und App Services (nicht containerisierte Umgebungen) system- oder vom Benutzer zugewiesene verwaltete Identitäten stattdessen mit dem Anmeldeinformationstyp SignedAssertionFromManagedIdentity. Weitere Informationen finden Sie unter "Verwaltete Identität verwenden".
Verwenden Sie Zertifikate statt Geheimnissen
Bevorzugen Sie Zertifikate für die Authentifizierung, wenn geheime Clientschlüssel nicht vermieden werden können. Zertifikate bieten eine stärkere Sicherheit als geheime Clientschlüssel, da sie Kryptografie mit öffentlichem Schlüssel verwenden und schwieriger zu extrahieren oder zu missbrauchen sind. Speichern Sie Zertifikate in Azure Key Vault für die zentrale Verwaltung und automatische Verlängerung:
- name: AzureAd__ClientCredentials__0__SourceType
value: "KeyVault"
- name: AzureAd__ClientCredentials__0__KeyVaultUrl
value: "https://your-keyvault.vault.azure.net"
- name: AzureAd__ClientCredentials__0__KeyVaultCertificateName
value: "your-cert-name"
Benefits: Azure Key Vault bietet eine zentralisierte Zertifikatverwaltung mit automatisierter Zertifikatsrotation, Zugriffsrichtlinien und umfassender Prüfung, wobei sichergestellt wird, dass Zertifikate nie in Containerimages eingebettet sind. Weitere Informationen finden Sie unter Verwenden von Zertifikaten für die Authentifizierung.
Sicheres Speichern von geheimen Schlüsseln
Kubernetes Secrets ist eine geeignete Option zum Speichern von Clientgeheimnissen, wenn verwaltete Identitäten oder Zertifikate keine Option sind. Stellen Sie jedoch sicher, dass die Geheimnisse im Ruhezustand verschlüsselt sind und der Zugriff streng kontrolliert wird.
apiVersion: v1
kind: Secret
metadata:
name: app-cert
type: Opaque
data:
certificate.pfx: <base64-encoded-pfx>
certificate.password: <base64-encoded-password>
---
containers:
- name: sidecar
volumeMounts:
- name: cert-volume
mountPath: /certs
readOnly: true
env:
- name: AzureAd__ClientCredentials__0__SourceType
value: "Path"
- name: AzureAd__ClientCredentials__0__CertificateDiskPath
value: "/certs/certificate.pfx"
- name: AzureAd__ClientCredentials__0__CertificatePassword
valueFrom:
secretKeyRef:
name: app-cert
key: certificate.password
volumes:
- name: cert-volume
secret:
secretName: app-cert
items:
- key: certificate.pfx
path: certificate.pfx
defaultMode: 0400 # Read-only for owner
Client-Geheimnisse (möglichst zu vermeiden)
Wenn geheime Clientschlüssel verwendet werden müssen, implementieren Sie zusätzliche Sicherheitsmaßnahmen, um das Risiko zu minimieren. Geheime Clientschlüssel sind weniger sicher als verwaltete Identitäten oder Zertifikate, sodass sie zusätzlichen Schutz erfordern, einschließlich kurzen Ablaufzeiten, sicherer Speicherung mit Verschlüsselung im Ruhezustand, eingeschränktem Zugriff über RBAC und häufigen Rotationsplänen. Speichern Sie geheime Schlüssel niemals in Containerimages oder Umgebungsvariablen, die in Bereitstellungsmanifesten sichtbar sind:
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
client-secret: "<your-client-secret>"
---
containers:
- name: sidecar
env:
- name: AzureAd__ClientCredentials__0__SourceType
value: "ClientSecret"
- name: AzureAd__ClientCredentials__0__ClientSecret
valueFrom:
secretKeyRef:
name: app-secrets
key: client-secret
Vorsicht
Übernehmen Sie niemals geheime Schlüssel zur Quellcodeverwaltung. Verwenden Sie die externe geheime Verwaltung (Azure Key Vault, versiegelte Geheime Schlüssel usw.).
Tokensicherheit
Die Tokensicherheit stellt sicher, dass nur gültige, entsprechend bereichsbezogene Token vom SDK akzeptiert und verarbeitet werden. Implementieren Sie Tokenüberprüfungen, Umfangsanforderungen und Zielgruppenüberprüfungen, um unbefugten Zugriff zu verhindern und Tokenmissbrauch einzuschränken.
Bereichsüberprüfung aktivieren
Spezifische Bereiche für eingehende Token erforderlich (durch Leerzeichen getrennt):
- name: AzureAd__Scopes
value: "access_as_user"
Festlegen einer geeigneten Zielgruppe
Konfigurieren der erwarteten Zielgruppe für die Tokenüberprüfung:
- name: AzureAd__Audience
value: "api://your-api-id"
Hinweis
Der erwartete Benutzergruppenwert hängt von der angefordertenAccessTokenVersion Ihrer App-Registrierung ab:
-
Version 2: Verwenden des Werts
{ClientId}direkt -
Version 1 oder null: Verwenden Sie den App-ID-URI (in der Regel
api://{ClientId}, es sei denn, Sie haben ihn angepasst).
Überprüfen von Token vor der Verwendung
Rufen Sie immer auf /Validate , bevor Sie Benutzertoken annehmen:
GET /Validate
Authorization: Bearer <user-token>
Laufzeitsicherheit
Laufzeitsicherheitssteuerelemente schützen den SDK-Container vor Änderung, Berechtigungseskalation und unbefugtem Zugriff auf Funktionen. Konfigurieren Sie den Container so, dass er mit minimalen Berechtigungen und schreibgeschützten Dateisystemen ausgeführt wird, um die Angriffsfläche zu reduzieren.
Schreibgeschütztes Root-Dateisystem
Änderung des Containerdateisystems verhindern:
securityContext:
readOnlyRootFilesystem: true
Pod-Sicherheitsrichtlinie
Sicherheitsstandards erzwingen:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: sidecar-psp
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'MustRunAs'
fsGroup:
rule: 'MustRunAs'
readOnlyRootFilesystem: true
Protokollierung und Überwachung
Mithilfe der effektiven Protokollierung und Überwachung können Sie Anomalien erkennen, Probleme beheben und Überwachungspfade für die Compliance verwalten. Konfigurieren Sie geeignete Protokollierungsebenen für Ihre Umgebung, und implementieren Sie Integritätssonden, um sicherzustellen, dass das SDK erwartungsgemäß funktioniert.
Konfigurieren der geeigneten Protokollierung
Produktionsumgebung:
- name: Logging__LogLevel__Default
value: "Warning"
- name: Logging__LogLevel__Microsoft.Identity.Web
value: "Information"
Entwicklungsumgebung (ausführlich):
- name: Logging__LogLevel__Default
value: "Debug"
- name: ASPNETCORE_ENVIRONMENT
value: "Development"
Aktivieren der Gesundheitsüberwachung
Konfigurieren Sie Liveness- und Readiness-Sonden:
livenessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
Prüfliste für bewährte Methoden
Verwenden Sie diese umfassende Checkliste, um sicherzustellen, dass Ihre SDK-Bereitstellung alle empfohlenen Sicherheitsmethoden über Netzwerk-, Anmeldeinformationen, Token, Laufzeit- und Überwachungsdimensionen hinweg befolgt.
Netz:
- [ ] SDK lauscht nur auf localhost/127.0.0.1
- [ ] Nie über LoadBalancer oder Ingress verfügbar gemacht
- [ ] Netzwerkrichtlinien beschränken den externen Zugriff
- [ ] HTTPS/TLS für die externe Kommunikation
Anmeldedaten:
- [ ] Verwenden der Workload-Identität für Container (AKS, Kubernetes, Docker) mit
SignedAssertionFilePath - [ ] Verwenden einer verwalteten Identität für VMs/App-Dienste mit
SignedAssertionFromManagedIdentity - [ ] Zertifikate vor geheimen Schlüsseln bevorzugen
- [ ] Geheime Schlüssel, die im sicheren Verwaltungssystem gespeichert sind
- [ ] Regelmäßiger Wechsel der Anmeldeinformationen
Tokens
- [ ] Bereichsüberprüfung aktiviert
- [ ] Zielgruppenüberprüfung konfiguriert
- [ ] Tokens vor der Nutzung validiert
Laufzeit:
- [ ] Container läuft als Nicht-Root
- [ ] Schreibgeschütztes Stammdateisystem
- [ ] Angewendeter Sicherheitskontext
- [ ] Ressourcenbeschränkungen festgelegt
Überwachung:
- [ ] Geeignete Protokollierung konfiguriert
- [ ] Gesundheitsprüfungen aktiviert
- [ ] Überwachungsprotokollierung aktiviert
- [ ] Konfigurierte Warnungen
Allgemeine Sicherheitsmuster
Referenzimplementierungen veranschaulichen, wie mehrere Sicherheitskontrollen in zusammenhängenden Bereitstellungsmustern kombiniert werden. Diese Muster dienen als Vorlagen für Produktionsbereitstellungen in verschiedenen Bedrohungsmodellen.
Hochsicherheitsbereitstellung
apiVersion: v1
kind: ServiceAccount
metadata:
name: secure-app-sa
annotations:
azure.workload.identity/client-id: "<managed-identity-id>"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
spec:
template:
metadata:
labels:
azure.workload.identity/use: "true"
spec:
serviceAccountName: secure-app-sa
securityContext:
fsGroup: 2000
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
ports:
- containerPort: 5000
env:
- name: Kestrel__Endpoints__Http__Url
value: "http://127.0.0.1:5000"
- name: AzureAd__TenantId
valueFrom:
configMapKeyRef:
name: app-config
key: tenant-id
- name: AzureAd__ClientId
value: "<managed-identity-client-id>"
securityContext:
runAsNonRoot: true
runAsUser: 1000
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "250m"
livenessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 10
periodSeconds: 10
Anmeldeinformationen regelmäßig ändern
Durch das regelmäßige Ändern von Anmeldeinformationen wird das Zeitfenster für Angreifer reduziert, wenn Anmeldeinformationen verloren gehen oder kompromittiert werden. Die Rotationsfrequenz hängt vom Anmeldedatentyp und der Sicherheitsrichtlinie Ihrer Organisation ab.
- Geheime Clientschlüssel: Alle 90 Tage (empfohlen)
- Zertifikate: Vor Ablauf, in der Regel alle 1-2 Jahre
- Schlüssel für signierte HTTP-Anforderungen (SHR): Folgen Sie der Sicherheitsrichtlinie Ihrer Organisation
Implementierungsleitfaden: Verwenden Sie Azure Key Vault mit automatisierten Rotationsfunktionen oder integrieren Sie externe geheime Manager (z. B. versiegelte Geheime Schlüssel) in Ihre Bereitstellungspipeline. Dadurch wird ein manueller Eingriff minimiert und ein konsistenter Drehplan sichergestellt.
Reagieren auf kompromittierte Anmeldeinformationen
Wenn Sie vermuten, dass Anmeldeinformationen kompromittiert wurden, führen Sie die folgenden Schritte sofort aus, um den Vorfall zu enthalten und unbefugten Zugriff zu verhindern:
- Kompromittierte Anmeldeinformationen in Microsoft Entra ID – Entfernen Sie die kompromittierten Anmeldeinformationen aus der Anwendungsregistrierung, um deren Verwendung sofort zu blockieren.
- Generieren Sie neue Anmeldeinformationen – Erstellen Sie neue geheime Clientschlüssel oder Zertifikate in Microsoft Entra ID, um die kompromittierten zu ersetzen.
- Update your secrets management system – Speichern Sie die neuen Anmeldeinformationen in Kubernetes Secrets oder Azure Key Vault mit entsprechenden Zugriffssteuerungen.
- Erneutes Bereitstellen von SDK-Containern – Aktualisieren Sie Ihre Bereitstellungen, um die neuen Anmeldeinformationen zu verwenden, und stellen Sie sicher, dass alle ausgeführten Instanzen die Änderungen übernehmen.
- Review-Zugriffsprotokolle – Überprüfen Sie Azure Monitor- und Kubernetes-Überwachungsprotokolle auf Anzeichen nicht autorisierter Tokenanforderungen oder verdächtiger Aktivitäten während des Kompromittierungsfensters.
- Dokumentieren Sie den Vorfall – Zeichnen Sie Details des Vorfalls auf (wann er entdeckt wurde, wie es passiert ist, worauf zugegriffen wurde) und folgen Sie den Verfahren zur Reaktion auf Vorfälle In Ihrer Organisation, um eine Wiederholung zu verhindern.