lunes, 6 de mayo de 2013

Qué importancia la herencia en los roles de negocio de Q1IM

Es de gran importancia trabajar con roles de negocio dentro de una organización para así tener indetificado qué tareas tiene asignadas, permisos, accesos, recursos…etc. El problema viene dado cuando hablas con los responsables de la organización y te proponen/comentan que existen más roles de negocio que empleados pero ¿Cómo es esto posible? ¿Más roles que empleados? 

Bueno, volviendo a lo nuestro, la gestión y definición de roles negocio dentro de un gestor de identidades tiene que ser sencillo, intuitivo, eficaz y sobre todo que permita aplicar la herencia entre los diferentes roles. Para explicar esto os pongo un ejemplo bastante típico en la actualidad:

imageUna empresa tiene 3 pefiles de empleados: Externo, Interno y Ajeno. Inicialmente, vamos a emparejar esta tipología de empleados con roles de negocio básicos (Role Class) de Q1IM con los mismos nombres

image

Cada uno de estos perfiles (Role Class) “consume” diferentes recursos. Ajeno: Usuario LDAP, Externo: Usuario LDAP y usuario en Lotus Notes y el Interno: Usuario directorio activo, usuario en Exchange, usuario en LDAP, usuario en Notes y usuario en SAP. Este “consumo” se gestiona desde Q1IM asignando dichos recursos al perfil (ver imagen de ejemplo del Perfil Interno)

image

PRIMERA HERENCIA: Bien dentro de este perfil podemos crear una estructura jerárquica que permita dar de alta un buzón de correo en Exchange y que previamente se dé de alta un usuario en directorio activo. Para ello crearemos la siguiente jerarquía (aunque esta ya es gestionada automaticamente por Q1IM):

image

SEGUNDA HERENCIA: Continuando con la misma organización, dentro de “Usuario en AD Corporativo”, dependiendo del departamento que pertencezca se le asignará la pertenencia a diferentes grupos del directorio activo (Dpto. Comunicaciones, Dpto.Financiero y Dpto. IT) y dependiendo del cargo de este empleado se le asignará otros derechos, grupos y accesos (Admin. Routers, Admin. Windows…etc)

image

Toda esta estructura está basada en roles de negocio que permiten ser ágiles a la organización, es decir, si un empleado pasa de ser Administrador de Unix a Administrador de Windows, con SÓLO desasignarle del rol “Admin. Windows” a “Admin. Routers” las atribuciones que tenía por se administrador de Windows se eliminarían y se asignarian las otras de su nuevo cargo "administrador de routers” y además de heredaría los permisos, grupos y derechos por pertenecer al nuevo departamento “Dpto. Comunicaciones”

Rol: Usuario en AD Corporativo

image

Rol: “Dpto Comunicaciones”

image

Rol: “Admin. Routers”

image

Importante conocer que este cambio (empleado es asignado a otro cargo dentro de la compañía) será registrado en la línea temporal (timetrace) de dicho empleado

image

Creo que es sencillo de entender, sobre todo porque las imagenes valen más que mil palabras, pero sobre todo es fácil gestionar desde Q1IM

 

Espero que os sirva de ayuda

jueves, 2 de mayo de 2013

Como gestionar la union de equipos en el dominio a traves ActiveRoles Server (3/4)

Una vez modificado el formulario de creación de equipos en el dominio, crearemos un nuevo comando asociado al objeto computer de la web en la web de ARS que permita incorporar dicho equipo en el dominio. Para ello:

  • Acceder a la web de ARS con permisos de Administrador
  • Pulsar el botón Cutomization

image

  • Seleccionar Customization Task
  • Pulsar Computer
  • De la lista desplegable superior, seleccionar Create New Command

image

  • Seleccionar el tipo como “Command Type”, Form Task
  • Pulsar Next
  • Rellener los campos como se muestra en la siguiente imagen

image

  • Pulsar Save
  • Pulsar Link with New Form

image

  • Incorporar el nombre del formulario y pulsar Finish

image

  • Añadir los campos que se muestran a continuación mediante Add Entry | Select

image

(** El atributo virtual edsva-ComputerJoinDomain es de tipo Boolean y se almacena en la base de datos)

  • Pulsar Save
  • Pulsar Reload
  • Pulsar Exit

Verificaremos que el comando y el formulario son accesisbles desde la Web. Acceder a la unidad virtual dónde se gestionan el alta de equipos. En mi caso, tengo creada la siguiente estructura para su gestión

image

  • Acceder a Gestion de Equipos | Alta de Equipos | Pre-Stage.Computers
  • Seleccionar un equipo
  • Seleccionar de la lista desplegable, Join computer to domain

image

image

Como puede observarse en la imagen superior, los campos que se solicitan para incorporar el equipo al dominio serían:

  • Local User: Usuario local del equipo con permisos administrativos
  • Password Local User: Contraseña
  • Member of Domain: Opción para incorporar el equipo al dominio

Para incorporar el equipo en el dominio será necesario seleccionar rellenar todos los campos y pulsar Save. Este procedimiento lo veremos en el siguiente artículo

Artículos relacionados:

Como gestionar la union de equipos en el dominio a traves ARS (2/4)

Como gestionar la union de equipos en el dominio a traves ARS (1/4)

 

Espero que os sirva de ayuda

martes, 16 de abril de 2013

Ticketing System integration using Web Services in TPAM

I have always said that “the most important thing in a solution is the capability to adapt to customer environment and not backwards”.In this case, I’m going to try to explain how we could call a custom Web services from PAM and How to manage the result to create a validation rule. This rule will detect it when an user will try to session /password request access. Sounds easy but It IS easy

Note: 2 Months ago, I wrote in my blog about How we could integrate ticketing system into PAM using SQL directly rather than Web Services. If you need to read it, click on the link (Spanish version)

Integración servicio de ‘ticketing’ en TPAM (1/4)

Scenario:

  • Custom Web Services (retrieve status incident information)
  • SQL Server table
  • PAM (v.2.5)

 

Custom Web Services (created in Visual Studio 2010)

WSIncident.asmx

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Collections;
 
namespace WSIncidents
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
   
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
 
        [WebMethod]
        public string GetStatusIncident(string sTicketNumer)
        {
            string results = "";
            SqlConnection oConnection = new SqlConnection(
                            @"Data Source=.;Initial Catalog=SimpleTicket;User ID=sa;Password=Passw0rd");
            oConnection.Open();
 
            string sqlState = "Select T_Status from Tickets Where T_Number='" + sTicketNumer + "'";
            SqlCommand cmd = new SqlCommand(sqlState, oConnection);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                //Status
                results = (reader.GetValue(0).ToString());
            }
            reader.Close();
            oConnection.Close();
            return results;
        }
    }
}

Web.config






<?xml version="1.0"?>
<configuration>


<appSettings/>
    <connectionStrings/>
    <system.web>
        <compilation debug="true" >
        </compilation>
        <customErrors mode="Off"/>
        <webServices>
            <protocols>
                <add name="HttpGet"/>
                <add name="HttpPost"/>
            </protocols>
        </webServices>

    <authentication mode="Windows" />
    </system.web>


</configuration>


Testing Web Services



image


Data available


image


 


Ticket System Configuration in PAM



  • From virtual directory /admin

  • Choose menu System Status/Settings | Ticket Systems

  • Click Add Ticket System and add information below

image



  • Click Save Changes

  • Click Data

  • Add Parameter Name: sTicketNumer and Parameter Value: :TicketNumber:

  • Substitution Values, Add :SystemName: and :TicketNumber:

image



  • Click Generate List

  • Click Accept

  • Choose [String] Column and change by [Status]

image



  • Click Save Changes

  • Click Rules Tab

  • Click Add Rule

  • Add follow configuration

image



  • Click Save Changes

Now, you can test it from Session / Password Request Wizard.


image


 


Thanks Jeff Harkavy for help me!!!

jueves, 11 de abril de 2013

Como gestionar la union de equipos en el dominio a través ActiveRoles Server (2/4)

Una vez entendido el problema, nos ponemos manos a la obra. Lo primero que generaremos será una política de provisioning que verifique que el nombres de los equipos en Windows sea único. Posteriormente modificaremos el formulario de alta de la Web de ARS (imagen inferior) por uno personalizado (se ve al final de este artículo) donde solicite al usuario de Helpdesk como campos obligatorios la localización y departamento. A partir de estos campos, se creará el nombre de máquina automáticamente añadiendo un código secuancial (0000, 0001, 0002, 0003…etc)

Formato: localización.departamento.<xxxx>

image

Política de creación única de nombre de equipo

Para la creación de nombre de equipo utilizaremos los campos location, Department y un secuencial. Este dato se generará de forma automática por cada uno de los equipos dados de alta desde ARS.

  • Crear un script Module con el siguiente contenido
function onPreCreate($Request) {
  if ($Request.Class -ne 'computer') { return }
  
  $Location = ''
  $Department = ''
  for ($i=0; $i -lt $Request.PropertyCount; $i++) {
    if ($Request.Item($i).Name -eq 'location') {
      $Location = $Request.Get('location')
    }
    if ($Request.Item($i).Name -eq 'Department') {
      $Department = $Request.Get('Department')
    }
  }
  if ($Location -ne '') { return }
  
  GeneratesAMAccountName -Location ($Localtion) -Department ($Department)
}
 
function GeneratesAMAccountName() {
  param (
    [parameter(Mandatory=$True)]
    $Location,
    [parameter(Mandatory=$True)]
    $Department
  )
  
  if ($Location -eq '') { return }
  $iContador = 0
  $NameComputer = $Location + "." + $Department + "." + $iContador.tostring("0000") + "$"
  $EventLog.ReportEvent($Constants.EDS_EVENTLOG_ERROR_TYPE, "Buscando...:" + $NameComputer )
  $bencontrar = $false 
  do
  {
      $Computer = Get-QADComputer -SamAccountName $NameComputer
      if ($Computer.name -eq $null)
          {
          $bencontrar = $true
          }
      else
        {
          $bencontrar = $false
          $iContador = $iContador + 1
          $NameComputer = $Location + "." + $Department + "." + $iContador.tostring("0000") + "$"
        }
  }
  while (!$bencontrar)
  $NameComputer = $NameComputer.ToString().Substring(0, $NameComputer.ToString().Length -1)
  return $NameComputer 
 }
 
function onGetEffectivePolicy($Request) {
  if ($Request.Class -ne 'computer') { return }
  
  $Location = ''
  $Department = ''
  for ($i=0; $i -lt $Request.PropertyCount; $i++) {
    if ($Request.Item($i).Name -eq 'location') {
      $Location = $Request.Get('location')
    }
    if ($Request.Item($i).Name -eq 'Department') {
      $Department = $Request.Get('Department')
    }
  }
 
  #if ($Location -eq '') {
  #  GeneratesAMAccountName -Location ($Localtion) -Department ($Department)
  #}
  
  if ($Location -ne '') {
      $NameComputer = GeneratesAMAccountName -Location ($Location) -Department ($Department)
  }
  
  $Request.SetEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_SERVER_SIDE_GENERATED, $True)
  $Request.ClearEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_POLICY_RULE)
  $Request.SetEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_ADJUST_CASE, $Constants.EDS_CHAR_TRANSFORMATION_TYPE_NONE)
  $Request.SetEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_PROHIBITED_SYMBOLS, $Context.Parameter("Simbolos prohibidos"))
  $Request.SetEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_AUTO_GENERATED, $True)
 
 
  $Request.SetEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_SERVER_SIDE_GENERATED, $True)
  $Request.ClearEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_POLICY_RULE)
  $Request.SetEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_ADJUST_CASE, $Constants.EDS_CHAR_TRANSFORMATION_TYPE_NONE)
  $Request.SetEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_PROHIBITED_SYMBOLS, $Context.Parameter("Simbolos prohibidos"))
  $Request.SetEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_AUTO_GENERATED, $True)
 
 
  if (($location -ne $null) -and ($location -ne '')) {
  
    $EventLog.ReportEvent($Constants.EDS_EVENTLOG_ERROR_TYPE, "Anadiendo dato")
    $Request.SetEffectivePolicyInfo('cn', $Constants.EDS_EPI_UI_GENERATED_VALUE, $NameComputer)
    $Request.SetEffectivePolicyInfo('sAMAccountName', $Constants.EDS_EPI_UI_GENERATED_VALUE, $NameComputer)
    $Request.Set
  }
}
 
function onInit($Context) {
  $Param = $Context.AddParameter("Regla de Generacion")
  $Param.Required = $True
  $Param.MultiValued = $True
  $Param.Description = "Please define your sAMAccountName generation rules here. Sample:`t%<localtion>.%<cn>`n"
  $Param = $Context.AddParameter("Simbolos prohibidos")
  $Param.Required = $False
  $Param.DefaultValue = '"/\[]:;|=,+*?<>'
  $Param.Description = "Introducir la lista de simbolos y caracteres que no estan permitidos"
}


  • Crear una política de provisioning con el nombre: “Nombre de Equipo” y asociar el script anterior a dicha política

Modificaciones del formulario de alta de un equipo en la Web de ARS



  • Iniciar sesión con un usuario administrador de ARS
  • Acceder al formulario de alta de equipos desde el menú New Computer
  • Pulsar Click Here to customize this form

image



  • Añadir los campos location y department como se muestran en la siguiente imagen como campos obligatorios

image



  • Pulsar Save, Reload y por ultimo Exit
  • Crear dos políticas de provisioning que permitan rellenar los campos relativos a la localización y los departamentos de la compañía (Nota: en mi caso estos datos son estáticos pero es posible rellenar la lista con datos dinámicos)

image



  • Acceder de nuevo al menú New Computer. El interface gráfico tendrá el siguiente aspecto

image


Para generar el nombre del equipo, seleccionar la localización y el departamento. Posteriormente pulsar el botón de debajo del campo Name: y *Computer Name para que genere de forma automática el nombre del equipo


Artículos relacionados:



Como gestionar la union de equipos en el dominio a través ActiveRoles Server (1/4)


Como gestionar la union de equipos en el dominio a traves ARS (3/4)


Espero que os sirva de ayuda