Just-in-time access bezpečnost s Azure Security Center

Většina administrátorů chce mít možnost připojit se do VM v případě, že se děje něco špatného a ručně zasáhnout. Proto vyžaduje síťově otevřený přístup na SSH, RDP, VNC nebo WinRM port. Tomu velmi rozumím, ale proč nechávat port otevřený i při běžném provozu zbytečně a vystavovat se riziku pokusů o průnik? Co kdyby ho váš firewall blokoval, ale když ho opravdu potřebujete, tak vám ho virtuální síťový kolega třeba na hodinu povolí a pak zas uzavře?

Just in time access v Azure Security Center

Bezpečnostní centrum v Azure disponuje celou řadou monitorovacích a zabezpečovacích mechanismů a just in time access je novinkou. Je to vlastně velmi jednoduché. V Azure není firewall nějaká externí krabice od které má klíče jen vyvolený síťař či bezpečák, ale jde o objekt spravovaný jako všechny ostatní zdroje v Azure Resource Manager. Služba Azure Security Center tedy může jednoduše automatizovat firewallová pravidla na VM a jednoduše povolit na omezený čas přístup do VM na vyžádání.

Azure Security Center má základní verzi zdarma, ta ale neobsahuje funkci just in time access. Můžete si ji vyzkoušet v 60 denním trial nebo pořídit kompletní Azure Security Center včetně threat intelligence, behaviorální analýzy, detekce anomálií a dalších funkcí za 12,65 EUR za VM a měsíc.

Vytvoříme si VM se výchozím firewallem (NSG), který povoluje management přístup (v mém případě s Linux na port 22 čili SSH, u Windows na port 3389, tedy RDP).

$ az group create -n jit -l westeurope
$ az vm create -n jitvm -g jit --image UbuntuLTS --authentication-type password --admin-username tomas --admin-password MojeHeslo123

SSH přístup k této VM bude fungovat.

$ ssh 23.97.217.128
tomas@23.97.217.128's password:

Nastavíme si Just in time access. Jde o funkci, která je součástí Azure Security Center.

V centru zabezpečení klikněte na Just in time.

Povolíme Just in time přístup pro tuto VM.

V následném dialogu nastavíme politiku pro zpřístupňování portů - typicky to budou ty pro správu jako je SSH, RDP, WinRM apod. U každého můžeme nastavit několik parametrů. Jedním z nich je filtrace podle zdrojové adresy, kde můžeme zadat konkrétní rozsah (například pro vnitřní privátní adresy nebo blok veřejných IP vaší firmy) nebo použít konkrétní zdrojovou IP z požadavku. Dále také zadáme maximální čas otevření portu pro jeden požadavek.

V tento okamžik Azure automaticky zavřel SSH přístup do VM.

$ ssh 23.97.217.128
ssh: connect to host 23.97.217.128 port 22: Resource temporarily unavailable

Podívejme se na network security group přiřazenou na VM. Azure Security Center přidalo Deny pravidla pro nastavené porty.

"securityRules": [
   {
     "access": "Deny",
     "description": "ASC JIT Network Access rule for policy 'default' of VM 'jitvm'.",
     "destinationAddressPrefix": "10.0.0.4",
     "destinationPortRange": "22",
     "direction": "Inbound",
     "etag": "W/\"3d41b84b-6610-4dbe-b49c-92b238b1314b\"",
     "id": "/subscriptions/a0f4a733-4fce-4d49-b8a8-d30541fc1b45/resourceGroups/jit/providers/Microsoft.Network/networkSecurityGroups/jitvmNSG/securityRules/SecurityCenter-JITRule_-1058539234_CECD5346BB6D4380AA484CE870B283EE",
     "name": "SecurityCenter-JITRule_-1058539234_CECD5346BB6D4380AA484CE870B283EE",
     "priority": 1000,
     "protocol": "*",
     "provisioningState": "Succeeded",
     "resourceGroup": "jit",
     "sourceAddressPrefix": "*",
     "sourcePortRange": "*"
   },

Požádáme teď o otevření přístupu.

Zvolím pouze port 22 a stačí mi na jednu hodinu.

Po chvilce máme port otevřený.

$ ssh 23.97.217.128
tomas@23.97.217.128's password:

Security Center totiž změnilo příslušné pravidlo v NSG na Allow (všimněte si také, že tam je specificky moje zdrojová IP adresa) a teprve po vypršení stanovené doby to automaticky vrátí zpět na Deny.

"securityRules": [
    {
      "access": "Allow",
      "description": "ASC JIT Network Access rule created by an initiation request for policy 'default' of VM 'jitvm'.",
      "destinationAddressPrefix": "10.0.0.4",
      "destinationPortRange": "22",
      "direction": "Inbound",
      "etag": "W/\"4ae8c174-3af1-4f27-8fad-4551169d3a9d\"",
      "id": "/subscriptions/a0f4a733-4fce-4d49-b8a8-d30541fc1b45/resourceGroups/jit/providers/Microsoft.Network/networkSecurityGroups/jitvmNSG/securityRules/SecurityCenter-JITRule--1058539234-21FC05A217E044D59AB6A0D394376920",
      "name": "SecurityCenter-JITRule--1058539234-21FC05A217E044D59AB6A0D394376920",
      "priority": 100,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "jit",
      "sourceAddressPrefix": "90.181.122.97",
      "sourcePortRange": "*"
    },

Zažádat o přístup můžete nejen z GUI, ale také v PowerShellu. Stačí mít poslední verzi AzureRM commandletů a nainstalovat Azure Security Center modul:

Install-Module -Name Azure-Security-Center

Pak otevřete přístup k VM takhle:

Invoke-ASCJITAccess -ResourceGroupName jit -VM jitvm -Port 22

 

Azure díky softwarově definovaným principům a schopnosti automatizace umožňuje použít metody a techniky, které by v běžné infrastruktuře byly nepraktické. Jednou z nich je just in time přístup do VM. Vyskoušejte si i další vlastnosti Azure Security Center.



Cloud-native Palo Alto firewall jako služba pro Azure Virtual WAN Security
Federované workload identity v AKS - preview bezpečného řešení pro autentizaci služeb bez hesel Security
Azure Firewall Basic - levnější bráška pro malá prostředí nebo distribuované IT Security
Nativní Azure Monitor a Microsoft Sentinel nově umí levnější logy a zabudovanou levnější archivaci - praxe (část 2) Security
Federace tokenů GitHub Actions s Azure Active Directory pro přístup z vaší CI/CD do Azure bez hesel Security