Scenarios/Secure-Baseline/terraform/modules/vm/vm.tf (128 lines of code) (raw):
data "azurerm_key_vault_secret" "admin_password" {
name = "vmadminpassword"
key_vault_id = var.kv_id
}
resource "azurerm_public_ip" "bastion" {
name = "${var.bastion_name}-pip"
resource_group_name = var.resource_group_name
location = var.location
allocation_method = "Static"
sku = "Standard"
}
resource "azurerm_bastion_host" "bastion" {
name = var.bastion_name
location = var.location
resource_group_name = var.resource_group_name
ip_configuration {
name = "config"
subnet_id = var.bastion_subnet_id
public_ip_address_id = azurerm_public_ip.bastion.id
}
}
resource "azurerm_network_interface" "jumpbox" {
name = "${var.bastion_name}-nic"
location = var.location
resource_group_name = var.resource_group_name
ip_configuration {
name = "internal"
subnet_id = var.vm_subnet_id
private_ip_address_allocation = "Dynamic"
}
}
resource "azurerm_linux_virtual_machine" "jumpbox" {
name = var.jumpbox_name
resource_group_name = var.resource_group_name
location = var.location
size = var.jumpbox_size
admin_username = var.vm_admin_username
admin_password = data.azurerm_key_vault_secret.admin_password.value
network_interface_ids = [azurerm_network_interface.jumpbox.id]
disable_password_authentication = false
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts-gen2"
version = "latest"
}
lifecycle {
ignore_changes = [
admin_username,
admin_password
]
}
}
resource "azurerm_virtual_machine_extension" "jumpbox" {
name = "jumpbox"
virtual_machine_id = azurerm_linux_virtual_machine.jumpbox.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = <<SETTINGS
{
"fileUris": ["https://raw.githubusercontent.com/alainvetier/ARO-Landing-Zone-Accelerator/refs/heads/main/Scenarios/Secure-Baseline/terraform/modules/vm/install_packages.sh"],
"commandToExecute": "bash install_packages.sh"
}
SETTINGS
}
resource "azurerm_network_interface" "Jumpbox2" {
name = "${var.bastion_name}-nic2"
location = var.location
resource_group_name = var.resource_group_name
ip_configuration {
name = "internal"
subnet_id = var.vm_subnet_id
private_ip_address_allocation = "Dynamic"
}
}
resource "azurerm_windows_virtual_machine" "Jumpbox2" {
name = var.jumpbox2_name
resource_group_name = var.resource_group_name
location = var.location
size = var.jumpbox_size
admin_username = var.vm_admin_username
admin_password = data.azurerm_key_vault_secret.admin_password.value
network_interface_ids = [
azurerm_network_interface.Jumpbox2.id
]
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2022-datacenter-azure-edition"
version = "latest"
}
lifecycle {
ignore_changes = [
admin_username,
admin_password
]
}
priority = "Spot"
eviction_policy = "Deallocate"
}
resource "azurerm_virtual_machine_extension" "Jumpbox2_script" {
name = "Jumpbox2_script"
virtual_machine_id = azurerm_windows_virtual_machine.Jumpbox2.id
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.10"
settings = <<SETTINGS
{
"fileUris": ["https://raw.githubusercontent.com/alainvetier/ARO-Landing-Zone-Accelerator/refs/heads/main/Scenarios/Secure-Baseline/terraform/modules/vm/script.ps1"],
"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File script.ps1"
}
SETTINGS
lifecycle {
ignore_changes = [settings]
}
depends_on = [
azurerm_windows_virtual_machine.Jumpbox2
]
}