Conectar a una VM en Azure con Powershell

Conectar a una VM en Azure con Powershell

Para gestionar y configurar nuestras VM en Azure podemos conectar fácilmente por RDP, pero si queremos trabajar a un nivel diferente, vamos a ver en este cybertruco como lo podemos hacer también con Powershell para de esta manera poder gestionar nuestras máquinas virtuales de manera automatizada y mucho más agil.

azure vm

Preparando el entorno local

Necesitaremos disponer de la versión 5.1 de Powershell, con el módulo de Azure RM Powershell 6.11, como siempre primero abrimos Powershell como administrador y seguimos los siguientes pasos

1-En caso que no lo tengamos ya, instalaremos el módulo de Azure Resource Manager en nuestro Powershell con el cmdlet

Install-Module AzureRM

2-Iniciamos el servicio WinRM con el cmdlet

Start-Service WinRM

3-Añadiremos ahora la IP pública de la máquina virtual a la lista local de trusted hosts

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 1.1.1.1

Configurando el NSG relativo a la VM en Azure

Ahora comenzamos a actuar ya contra nuestros recursos en Azure, en concreto contra el NSG (Network security group) asociado a ella, para abrir los puertos HTTP y HTTPS para nuestro WinRM y de esta manera trabajar a través de Powershell y llegar a nuestra VM.

1-Primero conectamos contra nuestra cuenta de Azure con

Connect-AzureRMAccount

2-Una vez en nuestro tenant, podemos ver un par de listados interesantes para obtener los datos necesarios para los siguientes comandos. Por una parte un listado de los grupos de recursos que disponemos

Get-azurermresourcegroup | ft

Seguidamente y habiendo identificado el grupo de recursos sobre el que trabajaremos, podemos sacar un listado de los recursos que contiene, entre ellos se encontraría nuestra máquina virtual y nuestro Network Security Group

Get-azurermresource -resourcegroupname cyberseguridad | ft

3-Una vez tenemos esos datos prepararemos y lanzaremos dos comandos muy similares, cada uno de ellos compuesto por tres cmdlets. Vamos a ver sus tres partes por separados

Primero debemos identificar y obtener el NSG sobre el que queremos aplicar la regla para ellos utilizaremos el cmdlet Get-AzureRmNetworkSecurityGroup con los parámetros -name para indicar el nombre de la NSG y -Resourcegroupname para indicar el grupo de recursos donde se encuentra el NSG.

Get-AzureRmNetworkSecurityGroup -Name Nsg -ResourceGroupName cyberseguridad

La segunda parte del comando es la regla en si que queremos añadir, para ello y con la entrada por pipeline de la primera parte utilizaremos el cmdlet  Add-AzureRmNetworkSecurityRuleConfig con una buena cantidad de parámetros para definir la regla en si.

Add-AzureRmNetworkSecurityRuleConfig -Name AllowingWinRMHTTPS -Description "To Enable PowerShell Remote Access" -Access Allow -Protocol Tcp -Direction Inbound -Priority 104 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * DestinationPortRange 5986

Los parámetros en orden son:

  • Name donde le indicamos el nombre de la regla
  • Description para añadir una descripción
  • Access que puede ser allow o deny
  • Protocol para especificar el protocolo, en este caso TCP
  • Direction para indicar si es de entrada (inbound) o salida (outbound) a nuestra VM
  • Priority para asignar la prioridad que deba tener la regla esto debe ser un valor único en el grupo entre 100 y 4096
  • SourceAddressPrefix para indicar el origen que tendrá la conexión afectada por la regla en este caso Internet
  • SourcePortRange para indicar el puerto a través el cual se conectará si lo conocemos en otro caso ponemos *
  • DestionationAddressPrefix para indicar la ip de destino de la máquina a la que afectará la regla, podemos indicar *, una IP o palabras genéricas como VirtualNetwork, Internet o AzureLoadBalancer
  • DestinationPortRange especificamos a que puerto afectará la regla en la VM.

Por último la tercera parte del comando que recibirá de nuevo la entrada por tubería del anterior será utilizando el cmdlet Set-AzureRmNetworkSecurityGroup tal cual para aplicar la regla.

Los dos comandos quedarían de la siguiente manera.

Get-AzureRmNetworkSecurityGroup -Name NSG -ResourceGroupName cyberseguridad | Add-AzureRmNetworkSecurityRuleConfig -Name PermitirWinRMHTTPS -Description "Permitir WinRM a través de HTTPS" -Access Allow -Protocol Tcp -Direction Inbound -Priority 104 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * DestinationPortRange 5986 | Set-AzureRmNetworkSecurityGroup

Get-AzureRmNetworkSecurityGroup -Name NSG -ResourceGroupName cyberseguridad | Add-AzureRmNetworkSecurityRuleConfig -Name PermitirWinRMHTTP -Description "Permitir WinRM a través de HTTP" -Access Allow -Protocol Tcp -Direction Inbound -Priority 105 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * DestinationPortRange 5985 | Set-AzureRmNetworkSecurityGroup

Configurando el firewall en nuestra VM

Una vez ejecutado este señor comando vamos a preparar nuestra máquina virtual para aceptar la conexión remota a nivel local. Este paso es básicamente el mismo que usariamos en cualquier máquina física para permitir el acceso a través de WinRM. Para ellos vamos a crear un fichero .ps1 que ejecutaremos en remoto en nuestra máquina virtual. El contenido del mismo será el siguiente

winrm qc /force netsh advfirewall firewall add rule name= WinRMHTTP dir=in action=allow protocol=TCP localport=5985 netsh advfirewall firewall add rule name= WinRMHTTPS dir=in action=allow protocol=TCP localport=5986

Simplemente estamos añadiendo un par de reglas al firewall local de nuestra máquina virtual para permitir el WinRM

Ejecutamos el script creado en nuestra máquina virtual utilizando el cmdlet Invoke-AzureRMVMRunCommand, indicando el grupo de recursos y el nombre de la máquina virtual.

Invoke-AzureRmVMRunCommand -ResourceGroupName cyberseguridad -Name demo -CommandId 'RunPowerShellScript' -ScriptPath C:\scripts\ejemplo.ps1

Conectando con Powershell a nuestra VM

Ahora que ya hemos configurado tanto nuestro Powershell como las reglas dentro del Network Security Group y el Firewall en nuestra máquina virtual, ya solo nos queda conectar con el cmdlet Enter-PSSession tal y como haríamos en nuestra red local indicando la IP pública de nuestra VM.

Enter-PSSession -ComputerName 1.1.1.1

Conectar powershell a Office 365 utilizando usuarios con multiple factor de autenticación

Conectar powershell a Office 365 utilizando usuarios con multiple factor de autenticación

A la hora de utilizar un mayor grado de seguridad en las cuentas el trabajo desde los clientes al usar esas cuentas también se complica un poco y a veces puede ser un poco frustrante. Hoy vamos a ver cómo podemos conectar a servicios como Exchange Online y al Security & Compliance Center a través de powershell utilizando como decíamos usuarios con múltiple factor de autenticación habilitado.

powershell office365 multiple authentication factor

Al habilitar el múltiple factor de autenticación hay varios aspectos que debemos tener en cuenta para evitar problemas con nuestros usuarios como la necesidad de app passwords o las diferencias en cuanto a conectar a los diferentes servicios con powershell, que es lo que vamos a comentar en este artículo. Vamos a hablar de diferentes servicios de administración uno por uno para que vean de una manera rápida lo sencillo que es conectar a los mismos.

Office 365

Podemos conectar simplemente con
Connect-msolservice
Aparecerá un popup en el que tras introducir nuestro nombre de usuario y contraseña, tendremos que introducir el código de verificación que recibamos

Necesita de tener instalado el módulo correspondiente que se puede realizar con
Install-Module MSOnline.

Azure AD

Como el anterior simplemente tener instalado el módulo y ejecutar
Connect-azuread
Se nos pedirà usuario, contraseña y posteriormente código

El módulo necesario lo podemos instalar con
Install-Module -Name AzureAD

Exchange Online / Security & Compliance Center

Para estos servicios el acceso es ligeramente diferente,

  1. Nos logueamos en nuestro Office 365
  2. Accedemos al panel de administración de Exchange Online
  3. Clickamos en “Hybrid”
  4. Clickamos en “configurar” el modulo para powershell de Exchange Online

Esto descargará en nuestra máquina el módulo que luego podremos reutilizar. Para que este módulo funcione correctamente en nuestra máquina debemos de tener configurado el WinRM (Windows Remote Management) para que acepte la autenticación básica. Podemos comprobar esto sin salir de powershell con

winrm get winrm/config/client/auth

En caso que no veamos el valor del parámetro Basic = true , podemos cambiarlo con el siguiente comando

winrm set winrm/config/client/auth @{Basic="true"}

Si no tenemos WinRM activado recibiremos un mensaje de error al querer comprobar su estado.

Una vez tengamos esto solucionado, el mismo módulo indica los únicos comandos que necesitamos tanto para conectar contra Exchange Online como para el Security & Compliance Center que son:

Exchange Online

Connect-EXOPSSession -UserPrincipalName [email protected]

Security & Compliance Center

Connect-IPPSSession -UserPrincipalName [email protected]

Y tras esto como al conectar a los otros servicios, contraseña y código.

HAPPY HACKING