菜单
Grafana Cloud 版 Enterprise 版

使用 Terraform 配置 RBAC

注意

适用于

Grafana EnterpriseGrafana Cloud

您可以使用 Terraform 的 Grafana 提供商创建、更改或移除自定义角色,以及创建或移除基本角色和自定义角色分配

开始之前

  • 请确保您拥有 grafana/grafana Terraform 提供商版本 1.29.0 或更高。

  • 请确保您使用的是 Grafana 9.2 或更高版本。

创建用于配置的服务账户令牌

我们建议使用服务账户令牌进行配置。服务账户支持细粒度权限,使您能够轻松进行身份验证并使用配置 RBAC 基础设施所需的最小权限集。

要创建用于配置的服务账户令牌,请完成以下步骤。

  1. 为您的 CI 流水线创建一个新的服务账户
  2. 为服务账户分配权限:
    • 您需要“Role reader”、“Role writer”角色以及包含任何将被配置的权限的角色。例如,要创建或分配允许创建用户的角色,服务账户需要拥有创建用户的权限。
    • 或者,您可以将“Admin”基本角色分配给服务账户。
  3. 为 Terraform 创建一个新的服务账户令牌

或者,您可以使用基本认证。要查看所有支持的认证格式,请参阅此处

配置 Terraform 提供商

RBAC 支持作为 Grafana Terraform 提供商的一部分提供。

以下是可用于配置 Terraform 提供商的示例。

terraform
terraform {
    required_providers {
        grafana = {
            source = "grafana/grafana"
            version = ">= 1.29.0"
        }
    }
}

provider "grafana" {
    url = <YOUR_GRAFANA_URL>
    auth = <YOUR_GRAFANA_SERVICE_ACCOUNT_TOKEN>
}

配置基本角色

以下示例展示了如何将基本角色分配给用户、团队和服务账户。基本角色在 Grafana 中预定义,并为常见用例提供一组权限。

基本角色UID
basic_none
查看者basic_viewer
编辑者basic_editor
管理员basic_admin
Grafana 管理员basic_grafana_admin

您可以在角色分配中使用上表中任何基本角色的 UID。例如,要分配“None”角色,请使用 basic_none 作为 role_uid

terraform
resource "grafana_team" "viewer_team" {
  name = "terraform_viewer_team"
}

resource "grafana_user" "editor_user" {
  email    = "terraform_editor@example.com"
  login    = "terraform_editor_user"
  password = <TEST_PASSWORD>
}

resource "grafana_service_account" "admin_sa" {
  name = "terraform_admin_sa"
}

# Assign Viewer role to a team
resource "grafana_role_assignment" "viewer_role_assignment" {
  role_uid = "basic_viewer"
  teams    = [grafana_team.viewer_team.id]
}

# Assign Editor role to a user
resource "grafana_role_assignment" "editor_role_assignment" {
  role_uid = "basic_editor"
  users    = [grafana_user.editor_user.id]
}

# Assign Admin role to a service account
resource "grafana_role_assignment" "admin_role_assignment" {
  role_uid = "basic_admin"
  service_accounts = [grafana_service_account.admin_sa.id]
}

为多个用户配置基本角色

terraform
resource "grafana_user" "editor_user_2" {
  email    = "terraform_editor_2@example.com"
  login    = "terraform_editor_2_user"
  password = <TEST_PASSWORD>
}
resource "grafana_user" "editor_user_3" {
  email    = "terraform_editor_3@example.com"
  login    = "terraform_editor_3_user"
  password = <TEST_PASSWORD>
}

# Assign Editor role to multiply users
resource "grafana_role_assignment" "editor_role_assignment" {
  role_uid = "basic_editor"
  users    = [grafana_user.editor_user_2.id, grafana_user.editor_user_3.id]
}

配置自定义角色

以下示例展示了如何配置一个包含一些权限的自定义角色。

  1. 将此代码块复制到本地计算机上的 .tf 文件中。
terraform
resource "grafana_role" "my_new_role" {
  name  = "my_new_role"
  description = "My test role"
  version = 1
  uid = "newroleuid"
  global = true

  permissions {
    action = "org.users:add"
    scope = "users:*"
  }
  permissions {
    action = "org.users:write"
    scope = "users:*"
  }
  permissions {
    action = "org.users:read"
    scope = "users:*"
  }
  permissions {
	  action = "teams:create"
  }
  permissions {
	  action = "teams:read"
	  scope = "teams:*"
  }
  permissions {
	  action = "teams:write"
	  scope = "teams:*"
  }
}
  1. 运行命令 terraform apply
  2. 前往 Grafana 的 UI 并检查新角色是否出现在角色选择器中:角色选择器

配置角色分配

以下示例展示了如何配置角色分配。在此示例中,配置了一个团队、一个用户和一个服务账户,并将上一个示例中的自定义角色分配给它们。

  1. 使用以下内容扩展上一个示例的配置文件
terraform
resource "grafana_team" "test_team" {
	name = "terraform_test_team"
}

resource "grafana_user" "test_user" {
	email = "terraform_user@test.com"
	login    = "terraform_test_user"
	password = <TEST_PASSWORD>
}

resource "grafana_service_account" "test_sa" {
  name = "terraform_test_sa"
  role = "Viewer"
}

resource "grafana_role_assignment" "my_new_role_assignment" {
  role_uid = grafana_role.my_new_role.uid
  users = [grafana_user.test_user.id]
  teams = [grafana_team.test_team.id]
  service_accounts = [grafana_service_account.test_sa.id]
}
  1. <TEST_PASSWORD> 替换为您测试用户的测试密码。

  2. 运行命令 terraform apply

  3. 前往 Grafana 的 UI 并检查是否已创建用户、团队和服务账户,以及是否已将角色分配给它们:用户角色分配 团队角色分配 服务账户角色分配

请注意,除了使用已配置的角色,您还可以查找现有固定角色或自定义角色的 uid 并使用它。您可以使用列出角色的 API 端点查找角色 uid。同样,您可以查找并使用尚未配置的用户、团队和服务账户的 id 来为它们分配角色。

使用 Grafana 配置设置 RBAC

Grafana Cloud Terraform 配置