Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta guía se proporcionan procedimientos recomendados de protección y configuración de seguridad completos para implementar y operar de forma segura el SDK de Microsoft Entra para AgentID en entornos de producción. Trata los controles de seguridad esenciales, como el aislamiento de red, la administración de credenciales, la validación de tokens, la seguridad en tiempo de ejecución y la supervisión para asegurarse de que la implementación del SDK sigue los procedimientos recomendados de seguridad.
Precaución
El SDK de Microsoft Entra para la API AgentID nunca debe ser accesible públicamente. Solo debería ser accesible por aplicaciones dentro del mismo límite de confianza (por ejemplo, el mismo pod, la misma red virtual). De forma predeterminada, los hosts permitidos son localhost. Exponer esta API públicamente puede habilitar la adquisición de tokens no autorizada, que es un riesgo de seguridad crítico. Tenga en cuenta también que todas las aplicaciones dentro del mismo límite de confianza tendrán acceso a esta API. Asegúrese de que cada aplicación dentro de ese límite sea de confianza y esté debidamente asegurada.
¿Es seguro ejecutar el SDK?
El SDK de Microsoft Entra para AgentID está diseñado teniendo en cuenta la seguridad, pero su seguridad depende de las prácticas de configuración e implementación adecuadas. Siga estos procedimientos recomendados para garantizar una implementación segura:
- Ejecutar solo en entornos contenerizados
- Restringir el acceso únicamente a localhost/pod-internal
- Uso de directivas de red de Kubernetes
- Almacenamiento de credenciales de forma segura (Key Vault, Secretos)
- Ejecutar como usuario no raíz
- Habilitación del registro de auditoría
Seguridad de redes
El aislamiento de red es fundamental para proteger las operaciones de autenticación. El SDK de Microsoft Entra para AgentID debe ejecutarse dentro de los límites de confianza con controles de acceso estrictos y filtrado de tráfico completo. Esto incluye la vinculación únicamente al host local, la comunicación interna dentro del pod y las políticas de red que impiden el acceso no autorizado a los endpoints de autenticación.
Restricción del acceso del SDK
Configure Kestrel para que atienda exclusivamente en localhost y así evitar el acceso externo a la red a los puntos de conexión de autenticación.
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"
Como alternativa, use el filtrado de host de Kestrel con AllowedHosts para restringir el acceso:
containers:
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: AllowedHosts
value: "localhost;127.0.0.1"
Utilizar la Comunicación Pod-Local
Configure la aplicación para comunicarse con el SDK de Microsoft Entra para AgentID a través de localhost para asegurarse de que el tráfico permanece dentro del mismo pod y no atraviesa la red:
containers:
- name: app
env:
- name: SIDECAR_URL
value: "http://localhost:5000" # Pod-local communication only
Nunca exponga a través de LoadBalancer o Ingress (esto permitiría la adquisición no autorizada de tokens desde fuera del límite de confianza):
# WRONG - exposes Microsoft Entra SDK for AgentID publicly
apiVersion: v1
kind: Service
metadata:
name: sidecar-service
spec:
type: LoadBalancer # Exposes SDK publicly - INSECURE
selector:
app: myapp
ports:
- port: 5000
Administración de credenciales
La administración segura de credenciales es fundamental para la seguridad del SDK. Use identidades administradas siempre que sea posible para eliminar secretos y siga el principio de privilegios mínimos al configurar las credenciales de autenticación.
Preferir la identidad de carga de trabajo para contenedores
Use La identidad de carga de trabajo de Azure AD para implementaciones en contenedores (AKS) para eliminar los secretos por completo y garantizar la administración segura de credenciales con proyección de tokens basada en archivos:
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"
Ventajas: la identidad de carga de trabajo elimina la necesidad de almacenar o rotar secretos al proporcionar administración automática de credenciales, integración de RBAC de Azure y una pista de auditoría completa. El webhook de identidad de carga de trabajo proyecta automáticamente el token en el pod, y el SDK lo lee usando el tipo de credencial SignedAssertionFilePath. Este enfoque reduce significativamente los riesgos de seguridad y la sobrecarga operativa en comparación con la autenticación basada en secretos tradicional.
Nota: En el caso de las máquinas virtuales de Azure y App Services (entornos que no son de contenedores), use identidades administradas asignadas por el sistema o usuario con el tipo de credencial SignedAssertionFromManagedIdentity en su lugar. Para obtener más información, consulte Uso de identidad administrada.
Uso de certificados en lugar de secretos
Se prefieren certificados para la autenticación cuando no se pueden evitar secretos de cliente. Los certificados proporcionan mayor seguridad que los secretos de cliente porque usan criptografía de clave pública y son más difíciles de extraer o usar mal. Almacene certificados en Azure Key Vault para la administración centralizada y la renovación automática:
- 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"
Ventajas: Azure Key Vault proporciona administración centralizada de certificados con rotación automatizada, directivas de acceso y auditoría completa, a la vez que garantiza que los certificados nunca se inserten en imágenes de contenedor. Para obtener más información, consulte Usar certificados para la autenticación.
Almacenar secretos de forma segura
Los secretos de Kubernetes son una opción adecuada para almacenar secretos de cliente si las identidades administradas o los certificados no son una opción, aunque asegúrese de que los secretos están cifrados en reposo y el acceso está estrechamente controlado:
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
Secretos de cliente (evite si es posible)
Si se deben usar secretos de cliente, implemente medidas de seguridad adicionales para minimizar el riesgo. Los secretos de cliente son menos seguros que las identidades administradas o los certificados, por lo que requieren protección adicional, incluidos períodos de expiración cortos, almacenamiento seguro con cifrado en reposo, acceso restringido a través de RBAC y programaciones de rotación frecuentes. Nunca almacene secretos en imágenes de contenedor o variables de entorno visibles en los manifiestos de implementación:
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
Precaución
Nunca confirme secretos en el control de código fuente. Use la administración de secretos externos (Azure Key Vault, Secretos sellados, etc.).
Seguridad de tokens
La seguridad del token garantiza que el SDK acepte y procese solo los tokens válidos y con ámbito adecuado. Implemente la validación de tokens, los requisitos de ámbito y las comprobaciones de audiencia para evitar el acceso no autorizado y limitar el uso indebido de tokens.
Habilitación de la validación de ámbito
Requiere ámbitos específicos para los tokens entrantes (separados por espacios):
- name: AzureAd__Scopes
value: "access_as_user"
Establecer audiencia adecuada
Configure la audiencia esperada para la validación de tokens:
- name: AzureAd__Audience
value: "api://your-api-id"
Nota:
El valor de audiencia esperado depende de la versión de token de acceso solicitado del registro de tu aplicaciónrequestedAccessTokenVersion:
-
Versión 2: Usar el
{ClientId}valor directamente -
Versión 1 o null: use el URI de id. de aplicación (normalmente
api://{ClientId}, a menos que lo personalice)
Validación de tokens antes de su uso
Siempre se debe llamar a /Validate antes de aceptar tokens de usuario.
GET /Validate
Authorization: Bearer <user-token>
Seguridad en tiempo de ejecución
Los controles de seguridad en tiempo de ejecución protegen el contenedor del SDK frente a la modificación, la elevación de privilegios y el acceso a funcionalidades no autorizadas. Configure el contenedor para que se ejecute con privilegios mínimos y sistemas de archivos de solo lectura para reducir la superficie expuesta a ataques.
Sistema de archivos raíz de solo lectura
Impedir la modificación del sistema de archivos de contenedor:
securityContext:
readOnlyRootFilesystem: true
Directiva de seguridad de Pod
Aplicar estándares de seguridad:
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
Registro y supervisión
El registro y la supervisión eficaces le permiten detectar anomalías, solucionar problemas y mantener seguimientos de auditoría para el cumplimiento. Configure los niveles de registro adecuados para su entorno e implemente sondeos de estado para asegurarse de que el SDK funciona según lo previsto.
Configurar el registro adecuado
Entorno de producción:
- name: Logging__LogLevel__Default
value: "Warning"
- name: Logging__LogLevel__Microsoft.Identity.Web
value: "Information"
Entorno de desarrollo (detallado):
- name: Logging__LogLevel__Default
value: "Debug"
- name: ASPNETCORE_ENVIRONMENT
value: "Development"
Activación de la monitorización de salud
Configuración de sondeos de actividad y disponibilidad
livenessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
Lista de comprobación de procedimientos recomendados
Use esta lista de comprobación completa para asegurarse de que la implementación del SDK sigue todos los procedimientos de seguridad recomendados en las dimensiones de red, credenciales, tokens, tiempo de ejecución y supervisión.
Red:
- [ ] EL SDK solo escucha en localhost/127.0.0.1
- [ ] Nunca se expone a través de LoadBalancer o Ingress
- [ ] Las directivas de red restringen el acceso externo
- [ ] HTTPS/TLS para la comunicación externa
Credenciales:
- [ ] Uso de la identidad de carga de trabajo para contenedores (AKS, Kubernetes, Docker) con
SignedAssertionFilePath - [ ] Utilizar identidad administrada para máquinas virtuales o Servicios de Aplicaciones con
SignedAssertionFromManagedIdentity - [ ] Preferir certificados sobre secretos
- [ ] Secretos almacenados en el sistema de administración segura
- [ ] Rotación regular de credenciales
Fichas:
- [ ] Validación de alcance habilitada
- [ ] Validación de usuarios configurada
- [ ] Tokens validados antes de su uso
Tiempo de ejecución
- [ ] El contenedor se ejecuta como usuario no root
- [ ] Sistema de archivos raíz de solo lectura
- [ ] Contexto de seguridad aplicado
- [ ] Límites de recursos establecidos
Monitorización:
- [ ] Registro adecuado configurado
- [ ] Comprobaciones de estado habilitadas
- [ ] Registro de auditoría habilitado
- [ ] Alertas configuradas
Patrones de seguridad comunes
Las implementaciones de referencia muestran cómo combinar varios controles de seguridad en patrones de implementación cohesivos. Estos patrones sirven como plantillas para implementaciones de producción en varios modelos de amenazas.
Implementación de alta seguridad
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
Rotación de credenciales periódicamente
La rotación de credenciales reduce la ventana de oportunidad para los atacantes si se filtran o se ponen en peligro las credenciales. La frecuencia de rotación depende del tipo de credencial y de la directiva de seguridad de la organización:
- Secretos de cliente: cada 90 días (recomendado)
- Certificados: antes de la expiración, normalmente cada 1 a 2 años
- Claves para solicitudes HTTP firmadas (SHR): siga la directiva de seguridad de la organización.
Guía de implementación: Utilice Azure Key Vault con funcionalidades de rotación automatizadas o integre gestores de secretos externos (como Sealed Secrets) en la canalización de implementación. Esto minimiza la intervención manual y garantiza programaciones de rotación coherentes.
Responder a credenciales comprometidas
Si sospecha que las credenciales se han puesto en peligro, siga estos pasos inmediatamente para contener el incidente y evitar el acceso no autorizado:
- Revocar las credenciales comprometidas en Microsoft Entra ID, quite las credenciales del registro de aplicación para bloquear su uso inmediatamente.
- Generar nuevas credenciales: cree nuevos secretos de cliente o certificados en el identificador de Entra de Microsoft para reemplazar los que están en peligro.
- Actualización del sistema de administración de secretos : almacene las nuevas credenciales en secretos de Kubernetes o Azure Key Vault con los controles de acceso adecuados.
- Reimplementación de contenedores del SDK : actualice las implementaciones para usar las nuevas credenciales, lo que garantiza que todas las instancias en ejecución recojan los cambios.
- Revisión de los registros de acceso : compruebe los registros de auditoría de Azure Monitor y Kubernetes para ver si hay signos de solicitudes de token no autorizadas o actividad sospechosa durante la ventana de riesgo.
- Documente el incidente: registre los detalles del incidente (cuando se detectó, cómo ocurrió, qué se accedió) y siga los procedimientos de respuesta a incidentes de su organización para prevenir la recurrencia.