NetScaler Ingress Controller

Directivas de autenticación y autorización para Kubernetes con NetScaler

Las directivas de autenticación y autorización se utilizan para aplicar restricciones de acceso a los recursos alojados por un servidor de aplicaciones o API. Si bien puede verificar la identidad mediante las directivas de autenticación, las directivas de autorización se utilizan para verificar si una solicitud especificada tiene los permisos necesarios para acceder a un recurso.

NetScaler proporciona una CustomResourceDefinition (CRD) de Kubernetes denominada CRD de autenticación que puede usar con el NetScaler Ingress Controller de NetScaler para definir políticas de autenticación en el NetScaler de entrada.

Definición de CRD de autenticación

El CRD de autenticación está disponible en el repositorio GitHub de NetScaler Ingress Controller en: auth-crd.yaml. La CRD de autenticación proporciona atributos para las diversas opciones que se requieren para definir las directivas de autenticación en el NetScaler de entrada.

Atributos de CRD de autenticación

La CRD de autenticación proporciona los siguientes atributos que se utilizan para definir las directivas de autenticación:

  • servicenames
  • authentication_mechanism
  • authentication_providers
  • authentication_policies
  • authorization_policies

Nombres de servicio

El nombre de los servicios para los que se deben aplicar las directivas de autenticación y autorización.

Mecanismo de autenticación

Se admiten los siguientes mecanismos de autenticación:

  • Usar encabezados de solicitud:
    permite la autenticación de usuarios mediante el encabezado de solicitud. Puede utilizar este mecanismo cuando las credenciales o las claves de API se transfieren en un encabezado (normalmente encabezado de autorización). Por ejemplo, puede usar la autenticación mediante encabezados de solicitud para claves básicas, de resumen, de portador o de API.

  • Uso de formularios: puede utilizar este mecanismo con autenticación de usuario o web, incluida la configuración de la parte de confianza para OpenID connect y la configuración del proveedor de servicios para SAML.

Cuando no se especifica el mecanismo de autenticación, el valor predeterminado es la autenticación mediante el encabezado de solicitud.

A continuación se muestran los atributos de la autenticación basada en formularios.

Atributo Descripción
authentication_host Especifica un nombre de dominio completo (FQDN) al que se debe redirigir al usuario para el servicio de autenticación ADC. Este FQDN debe ser único y debe resolverse en la dirección IP front-end de NetScaler con el tipo de ingreso/servicio LoadBalancer o la dirección VIP de Listener CRD.
authentication_host_cert Especifica el nombre del certificado SSL que se va a utilizar con authentication_host. Este certificado es obligatorio al realizar la autenticación mediante el formulario.
ingress_name Especifica el nombre de Ingress para el que se aplica la autenticación mediante formularios.
lb_service_name Especifica el nombre del servicio de tipo LoadBalancer para el que se aplica la autenticación mediante formularios.
listener_name El nombre de la CRD de Listener para la que se aplica la autenticación mediante formularios.
vip Especifica la dirección IP front-end del Ingress para el que se aplica la autenticación mediante formularios. Este atributo se refiere a la dirección frontend-ip proporcionada con el Ingress. Si hay más de un recurso de Ingress que usa la misma frontend-ip, se recomienda usar vip.

Nota:

  • Al usar formularios, la autenticación se puede habilitar para todos los tipos de tráfico. Actualmente, no se admite la autenticación granular.

  • Según el recurso al que necesite aplicar la autenticación basada en formularios, puede usar uno de los atributos ingress_name, lb_service_name, listener_name o vip para especificar el recurso.

Proveedores de autenticación

Los proveedores definen el mecanismo de autenticación y los parámetros que se requieren para el mecanismo de autenticación.

Autenticación

Especifica que la autenticación local se usa con el esquema de autenticación básica HTTP. Para usar la autenticación básica, debe crear cuentas de usuario en el NetScaler de entrada.

Autenticación OAuth

El mecanismo de autenticación de OAuth requiere que un proveedor de identidad externo autentique al cliente mediante OAuth2 y emita un token de acceso. Cuando el cliente presenta el token de acceso a un NetScaler como credencial de acceso, NetScaler valida el token con los valores configurados. Si la validación del token se realiza correctamente, NetScaler concede acceso al cliente.

Atributos de autenticación OAuth

Los siguientes son los atributos de la autenticación de OAuth:

Atributo Descripción
Issuer La identidad (normalmente una URL) del servidor cuyos tokens deben aceptarse para la autenticación.
jwks_uri La URL del extremo que contiene JWK (clave web JSON) para la verificación JWT (token web JSON).
audience La identidad del servicio o la aplicación para los que se aplica el token.
token_in_hdr El nombre de encabezado personalizado en el que está presente el token. El valor predeterminado es el encabezado Authorization.
  Nota: Puede especificar más de un encabezado.
token_in_param El parámetro de consulta en el que está presente el token.
signature_algorithms Especifica la lista de algoritmos de firma que se permiten. De forma predeterminada, se permiten los algoritmos HS256, RS256 y RS512.
introspect_url La URL del extremo de introspección del servidor de autenticación (IdP). Si el testigo de acceso presentado es un testigo opaco, se utiliza la introspección para la verificación del testigo.
client_credentials El nombre del objeto de secretos de Kubernetes que contiene el identificador de cliente y el secreto de cliente necesarios para autenticarse en el servidor de autenticación.
claims_to_save La lista de reclamaciones que se van a guardar. Las reclamaciones se utilizan para crear directivas de autorización.

OpenID Connect (OIDC) es una capa de identidad simple en la parte superior del protocolo OAuth 2.0. OIDC permite a los clientes verificar la identidad del usuario final en función de la autenticación realizada por un servidor de autorización, así como obtener información de perfil básica sobre el usuario final. Además de los atributos de OAuth, puede usar los siguientes atributos para configurar OIDC.

Atributo Descripción
metadata_url Especifica la URL que se usa para obtener metadatos de proveedores de OAUTH u OIDC.
user_field Especifica el atributo del token del que se debe extraer el nombre de usuario. De forma predeterminada, NetScaler examina el atributo de correo electrónico para el ID de usuario.
default_group Especifica el grupo asignado a la solicitud si la autenticación se realiza correctamente. Este grupo se suma a los grupos extraídos del token.
grant_type Permite especificar el tipo de flujo hasta el punto final del token. El valor predeterminado es CODE.
pkce Especifica si se debe habilitar la clave de prueba para el intercambio de código (PKCE). El valor predeterminado es ENABLED.
token_ep_auth_method Especifica el método de autenticación que se utilizará con el punto final del token. El valor predeterminado es client_secret_post.

Autenticación SAML

El lenguaje de marcado de aserciones de seguridad (SAML) es un estándar abierto basado en XML que permite la autenticación de usuarios en todos los productos u organizaciones. El mecanismo de autenticación SAML requiere un proveedor de identidad externo para autenticar al cliente. SAML funciona transfiriendo la identidad del cliente del proveedor de identidades a NetScaler. Al validar correctamente la identidad del cliente, NetScaler concede acceso al cliente.

A continuación se muestran los atributos de la autenticación SAML.

Atributo Descripción
metadata_url Especifica la URL que se utiliza para obtener metadatos SAML.
metadata_refresh_interval Especifica el intervalo en minutos para obtener metadatos de la URL de metadatos especificada.
signing_cert Especifica el certificado SSL para firmar solicitudes del proveedor de servicios (SP) al proveedor de identidad (IdP).
audience Especifica la identidad del servicio o la aplicación para los que se aplica el token.
issuer_name Especifica el nombre utilizado en las solicitudes enviadas desde el SP al IdP para identificar el NetScaler.
binding Especifica el mecanismo de transporte del mensaje SAML. El valor predeterminado es POST.
artifact_resolution_service_url Especifica la URL del servicio de resolución de artefactos en el IdP.
logout_binding Especifica el mecanismo de transporte del cierre de sesión de SAML. El valor predeterminado es POST.
reject_unsigned_assertion Rechaza las afirmaciones de SAML sin firmar. Si este valor es ON, rechaza la afirmación sin firma.
user_field Especifica el ID de usuario SAML especificado en la aserción SAML
default_authentication_group Especifica el grupo predeterminado que se elige cuando la autenticación se realiza correctamente, además de los grupos extraídos.
skewtime Especifica el tiempo de desviación de reloj permitido en minutos en una aserción SAML entrante.
attributes_to_save Especifica la lista de nombres de atributo separados por comas que deben extraerse y almacenarse como pares clave-valor para la sesión en NetScaler.

Autenticación LDAP

LDAP (Lightweight Directory Access Protocol) es un protocolo de aplicación abierto, independiente del proveedor y estándar de la industria para acceder y mantener servicios de información de directorios distribuidos a través de una red de Protocolo de Internet (IP). Un uso común de LDAP es proporcionar un lugar central para almacenar nombres de usuario y contraseñas. LDAP permite que muchas aplicaciones y servicios diferentes se conecten al servidor LDAP para validar a los usuarios.

Nota:

La autenticación LDAP se admite a través de los mecanismos de autenticación que utilizan el encabezado de solicitud o mediante formularios.

A continuación se muestran los atributos de la autenticación LDAP.

Atributo Descripción
server_ip Especifica la dirección IP asignada al servidor LDAP.
server_name Especifica el nombre del servidor LDAP como un FQDN.
server_port Especifica el puerto en el que el servidor LDAP acepta conexiones. El valor por defecto es 389.
base Especifica el nodo base en el que se inician las búsquedas LDAP. Si el servidor LDAP se ejecuta localmente, el valor predeterminado de base es dc=netscaler, dc=com.
server_login_credentials Especifica el objeto secreto de Kubernetes que proporciona credenciales para iniciar sesión en el servidor LDAP. Los datos secretos deben tener nombre de usuario y contraseña.
login_name Especifica el atributo LDAP login name. NetScaler utiliza el nombre de inicio de sesión LDAP para consultar servidores LDAP externos o Active Directories.
security_type Especifica el tipo de seguridad que se utiliza para las comunicaciones entre NetScaler y el servidor LDAP. El valor predeterminado es TLS.
validate_server_cert Valida los certificados del servidor LDAP. El valor predeterminado es NO.
hostname Especifica el nombre de host del servidor LDAP. Si validate_server_cert es ON, este valor debe ser el nombre de host en el certificado del LDAP. Una discrepancia en el nombre de host provoca un error de conexión.
sub_attribute_name Especifica el nombre del subatributo del grupo LDAP. Este atributo se usa para la extracción de grupos del servidor LDAP.
group_attribute_name Especifica el nombre del atributo del grupo LDAP. Este atributo se usa para la extracción de grupos en el servidor LDAP.
search_filter Especifica la cadena que se va a combinar con la cadena de búsqueda de usuarios LDAP predeterminada para formar el valor de búsqueda. Por ejemplo, si el filtro de búsqueda “vpnallowed=true” se combina con el nombre de inicio de sesión LDAP “samaccount” y el nombre de usuario proporcionado por el usuario es “bob”, el resultado es la cadena de búsqueda LDAP “” (& (vpnallowed=true) (samaccount=bob) “”. Escriba la cadena de búsqueda entre dos juegos de comillas dobles.
auth_timeout Especifica el número de segundos que NetScaler espera una respuesta del servidor. El valor por defecto es 3.
password_change Permite solicitudes de cambio de contraseña. El valor predeterminado es DISABLED.
attributes_to_save Lista de nombres de atributo separados por comas que deben obtenerse del servidor LDAP y almacenarse como pares clave-valor para la sesión en NetScaler.

Directivas de autenticación

Las authentication_policies le permiten definir los criterios de selección de tráfico para aplicar el mecanismo de autenticación y también especificar el proveedor que quiere usar para el tráfico seleccionado.

La directiva de autenticación admite dos formatos a través de los cuales puede especificar reglas de autenticación:

  • formato de recursos
  • formato de expresión

Los siguientes son los atributos de las directivas con formato de recursos:

Atributo Descripción
path Conjunto de prefijos de ruta de URL que hacen referencia a un punto de enlace de API específico. Por ejemplo: /api/v1/products/.
method Un conjunto de métodos HTTP. Los valores permitidos son GET, PUT, POST o DELETE. El tráfico se selecciona si el URI de la solicitud entrante coincide con cualquiera de las rutas y cualquiera de los métodos enumerados. Si no se especifica el método, solo se utiliza la ruta para los criterios de selección de tráfico.
provider Especifica el mecanismo de autenticación que se debe utilizar. Si no se proporciona el mecanismo de autenticación, entonces no se lleva a cabo la autenticación.

Los siguientes atributos son para las directivas de autenticación con formato de expresión:

Atributo Descripción
expression Especifica la expresión de NetScaler que se evaluará en función de la autenticación
provider Especifica el mecanismo de autenticación que se debe utilizar. Si no se proporciona el mecanismo de autenticación, entonces no se lleva a cabo la autenticación.

Nota:

Si quiere omitir la autenticación para un punto final específico, cree una directiva con el atributo provider establecido como lista vacía. De lo contrario, se rechaza la solicitud.

Directivas de autorización

Las directivas de autorización le permiten definir los criterios de selección de tráfico para aplicar los requisitos de autorización para el tráfico seleccionado.

La directiva de autorización admite dos formatos a través de los cuales puede especificar las reglas de autorización:

  • formato de recursos
  • formato de expresión

Los siguientes son los atributos de las directivas de autorización con formato de recurso:

Atributo Descripción
path Conjunto de prefijos de ruta de URL que hacen referencia a un punto de enlace de API específico. Por ejemplo: /api/v1/products/.
method Un conjunto de métodos HTTP. Los valores permitidos son GET, PUT, POST o DELETE.
claims Especifica las notificaciones necesarias para acceder a un punto de enlace de API específico. name indica el nombre de la reclamación y values indica los permisos requeridos. Puede tener más de un reclamo. Si se especifica una lista vacía, implica que no se requiere autorización.
  Nota: Cualquier reclamación que deba usarse para la autorización debe guardarse como parte de la autenticación.

Los siguientes son los atributos de las directivas de autorización con formato de expresión:

Atributo Descripción
expression Especifica una expresión que se va a evaluar para la autorización.

Nota:

NetScaler requiere directivas de autenticación y autorización para el tráfico de la API. Por lo tanto, debe configurar una directiva de autorización con una directiva de autenticación. Incluso si no tiene ninguna comprobación de autorización, debe crear una política de autorización con solicitudes vacías. De lo contrario, la solicitud se deniega con un error 403.

Nota:

La autorización se realizará correctamente si la solicitud entrante coincide con una directiva (ruta, método y notificaciones). Todas las directivas se prueban hasta que haya una coincidencia. Si se requiere omitir selectivamente la autorización para un punto final específico, se debe crear una directiva explícita.

Implementar la CRD de autenticación

Realice lo siguiente para implementar la CRD de autenticación:

  1. Descargue el CRD (auth-crd.yaml).

  2. Implemente la CRD de autenticación con el siguiente comando:

    kubectl create -f auth-crd.yaml
    

    Por ejemplo:

    root@master:~# kubectl create -f auth-crd.yaml
    
    customresourcedefinition.apiextensions.k8s.io/authpolicies.citrix.com created
    

Cómo escribir directivas de autenticación y autorización

Después de implementar el CRD proporcionado por NetScaler en el clúster de Kubernetes, puede definir la configuración de la política de autenticación en un archivo. .yaml En el archivo .yaml, use authpolicy en el campo kind y en la sección spec agregue los atributos de Auth CRD según sus requisitos para la configuración de la directiva.

Tras implementar el .yaml archivo, el NetScaler Ingress Controller aplica la configuración de la política de autenticación en el dispositivo Ingress NetScaler.

Proveedor de autenticación local

A continuación, se muestra un ejemplo de definición de directiva de autenticación y autorización para el tipo de proveedor de autenticaciónlocal (local_auth.yaml).

  apiVersion: citrix.com/v1beta1
  kind: authpolicy
  metadata:
    name: authexample
  spec:
      servicenames:
      - frontend

      authentication_providers:
          - name: "local-auth-provider"
            basic_local_db:
                use_local_auth: 'YES'

      authentication_policies:
          - resource:
              path:
                - '/orders/'
                - '/shipping/'
              method: [GET, POST]
            provider: ["local-auth-provider"]
          
          # skip authentication for this
          - resource:
              path:
                - '/products/'
              method: [GET]
            provider: []

      authorization_policies:
          # skip authorization
          - resource:
              path: []
              method: []
              claims: []

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la autenticación local en las solicitudes a lo siguiente:
    • OperaciónGET o POST en pedidos y puntos finales de envío.
  • NetScaler no realiza la autenticación para la operación GET en el dispositivo de punto final products.
  • NetScaler no aplica ningún permiso de autorización.

Verificación JWT de OAuth

A continuación, se muestra un ejemplo de definición de directiva de autenticación y autorización para la verificación JWT de OAuth (oauth_jwt_auth.yaml).

apiVersion: citrix.com/v1beta1
kind: authpolicy
metadata:
  name: authexample
spec:
    servicenames:
    - frontend

    authentication_providers:
      - name: "jwt-auth-provider"
        oauth:
          issuer: "https://sts.windows.net/tenant1/"
          jwks_uri: "https://login.microsoftonline.com/tenant1/discovery/v2.0/keys"
          audience : ["https://api.service.net"]
          claims_to_save : ["scope"]

    authentication_policies:
        - resource:
            path:
              - '/orders/'
              - '/shipping/'
            method: [GET, POST]
          provider: ["jwt-auth-provider"]
        
        # skip authentication for this
        - resource:
            path:
              - '/products/'
            method: [GET]
          provider: []

    authorization_policies:
        - resource:
            path:
              - '/orders/'
              - '/shipping/'
            method: [POST]
            claims: 
              - name: "scope"
                values: ["read", "write"]
        - resource:
            path:
              - '/orders/'
            method: [GET]
            claims: 
              - name: "scope"
                values: ["read"]
        # skip authorization, no claims required
        - resource:
            path:
              - '/shipping/'
            method: [GET]
            claims: []

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la verificación JWT en las solicitudes a lo siguiente:

    • La operación GET o POST en los puntos finales de pedidos y envíos .
  • NetScaler omite la autenticación para la operación GET en el dispositivo de punto final products.

  • NetScaler requiere la notificación de ámbito con los permisos read y write para la operación POST en los dispositivos de punto final orders y shipping.

  • NetScaler requiere la notificación de alcance con el permiso de lectura para la operación GET en el dispositivo de punto final orders.

  • NetScaler no necesita ningún permiso para la operación GET en el dispositivo de punto final shipping.

Para OAuth, si el token está presente en un encabezado personalizado, se puede especificar mediante el atributo token_in_hdr de la siguiente manera:

      oauth:
        issuer: "https://sts.windows.net/tenant1/"
        jwks_uri: "https://login.microsoftonline.com/tenant1/discovery/v2.0/keys"
        audience : ["https://vault.azure.net"]
        token_in_hdr : [“custom-hdr1”]

Del mismo modo, si el token está presente en un parámetro de consulta, se puede especificar mediante el atributo token_in_param de la siguiente manera:

      oauth:
        issuer: "https://sts.windows.net/tenant1/"
        jwks_uri: "https://login.microsoftonline.com/tenant1/discovery/v2.0keys"
        audience : ["https://vault.azure.net"]
        token_in_param : [“query-param1”]

Introspección de OAuth

A continuación, se muestra un ejemplo de definición de directiva de autenticación y autorización para la verificación JWT de OAuth. (oauth_intro_auth.yaml)

  apiVersion: citrix.com/v1beta1
  kind: authpolicy
  metadata:
    name: authexample
  spec:
      servicenames:
      - frontend

      authentication_providers:
          - name: "introspect-provider"
            oauth:
              issuer: "ns-idp"
              jwks_uri: "https://idp.aaa/oauth/idp/certs"
              audience : ["https://api.service.net"]
              client_credentials: "oauthsecret"
              introspect_url: https://idp.aaa/oauth/idp/introspect
              claims_to_save : ["scope"]

      authentication_policies:
          - resource:
              path: []
              method: []
            provider: ["introspect-provider"]
          
      authorization_policies:
          - resource:
              path: []
              method: [POST]
              claims: 
              - name: "scope"
                values: ["read", "write"]
          - resource:
              path: []
              method: [GET]
              claims: 
              - name: "scope"
                values: ["read"]

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la introspección de OAuth como se especifica en el proveedor introspect-provider para todas las solicitudes.

  • NetScaler requiere la declaración de ámbito con los permisos read y write para todas las solicitudes POST.

  • NetScaler requiere la declaración de ámbito con el permiso de lectura para todas las solicitudes GET.

Crear un objeto secrets con credenciales de cliente para introspección

Se necesita un objeto de secretos de Kubernetes para configurar la introspección de OAuth. Puede crear un objeto secreto de forma similar a la que se muestra en el siguiente ejemplo:

apiVersion: v1        
kind: Secret          
metadata:             
  name: oauthsecret
type: Opaque        
stringData:           
 client_id: "nsintro"
 client_secret: "nssintro"

Nota:

Las claves del objeto secreto opaco deben ser client_id y client_secret. Un usuario puede establecer los valores para ellos según lo quiera.

Autenticación SAML mediante formularios

A continuación se muestra un ejemplo de autenticación SAML mediante formularios. En el ejemplo, authhost-tls-cert-secret y saml-tls-cert-secret son secretos TLS de Kubernetes que hacen referencia al certificado y la clave.

Nota:

Cuando certkey.cert y certkey.key son el certificado y la clave respectivamente para el host de autenticación, authhost-tls-cert-secret se pueden formar mediante el siguiente comando:

     kubectl create secret tls authhost-tls-cert-secret --key="certkey.key" --cert="certkey.cert

Del mismo modo, puede usar este comando para formar saml-tls-cert-secret con el certificado y la clave requeridos.


apiVersion: citrix.com/v1beta1
kind: authpolicy
metadata:
  name: samlexample
spec:
    servicenames:
    - frontend

    authentication_mechanism:
      using_forms:
        authentication_host: "fqdn_authenticaton_host"
        authentication_host_cert:
          tls_secret: authhost-tls-cert-secret
        listener_name: “example-listener”

    authentication_providers:
        - name: "saml-auth-provider"
          saml:
              metadata_url: "https://idp.aaa/metadata/samlidp/aaa"
              signing_cert:
                  tls_secret: saml-tls-cert-secret

    authentication_policies:

        - resource:
            path: []
            method: []
          provider: ["saml-auth-provider"]

    authorization_policies:

        - resource:
            path: []
            method: []
            claims: []

<!--NeedCopy-->

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la autenticación SAML según lo especificado en el proveedor saml-auth-provider para todas las solicitudes. Nota: La autenticación granular no es compatible con el mecanismo de formularios.

  • NetScaler requiere la notificación de grupo con el permiso admin para todas las solicitudes POST.

  • NetScaler no requiere ningún permiso específico para las solicitudes GET.

Autenticación OpenID Connect mediante formularios

A continuación, se muestra un ejemplo de creación de autenticación OpenID Connect para configurar NetScaler en una función de parte de retransmisión (RP) para autenticar a los usuarios para un proveedor de identidad externo. authentication_mechanism debe configurarse en using_forms para desencadenar los procedimientos de OpenID Connect.

apiVersion: citrix.com/v1beta1
kind: authpolicy
metadata:
  name: authoidc
spec:
    servicenames:
    - frontend
    authentication_mechanism:
        using_forms:
            authentication_host: "10.221.35.213"
            authentication_host_cert:
                 tls_secret: "oidc-tls-secret"
            ingress_name:  “example-ingress”

    authentication_providers:

        - name: "oidc-provider"
          oauth:
            audience : ["https://app1.citrix.com"]
            client_credentials: "oidcsecret"
            metadata_url: "https://10.221.35.214/oauth/idp/.well-known/openid-configuration"
            default_group: "groupA"
            user_field: "sub"
            pkce: "ENABLED"
            token_ep_auth_method: "client_secret_post"

    authentication_policies:

        - resource:
            path: []
            method: []
          provider: ["oidc-provider"]

    authorization_policies:

        #default - no authorization requirements
        - resource:
            path: []
            method: []
            claims: []
<!--NeedCopy-->

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la autenticación OIDC (parte de confianza) como se especifica en el proveedor oidc-provider para todas las solicitudes.

    Nota: La autenticación granular no es compatible con el mecanismo de formularios.

  • NetScaler no requiere ningún permiso de autorización.

Autenticación LDAP con encabezado de solicitud

A continuación, se muestra un ejemplo de autenticación LDAP mediante el encabezado de solicitud.

En este ejemplo, ldapcredential es el secreto de Kubernetes que hace referencia a las credenciales del servidor LDAP. Consulte el archivo ldap_secret.yaml para obtener información sobre cómo crear credenciales de servidor LDAP.


apiVersion: citrix.com/v1beta1
kind: authpolicy
metadata:
  name: ldapexample
spec:
    servicenames:
    - frontend

    authentication_providers:
        - name: "ldap-auth-provider"
          ldap:
              server_ip: "192.2.156.160"
              base: 'dc=aaa,dc=local'
              login_name: accountname
              sub_attribute_name: CN
              server_login_credentials: ldapcredential

        - name: "local-auth-provider"
          basic_local_db:
              use_local_auth: 'YES'

    authentication_policies:

        - resource:
            path: []
            method: []
          provider: ["ldap-auth-provider"]


    authorization_policies:

        - resource:
            path: []
            method: []
            claims: []
<!--NeedCopy-->

Nota: Con el mecanismo de autenticación basada en encabezado de solicitud, se admite la autenticación granular basada en el tráfico.

autenticación LDAP mediante formularios

En el ejemplo authhost-tls-cert-secret está el secreto TLS de Kubernetes que hace referencia al certificado y la clave.

Cuando certkey.cert y certkey.key son el certificado y la clave respectivamente para el host de autenticación, authhost-tls-cert-secret se pueden formar mediante el siguiente comando:

    kubectl create secret tls authhost-tls-cert-secret --key="certkey.key" --cert="certkey.cert

En este ejemplo, ldapcredential es el secreto de Kubernetes que hace referencia a las credenciales del servidor LDAP. Consulte el archivo ldap_secret.yaml para obtener información sobre cómo crear credenciales de servidor LDAP.

apiVersion: citrix.com/v1beta1
kind: authpolicy
metadata:
  name: ldapexample
spec:
    servicenames:
    - frontend

    authentication_mechanism:
      using_forms:
        authentication_host: "fqdn_authenticaton_host"
        authentication_host_cert:
          tls_secret: authhost-tls-cert-secret
        vip: "192.2.156.156"

    authentication_providers:
        - name: "ldap-auth-provider"
          ldap:
              server_ip: "192.2.156.160"
              base: 'dc=aaa,dc=local'
              login_name: accountname
              sub_attribute_name: CN
              server_login_credentials: ldapcredential

    authentication_policies:

        - resource:
            path: []
            method: []
          provider: ["ldap-auth-provider"]

    authorization_policies:

        - resource:
            path: []
            method: []
            claims: []

<!--NeedCopy-->

La definición de directiva de ejemplo lleva a cabo lo siguiente:

  • NetScaler realiza la autenticación LDAP para todo el tráfico (todas las solicitudes).
  • NetScaler no aplica ningún permiso de autorización.

A continuación se muestra un ejemplo de LDAP_secret.yaml.

apiVersion: v1
kind: Secret
metadata:
  name: ldapcredential
type: Opaque
stringData:
  username: 'ldap_server_username'
  password: 'ldap_server_password'

<!--NeedCopy-->

Ejemplo de compatibilidad de expresiones de NetScaler con Auth CRD

En este ejemplo se muestra cómo puede especificar expresiones de NetScaler junto con las directivas de autenticación y autorización:

  apiVersion: citrix.com/v1beta1
  kind: authpolicy
  metadata:
    name: authexample
  spec:
      servicenames:
      - frontend

      authentication_mechanism:
        using_request_header: 'ON'

      authentication_providers:
          - name: "ldap-auth-provider"
            ldap:              
                server_ip: "192.2.156.160"
                base: 'dc=aaa,dc=local'
                login_name: accountname
                sub_attribute_name: CN
                server_login_credentials: ldapcredential
                # "memberof" attribute details are extracted from LDAP server.
                attributes_to_save: memberof

      authentication_policies:
          # Perform LDAP authentication for the host hotdrink.beverages.com
          - expression: 'HTTP.REQ.HOSTNAME.SET_TEXT_MODE(IGNORECASE).EQ("hotdrink.beverages.com")'
            provider: ["ldap-auth-provider"]


      authorization_policies:
          # ALLOW the session only if the authenticated user is associated with attribute "memberof" having value "grp4"
          - expression: 'aaa.user.attribute("memberof").contains("grp4")'
Directivas de autenticación y autorización para Kubernetes con NetScaler