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