Apps multinube con Istio
Al utilizar el adaptador App Identity and Access, puede centralizar toda la gestión de identidades en un único lugar.
El adaptador App Identity and Access no recibe soporte actualmente.
Dado que las empresas utilizan nubes de varios proveedores o una combinación de soluciones locales y externas, los modelos de despliegue heterogéneos pueden ayudarle a conservar la infraestructura existente sin la obligación de permanecer con un proveedor. El adaptador se puede configurar para que funcione con cualquier proveedor de identidades compatible con OIDC, como por ejemplo App ID. El servicio permite al adaptador controlar las políticas de autenticación y autorización en todos los entornos, incluidas las aplicaciones frontales y de fondo. Y todo ello sin necesidad de modificar el código ni de volver a desplegar la aplicación.
Arquitectura multinube
Un entorno de cálculo de varias nubes combina múltiples entornos de nube y/o de cálculo privado en una única arquitectura de red. Al distribuir las cargas de trabajo entre varios entornos, es posible aumentar la resiliencia, la flexibilidad y la rentabilidad. Para disfrutar estas ventajas, es habitual utilizar una aplicación basada en contenedor con una capa de orquestación, como por ejemplo Kubernetes.
Descripción de Istio y del adaptador
Istio es una malla de servicios de código abierto que se sitúa como capa de forma transparente en las aplicaciones distribuidas existentes que pueden integrarse con Kubernetes. Para reducir la complejidad de los despliegues, Istio proporciona información de comportamiento y control operativo sobre la malla de servicio en su conjunto. Cuando App ID se combina con Istio, se convierte en una solución de identidad escalable e integrada para arquitecturas de varias nubes que no requiere ningún cambio personalizado en el código de aplicación. Para más información, consulte Qué es Istio.
Istio utiliza un sidecar de proxy Envoy para mediar en todo el tráfico de entrada y salida para todos los servicios de la malla de servicios. Mediante el uso del proxy, Istio extrae información sobre el tráfico, lo que se conoce como telemetría, que se envía al componente Istio denominado Mixer para aplicar las decisiones de política. El adaptador App Identity and Access amplía la funcionalidad de Mixer analizando la telemetría (atributos) respecto a las políticas personalizadas con el fin de controlar la identidad y la gestión de acceso a la malla de servicio. Las políticas de gestión de acceso están vinculadas con servicios concretos de Kubernetes y se pueden ajustar de forma detallada para puntos finales de servicio específicos. Para más información sobre políticas y telemetría, consulte la documentación de Istio.
Debido a una limitación de Istio, el adaptador App Identity and Access almacena actualmente la información de sesión de usuario internamente y no persiste la información entre réplicas o configuraciones de migración tras error. Cuando utilice el adaptador, limite las cargas de trabajo a una sola réplica hasta que se corrija la limitación.
Protección de apps frontales
Si utiliza una aplicación basada en navegador, puede utilizar el flujo Open ID Connect(OIDC) / OAuth 2.0 authorization_grant para autenticar a sus usuarios. Cuando se detecta un usuario no autenticado, se le redirige automáticamente a la página de autenticación. Cuando finaliza la autenticación, el navegador se redirige a un punto final implícito de /oidc/callback en el que el adaptador intercepta la solicitud. En este punto, el adaptador obtiene señales del proveedor de identidad y, a continuación, redirige al usuario de nuevo a su URL solicitado originalmente.
Para ver la información de sesión de usuario, incluidas las señales de sesión, puede consultar la cabecera Authorization.
Authorization: Bearer <accessToken> <IDToken>
También puede cerrar la sesión de usuarios autenticados. Cuando un usuario autenticado accede a un punto final protegido con oidc/logout añadido, tal como se muestra en el ejemplo siguiente, se le desconecta.
https://myhost/path/oidc/logout
Si es necesario, se puede utilizar una señal de renovación para adquirir automáticamente nuevas señales de acceso y de identidad sin que el usuario tenga que volver a autenticarse. Si el proveedor de identidad configurado devuelve una señal de renovación, se mantiene en la sesión y se utiliza para recuperar nuevas señales cuando caduca la señal de identidad.
Protección de apps de fondo
El Adaptador puede utilizarse en colaboración con OAuth 2.0 Flujo de portadores JWT para proteger las API de servicios mediante la validación de tokens
JWT Bearer. El flujo de autorización de Bearer espera que una solicitud contenga una cabecera de Authorization con una señal de acceso válida y una señal de identidad opcional. La estructura de cabecera esperada es Authorization=Bearer {access_token} [{id_token}].
A los clientes no autenticados se les devuelve un estado de respuesta HTTP 401 con una lista de los ámbitos que son necesarios para obtener la autorización. Si las señales no son válidas o han caducado, la estrategia de API devuelve una
respuesta HTTP 401 con un componente de error opcional que dice Www-Authenticate=Bearer scope="{scope}" error="{error}".
Para obtener más información sobre las señales y cómo se utilizan, consulte Información sobre las señales.
Antes de empezar
Antes de empezar, asegúrese de que ha instalado los siguientes requisitos previos.
-
Un clúster de Kubernetes de pago
-
Actualmente, IBM Cloud Kubernetes Service Managed Istio no da soporte a la imposición de política. Para utilizar el adaptador, debe utilizar Istio instalado manualmente.
Instalación del adaptador
Para instalar el diagrama, inicialice Helm en el clúster, defina las opciones que desea utilizar y, a continuación, ejecute el mandato de instalación.
-
Si está trabajando con el servicio IBM Cloud Kubernetes, asegúrese de iniciar la sesión y establecer el contexto para el clúster.
-
Compruebe que ha activado la aplicación de la política Istio. Si no es así, actívelo.
-
Añada el repositorio.
helm repo add appidentityandaccessAdapter https://raw.githubusercontent.com/ibm-cloud-security/app-identity-and-access-Adapter/master/helm/appidentityandaccessAdapter -
Instale el diagrama.
helm install --name appidentityandaccessAdapter appidentityandaccessAdapter/appidentityandaccessAdapterPuede especificar un código de imagen durante la instalación definiendo el distintivo
image.tag. Por ejemplo,--set image.tag=0.5.0. También puede instalar el gráfico localmente. Para ello, clone el repositorio ejecutandogit clone git@github.com:ibm-cloud-security/app-identity-and-access-Adapter.gitantes de ejecutar el mandato de instalación.
Aplicación de una política de autorización y autenticación
Una política de autenticación o autorización es un conjunto de condiciones que deben cumplirse para que una solicitud pueda acceder a un acceso de recurso. Al definir la configuración de servicio del proveedor de identidades y una política que describe cuándo debe utilizarse un flujo determinado, puede controlar el acceso a cualquier recurso de la malla de servicio. Para ver ejemplos de CRD, consulte el directorio de muestras.
Para crear una política:
- Defina una configuración.
- Registre el punto final.
Definición de una configuración
En función de si va a proteger aplicaciones frontales o de fondo, cree una configuración de política con una de las opciones siguientes.
-
Para aplicaciones frontales: las aplicaciones basadas en navegador que requieren autenticación de usuario se pueden configurar para que utilicen el flujo de autenticación de OIDC/OAuth 2.0. Para definir un CRD de
OidcConfigque contenga el cliente utilizado para facilitar el flujo de autenticación con el proveedor de identidad, utilice el ejemplo siguiente como guía.apiVersion: "security.cloud.ibm.com/v1" kind: OidcConfig metadata: name: oidc-provider-config namespace: sample-namespace spec: discoveryUrl: https://us-south.appid.cloud.ibm.com/oauth/v4/<tenantID>/.well-known/openid-configuration clientId: <clientID> clientSecret: <randomlyGeneratedClientSecret> clientSecretRef: name: <nameOfKubeSecret> key: <keyInKubeSecret>Explicación de los componentes del archivo de configuración YAML Campo Tipo Obligatorio Descripción discoveryUrlstring Sí Un punto final conocido que proporciona un documento JSON de información de configuración de OIDC/OAuth 2.0. clientIdstring Sí Un identificador para el cliente que se utiliza para la autenticación. clientSecretstring *No Un secreto de texto sin formato que se utiliza para autenticar al cliente. Si no se proporciona, debe existir un campo clientSecretRef.clientSecretRefobjeto No Un secreto de referencia que se utiliza para autenticar al cliente. La referencia se puede utilizar en lugar del campo clientSecret.clientSecretRef.namestring Sí El nombre del secreto de Kubernetes que contiene el campo clientSecret.clientSecretRef.keystring Sí El campo dentro del secreto de Kubernetes que contiene el valor de clientSecret. -
Para aplicaciones backend: La especificación OAuth 2.0 Bearer token define un patrón para proteger APIs mediante el uso de JSON Web Tokens(JWTs). Al utilizar la configuración siguiente como ejemplo, defina un CRD
JwtConfigque contenga el recurso de clave pública, que se utiliza para validar firmas de señales.apiVersion: "security.cloud.ibm.com/v1" kind: JwtConfig metadata: name: jwt-config namespace: sample-app spec: jwksUrl: https://us-south.appid.cloud.ibm.com/oauth/v4/<tenantID>/publickeys
Registro de puntos finales de aplicación
Registre los puntos finales de aplicación dentro de un CRD de Policy para validar las solicitudes entrantes y aplicar las reglas de autenticación. Cada Policy se aplica exclusivamente al espacio de nombres de Kubernetes
en el que vive el objeto, y puede especificar los servicios, las vías de acceso y los métodos que desea proteger.
apiVersion: "security.cloud.ibm.com/v1"
kind: Policy
metadata:
name: samplepolicy
namespace: sample-app
spec:
targets:
-
serviceName: <svcSampleApp>
paths:
- exact: /web/home
method: ALL
policies:
- policyType: oidc
config: <oidcProviderConfig>
rules:
- claim: scope
match: ALL
source: access_token
values:
- appid_default
- openid
- claim: amr
match: ANY
source: id_token
values:
- cloud_directory
- google
- exact: /web/user
method: GET
policies:
- policyType: oidc
config: <oidcProviderConfig>
redirectUri: https://github.com/ibm-cloud-security/app-identity-and-access-Adapter
- prefix: /
method: ALL
policies:
-
policyType: jwt
config: <jwtConfig>
| Objeto de servicio | Tipo | Obligatorio | Descripción |
|---|---|---|---|
serviceName |
string |
Sí | El nombre del servicio Kubernetes en el espacio de nombres de política que desea proteger. |
paths |
array[Path Object] |
Sí | Una lista de objetos de vía de acceso que define los puntos finales que desea proteger. Si no se especifica, se protegen todas las vías de acceso. |
| Objeto de vía de acceso | Tipo | Obligatorio | Descripción |
|---|---|---|---|
exact or prefix |
string |
Sí | La vía de acceso en la que desea aplicar las políticas. Las opciones incluyen exact y prefix. exact hace coincidir los puntos finales proporcionados exactamente con el último / recortado.
prefix coincide con los puntos finales que empiezan por el prefijo de ruta que se proporciona. |
method |
enum |
No | El método HTTP protegido. Opciones válidas: ALL, GET, PUT, POST, DELETE, PATCH. Valor predeterminado: ALL. |
policies |
array[Policy] |
No | Las políticas de OIDC/JWT que desea aplicar. |
| Objeto de política | Tipo | Obligatorio | Descripción |
|---|---|---|---|
policyType |
enum |
Sí | El tipo de política de OIDC. Las opciones incluyen: jwt u oidc. |
config |
string |
Sí | El nombre de la configuración de proveedor que desea utilizar. |
redirectUri |
string |
No | El URL al que desea que se redirija al usuario tras una correcta autenticación. Valor predeterminado: el URL de la solicitud original. |
rules |
array[Rule] |
No | El conjunto de reglas que desea utilizar para la validación de señal. |
| Objeto de regla | Tipo | Obligatorio | Descripción |
|---|---|---|---|
claim |
string |
Sí | La reclamación que desea validar. |
match |
enum |
No | Los criterios necesarios para la validación de reclamación. Las opciones incluyen: ALL, ANY o NOT. El valor predeterminado se establece en ALL. |
source |
enum |
No | La señal en la que desea aplicar la regla. Las opciones incluyen: access_token u id_token. El valor predeterminado se establece en access_token. |
values |
array[string] |
Sí | El conjunto necesario de valores para la validación. |
Supresión del adaptador
Para eliminar el adaptador y todas las CRD asociadas, debe suprimir el diagramaHelm y las claves de firma y cifrado asociadas.
helm delete --purge appidentityandaccessAdapter
kubectl delete secret appidentityandaccessAdapter-keys -n istio-system
Configuración del registro
De forma predeterminada, el estilo de los registros es JSON, y se proporcionan con un nivel de visibilidad info para facilitar la integración con los sistemas de registro externos. Para actualizar la configuración de registro, puede
utilizar el diagrama de Helm. Los niveles de registro soportados incluyen el rango [-1, 7] tal como se muestra en el núcleo de Zap. Para más información sobre los niveles, consulte la documentación del núcleo de Zap.
Adaptador
Para ver los registros del adaptador, puede utilizar kubectl o acceder al pod desde el pod appidentityandaccessAdapter de la consola de Kubernetes.
alias Adapter_logs="kubectl -n istio-system logs -f $(kubectl -n istio-system get pods -lapp=appidentityandaccessAdapter -o jsonpath='{.items[0].metadata.name}')"
Adapter_logs | jq
Mixer
Si el adaptador no parece recibir solicitudes, consulte los registros de Mixer para asegurarse de que se ha conectado correctamente al adaptador.
alias mixer_logs="kubectl -n istio-system logs -f $(kubectl -n istio-system get pods -lapp=telemetry -o jsonpath='{.items[0].metadata.name}') -c mixer"
mixer_logs | jq