如何使用Terraform将现有rbac角色附加到Azure VM?

如何使用Terraform将现有rbac角色附加到Azure VM?,azure,virtual-machine,terraform,rbac,Azure,Virtual Machine,Terraform,Rbac,我正在使用Terraform创建Azure虚拟机。但我不知道如何将现有的rbac角色附加到它。有没有一种方法可以在不为角色定义/附件创建单独资源的情况下执行此操作? 如果需要单独的资源,如何在只知道rbac角色名称的情况下执行此操作?您正在寻找的是azurerm\u角色定义数据源,它允许您将现有的角色定义导入terraform 见文件 例如: data "azurerm_subscription" "primary" {} data "azurerm_role_definition" "my_

我正在使用Terraform创建Azure虚拟机。但我不知道如何将现有的rbac角色附加到它。有没有一种方法可以在不为角色定义/附件创建单独资源的情况下执行此操作?
如果需要单独的资源,如何在只知道rbac角色名称的情况下执行此操作?

您正在寻找的是
azurerm\u角色定义
数据源,它允许您将现有的角色定义导入terraform

见文件

例如:

data "azurerm_subscription" "primary" {}

data "azurerm_role_definition" "my_role" {
  ### Specify either role_definition_id or name of the existing role
  # role_definition_id = "00000000-0000-0000-0000-000000000000"
  # name               = "MyRoleDefinition"

  scope = data.azurerm_subscription.primary.id
}
例如,要将此角色分配给资源组
my_rg
,请将作用域设置为资源组id:

resource "azurerm_resource_group" "my_rg" {
  name     = "myRG"
  location = "West US"
}

data "azurerm_client_config" "client_config" {}

resource "azurerm_role_assignment" "my_role_assignment" {
  scope              = azurerm_resource_group.my_rg.id
  role_definition_id = data.azurerm_role_definition.my_role.id
  principal_id       = data.azurerm_client_config.client_config.service_principal_object_id
}

从您的评论中,您希望将RBAC角色分配给具有terraform的用户。您可以通过两个步骤完成此操作:

步骤1:使用此数据源访问有关引用的现有角色定义的信息

步骤2:将角色分配给特定的Azure AD用户。例如,如果要将此角色分配给资源组级别的用户,即使用资源组ID定义作用域。您应该有一个现有的资源组。您可以使用
resource“azurerm\u resource\u group”
块或
data“azurerm\u resource\u group”
创建它,然后使用将给定主体(用户或应用程序)分配给给定角色

用法示例(使用内置角色)


主体id
是用户的
对象id
。您可以通过导航到门户中的Azure Active Directory->用户->按用户主体名称(您的案例中的电子邮件地址)搜索来找到它。您可以参考。

您已经检查过了吗?您能告诉我如何在资源组级别和vm级别附加角色吗?在上面的代码中我怎么能做到呢?基本上,我需要创建一个资源组,并将角色和用户附加到其中。请看一下terraform文档,因为它真的非常好:非常感谢您的快速响应……这里如何定义principal_id?什么是客户端配置?我如何才能将用户添加到此特定角色?抱歉,没有时间进一步帮助您-但好消息是,有很多东西可以回答您的问题。terraform文档中也有很多例子。如果这个答案为你指明了正确的方向,请接受它。
data "azurerm_subscription" "primary" {}  # access an existing subscription


data "azurerm_role_definition" "custom" {  # access an existing custom role via role_definition_id
  role_definition_id = "${azurerm_role_definition.custom.role_definition_id}"
  scope              = "${data.azurerm_subscription.primary.id}"              # /subscriptions/00000000-0000-0000-0000-000000000000
}

data "azurerm_role_definition" "custom-byname" { # access an existing custom role via name
  name  = "${azurerm_role_definition.custom.name}"
  scope = "${data.azurerm_subscription.primary.id}"
}

data "azurerm_builtin_role_definition" "builtin" { # access an existing builtin role
  name = "Contributor"
}
data "azurerm_subscription" "primary" {}

resource "azurerm_resource_group" "myrg" {
  name     = "myrg"
  location = "West US"
}

resource "azurerm_role_assignment" "test" {
  scope                = "${azurerm_resource_group.main.id}"
  role_definition_name = "Reader" # or "${data.azurerm_role_definition.custom-byname.name}"
  principal_id         = "xxxx"
}