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

时间:2019-11-19 04:59:06

标签: azure virtual-machine terraform rbac

我正在使用Terraform创建Azure虚拟机。但我不知道该如何附加现有的rbac角色。有没有一种方法,而无需为角色定义/附加创建单独的资源? 如果需要单独的资源怎么办,只知道rbac角色名称?

2 个答案:

答案 0 :(得分:0)

我相信您正在寻找的是azurerm_role_definition数据源,它使您可以将已经存在的角色定义导入terraform。

请参阅文档here

示例:

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
}

答案 1 :(得分:0)

根据您的评论,您想为具有Terraform的用户分配RBAC角色。您可以分两个步骤进行操作:

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

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"
}

步骤2 :将角色分配给特定的Azure AD用户。例如,如果要将此角色分配给资源组级别的用户,那就是用资源组ID定义范围。您应该有一个现有的资源组。您可以使用resource "azurerm_resource_group"块或data "azurerm_resource_group"创建它,然后使用azurerm_role_assignment将给定的委托人(用户或应用程序)分配给给定的角色。

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

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"
}

principal_id是用户的Object ID。您可以通过导航至门户中的Azure Active Directory->用户->按用户主体名称(在您的情况下为电子邮件地址)进行搜索来找到它。您可以参考this answer