具有 Azure AD 访问权限的 Terraform Azure Linux VM

Terraform Azure Linux VM with Azure AD Access

我正在尝试使用 Terraform 提供一个简单的 Ubuntu Linux VM,允许用户使用他们的 Azure AD 凭据进行连接。我是 Terraform 的新手,我正在尝试寻找正确的资源 section/command 以启用下面屏幕截图 link 中显示的 GUI 中的“使用 Azure AD 登录”设置。

https://i.stack.imgur.com/Gg9p8.png

这是配置 VM 的代码片段:

resource "azurerm_linux_virtual_machine" "dev" {
  name                = "devhost01"
  resource_group_name = azurerm_resource_group.dev.name
  location            = azurerm_resource_group.ev.location
  size                = "Standard_D2s_v3"
  admin_username      = "admin"
  network_interface_ids = [
    azurerm_network_interface.dev.id,
  ]

  admin_ssh_key {
    username   = "admin"
    public_key = file("~/.ssh/admin.pub")
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "18.04-LTS"
    version   = "latest"
  }
}

我也有一个相关但次要的问题;我不确定它是否需要一个单独的 question/post。我通过启用“使用 Azure AD 登录”的 GUI 手动创建了一个 VM,尝试连接

az ssh vm --ip XXX.XXX.XXX.XXX

并收到

Permission denied (publickey).

我没有指定用户需要使用 ssh 密钥进行连接(至少不是故意的)。我是否需要添加另一部分以允许经过身份验证的 AD 用户进行基本 SSH 访问?

使用 Azure AD 登录 linux 虚拟机。您需要执行以下操作。

  1. 安装 AAD linux 扩展,它似乎已按照您的屏幕截图安装
  2. 启用系统分配的托管标识,这有助于 AD 登录。我看到这个也在创建中。
  3. 如屏幕截图的“Azure AD”部分所述,您需要通过 RBAC 在 VM 资源上分配 Virtual Machine Administrator LoginVirtual Machine User Login 角色之一。

第三个和它的前辈一样重要,允许AD登录。

执行所有三个步骤后,az ssh vm --ip XXX.XXX.XXX.XXX 会让您登录到 VM。

更新

----按评论要求添加tf代码-----

将托管标识添加到 VM 资源

resource "azurerm_linux_virtual_machine" "dev" {
      // blah-blah
      identity {
        type         = "SystemAssigned"    
      }
 }

添加角色分配

resource "azurerm_role_assignment" "assign-vm-role" {
  scope                = azurerm_linux_virtual_machine.dev.id
  role_definition_name = "Virtual Machine Administrator Login"
  principal_id         = <id-of-group/user/sp>
}