Functions/Request-AHJITVMAccess.ps1

Function Request-AHJITVMAccess {
    [CmdletBinding()]
    param (
        [Parameter()]
        [string]
        $Id,
        # [Parameter()]
        # [int[]]
        # $Ports,
        [Parameter()]
        [int]
        [ValidateScript( { $_ -le 24 })]
        $Hours = 4,
        [Parameter()]
        [validateScript( { [IPAddress] $_ })]
        [string]
        $SourceIP = $(Get-AHMyPublicIPAddress),
        [Parameter()]
        [ValidateSet("Linux", "Windows")]
        [string]
        $OS
    )

    $MyResource = Get-AzResource -ResourceId $Id
    If (!$?) {
        throw "Invalid ResourceId"
    }

    # Start Section: Put policy in place
    <#
    $JitPolicy = (@{
            id = $Id;
            ports = (@{
                    number = 22;
                    protocol = "*";
                    allowedSourceAddressPrefix = @($(Get-AHMyPublicIPAddress)); #@("*");
                    maxRequestAccessDuration = "PT3H"
                },
                @{
                    number = 3389;
                    protocol = "*";
                    allowedSourceAddressPrefix = @($(Get-AHMyPublicIPAddress)); #@("*");
                    maxRequestAccessDuration = "PT3H"
                })
        })
    $AssignmentVM = @($JitPolicy)
    Set-AzJitNetworkAccessPolicy -Kind "Basic" -Location $MyResource.Location -Name "default" -ResourceGroupName $MyResource.ResourceGroupName -VirtualMachine $AssignmentVM
    #>

    # End Section: Put policy in place

    #Start Section: Activate Policy
    $JitPolicyVm1 = (@{
            id    = $Id; 
            ports = (@{
                    number                     = If ('Windows' -eq $OS) { 3389 }elseif ('Linux' -eq $OS) { 22 }else { throw "invalid OS" };
                    endTimeUtc                 = get-date (Get-Date -AsUTC).AddHours($Hours) -Format O  #"12/09/2020 20:11:18";
                    allowedSourceAddressPrefix = @($(Get-AHMyPublicIPAddress)) #@("173.72.158.65")
                })
        })
    $ActivationVM = @($JitPolicyVm1)

    Start-AzJitNetworkAccessPolicy -ResourceGroupName $MyResource.ResourceGroupName -Location $MyResource.Location -Name "default" -VirtualMachine $ActivationVM
    #End Section: Activate Policy


}
<#
$testOut = Request-AHJITVMAccess `
    -Id /subscriptions/c85c1e96-a251-49cd-8b78-050291feeea1/resourceGroups/PolicyDemo/providers/Microsoft.Compute/virtualMachines/PolicyDemoVM1 `
    -Hours 1 `
    -OS Linux
 
 
 
$MyPublicIP = Get-AHMyPublicIPAddress
$MyResource = Get-AzResource -Id /subscriptions/c85c1e96-a251-49cd-8b78-050291feeea1/resourceGroups/PolicyDemo/providers/Microsoft.Compute/virtualMachines/PolicyDemoVM1
$JitPolicy = (@{
        id = $MyResource.ResourceId;
        ports = (@{
                number = 22
                endTimeUtc = Get-Date (Get-Date -AsUTC).AddHours(1) -Format O
                allowedSourceAddressPrefix = @($MyPublicIP)
            })
    })
$ActivationVM = @($JitPolicy)
Start-AzJitNetworkAccessPolicy -ResourceGroupName $($MyResource.ResourceGroupName) -Location $MyResource.Location -Name "default" -VirtualMachine $ActivationVM
 
 
 
 
 
 
 
#>




<#
https://docs.microsoft.com/en-us/azure/security-center/security-center-just-in-time?tabs=jit-config-powershell%2Cjit-request-powershell#enable-jit-vm-access-
https://docs.microsoft.com/en-us/powershell/module/az.security/start-azjitnetworkaccesspolicy?view=azps-5.2.0
https://docs.microsoft.com/en-us/powershell/module/az.security/set-azjitnetworkaccesspolicy?view=azps-5.2.0
#>