我正试图用Terraform提供一个简单的Ubuntu Linux虚拟机,允许用户使用他们的Azure AD凭据进行连接。我是Terraform的新手,我正在努力寻找正确的资源部分/命令;使用Azure AD登录";在下面的屏幕截图链接中显示的GUI中进行设置。
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"
}
}
我还有一个相关但次要的问题;我不确定是否需要单独提问/发帖。我通过GUI手动创建了一个VM;使用Azure AD登录";,尝试连接
az ssh vm --ip XXX.XXX.XXX.XXX
并接收
Permission denied (publickey).
我没有指定用户需要使用ssh密钥进行连接(至少不是有意的(。我是否需要添加另一个部分来允许经过身份验证的AD用户进行基本的SSH访问?
要使用Azure AD登录到linux虚拟机,您需要执行以下操作。
- 安装AAD linux扩展,它似乎是根据您的屏幕截图安装的
- 启用系统分配的托管标识,方便AD登录。我看到这也是被创造出来的
- 如屏幕截图上的"Azure AD"部分所述,您需要通过RBAC在VM资源上分配
Virtual Machine Administrator Login
或Virtual 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>
}