Numero de licencias con Key Management Service (KMS)

27 Febrero, 2010 por IvanZito Dejar una respuesta »

Control de licencias con Key Management Service

Como ya sabes y no procede explicar en este artículo es lo que hace el servicio KMS de Microsoft, sólo vamos a hacer una breve explicación del servicio y nos vamos a centrar en su funcionamiento y como controlar dichas licencias sabiendo el número que debemos reportar y conociendo las versiones de cada uno de los sistemas operativos que se registran en KMS.

Este artículo no explica como se monta el servicio KMS, está orientado a explicar el método por el que vamos a contabilizar las licencias y como funciona internamente dicho servicio.

Este texto se basa principalmente en la experiencia de utilización del servicio y en la necesidad de desarrollar una herramienta para poder contabilizar dichas máquinas sin tener que tener sistemas complejos como System Center Configuration manger ( SCCM ) o System Center Operation Manager (SCOM) para realizar estas funciones, las cuales, requieren una licencia y un agente en cada servidor, algo realmente caro.

Muchas veces es imposible instalar agentes cuando tú organización tiene un número de máquinas muy grande.

Sigue leyendo pulsando para continuar en leer más …

FUNCIONAMIENTO KMS

Como ya sabemos el servicio KMS se encarga de hacer que las máquinas que tienen instalado Windows 7 o Windows Server 2008 se mantengan activadas con microsoft, de manera que estas no se desactiven y entren en la llamanda Funcionalidad Reducida.

Una vez el servcicio KMS está en funcionamiento y las máquinas se activan, necesitamos información para llevar el control del número de máquinas activas, saber cuanto tiempo le queda a las licencias para desactivarse y poder filtrar las máquinas que no queremos que se reporten, ya que son máquinas de laboratorio que estarán instaladas durante poco tiempo con el fin de realizar test y no queremos que se contabilicen en nuestros informes de número de licencias por sistema operativo.

Activación de servidores y forzar el registro en servidor KMS determinado

Cuando instalamos una máquina si está está en dominio o consulta un DNS donde existe el registro SRV que indica a los clientes cual es el servidor KMS y el puerto al que tiene que atacar al servidor, no tenemos problemas de activación. Pero hay muchas veces que se desean activar máquinas que no están en dominio o que están en segmentos de red aislados estás máquinas no encontrarían el registro SRV del servidor KMS y no se activarían.

Para forzar a las máquinas que se registren con un KMS determinado, tenemos que ejecutar en el cliente lo siguiente:

Slmgr.vbs –kms IP_Server_KMS:1688

Esto forzará a que la activación se haga contra el servidor deseado.

Cuando tenemos todas las máquinas forzadas, dentro del dominio o bien pueden consultar un DNS con un registro SRV que apunta al servidor KMS, las máquinas se activan a través de nuestro servidor y se mantienen activas.

Cuando una máquina se activa contra nuestro servidor KMS, cada vez que intenta una activación o  mantener su licencia activa, se crea un evento en el visor de sucesos de la máquina KMS. Este evento muestra información del cliente que se ha activado o ha intentado activar.

Esta información es muy útil para descubrir que es lo que ocurre a las máquinas y para contabilizar el número de máquinas activas, el número máquinas por versión y algunas datos importantes sobre los clientes que se están activando.

Aunque parezca sorprenden Microsoft aún no ha sacado una herramienta que lo haga en condiciones con el fin de ayudar a sus empresas a contabilizar las licencias que luego a ellos mismos les van a reportar. Sin duda programarán una solución, pero nada mejor que hacernos nosotros a medida la nuestra para poder tratar los reportes de licencias como queramos.

Visor de Eventos del server KMS

Las máquinas que se registran en KMS graban un mensaje con event ID: 12290

Este mensaje es la información que se genera cuando una máquina se registra en el servicio KMS. Puedes ver a continuación el visor de eventos del servidor KMS referente al servicio

Dichos eventos tienen todos el siguiente aspecto:

————————————-

An activation request has been processed.

Info:

0×0,5,ELTATE.midominio.com,95cae07f-6c35-4ee8-97a2-e7b51f8acaaf,2010/2/26 16:12,0,1,249120,ad2542d4-9154-4c6d-8a44-30f11ee96989

————————————-

Esta información es muy útil porque de ella vamos a extraer toda la información que necesitamos.

Aquí tenemos una tabla con el significado de cada uno de los valores del registro:

Vamos a comentarlos por encima comparándolos con el ejemplo expuesto:

————————————-

HRESULT: 0×0

N-Policy: 5

Machine: ELTATE.midominio.com

CMID: 95cae07f-6c35-4ee8-97a2-e7b51f8acaaf

Client Time: 2010/2/26 16:12

VM Info: 0

Licensing Status: 1

Time remaining: 249120

ActID: ad2542d4-9154-4c6d-8a44-30f11ee96989

————————————-

NOTA: El valor VM Info no es del todo real, sólo funciona en máquinas que tienen instalado Windows Server 2008 R2 o Windows 7. Esto quiere decir que muchas máquinas físicas grabarán un registro aquí que será “0” que significa que es física cuando en realidad son virtuales.

Antes de nada debemos saber algunas cosa sobre las licencais de las máquinas virtuales:

  1. Un sitema operativo standart puede tener 1 máquina virtual montada sobre el y esta no contará como una licencia a reportar a Microsoft.
  2. Un sistema operativo Enterprise puede tener 4 máquinas virtales ejecutándose sobre el, estas no contarán como licencia.
  3. Un sistema operativo datacenter puede tener tantas máquinas virtuales como queramos sobre el,  que no contarán para reportar a microsoft.

Hemos dicho en la nota que algunas máquinas no graban bien el registro VM Info en el visor de sucesos del servidor KMS por lo que máquinas que no deberian contar porque están sobre sistemas operativos como enterprise o datacenter nos cuenten en nuestro KMS  y por lo tanto nos confundan,  reportando licencias a Microsot que no deberían reportarse.

La solución a este problema es sencilla.

Todas nuestras máquinas que sean virtuales y que no deben reportarse porque ya pagamos una licencia de host que hace que sean free, deben llamarse o comenzar por la misma nomenclatura, es decir, deben tener el mismo prefijo, ya que todos nuestros informes los vamos a sacar utilizando como dato principal el hostname de la máquina.

Por ejemplo, nombra a todas las máquinas virtuales para que su hostname empieze por : MV* ( MVSERVER1, MVSERVER2, MVSERVER3 … etc)  y que decirte que ninguna máquina física, NO debe comenzar por estre prefijo por supuesto. De esta manera lpor medio del hostname identificarás muy rápidamente los sistemas operativos virtuales que no deben contar como una licencia a reportar.

Bien,  después que hemos visto como deben llamarse nuestras máquinas para luego poder sacar un reporte exacto vamos a ver que es lo que hay que hacer para crear una herramienta de reporting para nuestras licencias.

Necesitamos disponer de:

  • Un servidor KMS funcionando
  • Un SQL Server u otra base de datos
  • Un script que extrae la información del Event View del KMS
  • Una bbdd donde se importan dichos datos
  • Reporting Service para sacar los informes o un IIS para extraer la información mediante ASP.

Script de exportación de sucesos a bbdd SQL

Para solucionar el problema, una solución que planteamos es exportar el visor de sucesos a un servidor SQL y separar la entrada de datos en SQL para que los campos de la bbdd coincidan con los campos y valores del evento del visor del sucesos.

Quiero decir, que es necesario crear un script que recoja el visor de sucesos y lo importe en una tabla de SQL.

No vamos a daros el script, pero si tenéis a mano algún developer no le costará mucho utilizando VBS para crear este de manera que los datos del visor de sucesos queden de la siguiente manera en una tabla de SQL:

Que deciros de lo que podemos hacer ya con esta información, podemos hacer todo… una base de datos con los valores de todo el visor de sucesos del KMS y además por la tabla facilitada, sabemos que significan cada uno de sus valores.

Debemos saber en primer lugar que es el campo ActID, pues este el el tipo de sistema operativo, create una tabla a parte con los tipos de sistema operativo:

Creaté también otra con los tipos de estado de la licencia:

Bien,  con esta información podemos sacar, el número de máquinas y los sistemas operativos agrupados por número de máquina.

Yo por ejemplo con estas tres tablas he creado la sigueinte vista, la he llamdo KMS_Reporte

——————————————-

SELECT     a.Machine, a.ActID, b.tipo_producto, MAX(a.Client_Time) AS max_client_time

FROM         dbo.kms_eventos_detalle AS a INNER JOIN

dbo.kms_type_license AS b ON LTRIM(RTRIM(LOWER(a.ActID))) = LTRIM(RTRIM(LOWER(b.ActID)))

WHERE     (a.Machine NOT LIKE ‘MV%’) AND (a.Machine NOT LIKE ‘PC%’) AND (a.Machine NOT LIKE ‘LABO%’) AND (a.Machine NOT LIKE ‘TEST%’) AND

(a.Machine NOT LIKE ‘windows%’) AND (a.VM_Info = 0) AND (a.Licensing_Status = 1)

GROUP BY a.Machine, a.ActID, b.tipo_producto

——————————————-

Esta vista me devuelve sólo el último registro que se guardó en KMS de cada máquina, el sistema operativo de esta y cuando finaliza su periodo de gracia.

Fíjate en la select, un detale imporatante, sacamos sólo las máquinas activas y las que no son máquinas virtuales:

——————————————-

(a.VM_Info = 0) AND (a.Licensing_Status = 1)

Además finstramos por las que empiezan por:

(a.Machine NOT LIKE ‘MV%’) AND (a.Machine NOT LIKE ‘PC%‘) AND (a.Machine NOT LIKE ‘LABO%‘) AND (a.Machine NOT LIKE ‘TEST%’) AND (a.Machine NOT LIKE ‘windows%’) AND (a.VM_Info = 0) AND (a.Licensing_Status = 1)

——————————————-

Observa:

Luego lo que hago es hacer otra vista que es la siguiente:

————————————————————-

SELECT     TOP (100) PERCENT tipo_producto, COUNT(*) AS cuenta

FROM         dbo.kms_reporte

GROUP BY tipo_producto

ORDER BY cuenta DESC

————————————————————-

Aquí agrupo el número de máquinas por versión de sistema operativo:

Luego utilizo reporting service para crear un informe de esta última vista o utilizo ASP para pintarlo en una web.

Nota: Para poder sacar de forma sencilla un informe de reporting service deberás utilizar una tabla y no una vista.

Este artículo te da una idea clara de cómo sacar los reportes.

Si necesitas alguna información adicional, puedes poner un comentario en el post y ampliaremos la información, pero como te digo, es simplemente para orientarte para que sepas como constuir dicha herramienta.

Publicidad

Dejar una Respuesta