Pipeline: 8.1 Ensure an Azure Bastion Host Exists
Description
The Azure Bastion service allows secure remote access to Azure Virtual Machines over the Internet without exposing remote access protocol ports and services directly to the Internet. The Azure Bastion service provides this access using TLS over 443/TCP, and subscribes to hardened configurations within an organization's Azure Active Directory service.
The Azure Bastion service allows organizations a more secure means of accessing Azure Virtual Machines over the Internet without assigning public IP addresses to those Virtual Machines. The Azure Bastion service provides Remote Desktop Protocol (RDP) and Secure Shell (SSH) access to Virtual Machines using TLS within a web browser, thus preventing organizations from opening up 3389/TCP and 22/TCP to the Internet on Azure Virtual Machines. Additional benefits of the Bastion service includes Multi-Factor Authentication, Conditional Access Policies, and any other hardening measures configured within Azure Active Directory using a central point of access.
Remediation
From Azure Portal
- Click on
Bastions
. - Select the
Subscription
. - Select the
Resource group
. - Type a
Name
for the new Bastion host. - Select a
Region
. - Choose
Standard
next toTier
. - Use the slider to set the
Instance count
. - Select the
Virtual network
orCreate new
. - Select the
Subnet
namedAzureBastionSubnet
. Create aSubnet
namedAzureBastionSubnet
using a/26
CIDR range if it doesn't already exist. - Selct the appropriate
Public IP address
option. - If
Create new
is selected for thePublic IP address
option, provide aPublic IP address name
. - If
Use existing
is selected forPublic IP address
option, select an IP address fromChoose public IP address
. - Click
Next: Tags >
. - Configure the appropriate
Tags
. - Click
Next: Advanced >
. - Select the appropriate
Advanced
options. - Click
Next: Review + create >
. - Click
Create
.
From Azure CLI
az network bastion create --location <location> --name <name of bastion host> --public-ip-address <public IP address name or ID> --resource-group <resource group name or ID> --vnet-name <virtual network containing subnet called "AzureBastionSubnet"> --scale-units <integer> --sku Standard [--disable-copy-paste true|false] [--enable-ip-connect true|false] [--enable-tunneling true|false]
From PowerShell
Create the appropriate Virtual network
settings and Public IP Address
settings.
$subnetName = "AzureBastionSubnet"$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix <IP address range in CIDR notation making sure to use a /26>$virtualNet = New-AzVirtualNetwork -Name <virtual network name> -ResourceGroupName <resource group name> -Location <location> -AddressPrefix <IP address range in CIDR notation> -Subnet $subnet$publicip = New-AzPublicIpAddress -ResourceGroupName <resource group name> -Name <public IP address name> -Location <location> -AllocationMethod Dynamic -Sku Standard
Create the Azure Bastion
service using the information within the created variables from above.
New-AzBastion -ResourceGroupName <resource group name> -Name <bastion name> -PublicIpAddress $publicip -VirtualNetwork $virtualNet -Sku "Standard" -ScaleUnit <integer>
Default Value
By default, the Azure Bastion service is not configured.
Run the pipeline
To run this pipeline from your terminal:
flowpipe pipeline run azure_cis.pipeline.cis_v300_8_1
Use this pipeline
To call this pipeline from your pipeline, use a step:
step "pipeline" "step_name" { pipeline = azure_cis.pipeline.cis_v300_8_1 }
Params
Name | Type | Required | Description | Default |
---|---|---|---|---|
database | connection.steampipe | Yes | Database connection string. | connection.steampipe.default |
notifier | notifier | Yes | The name of the notifier to use for sending notification messages. | notifier.default |
notification_level | string | Yes | The verbosity level of notification messages to send. Valid options are 'verbose', 'info', 'error'. | info |
Outputs
This pipeline has no outputs.