菜单
Enterprise Grafana Cloud 开源

将 API 密钥迁移到服务账号令牌

注意

API 密钥已被弃用。

服务账号现在取代 API 密钥,用于通过 HTTP API 进行身份验证以及与 Grafana 交互。

API 密钥指定一个角色——可以是管理员编辑者查看者——用于确定与 Grafana 交互的权限。

与 API 密钥相比,服务账号拥有有限的范围,提供更高的安全性。有关服务账号优势的更多信息,请参阅服务账号优势

当您将 API 密钥迁移到服务账号时,系统会创建一个带服务账号令牌的服务账号。您现有的 API 密钥(现已迁移为服务账号令牌)将继续像以前一样工作。

要查找已迁移的 API 密钥,请点击左侧菜单中的管理,然后选择用户和访问权限 -> 服务账号,选择相应的服务账号,然后找到令牌

使用 Grafana 用户界面迁移 API 密钥

本节将向您展示如何使用 Grafana 用户界面将 API 密钥迁移到 Grafana 服务账号。您可以选择迁移单个 API 密钥或所有 API 密钥。当您迁移所有 API 密钥后,将无法再创建 API 密钥,必须改用服务账号。

开始之前

要遵循这些说明,您需要具备以下至少一项权限

  • 管理员权限
  • 编辑者权限
  • 服务账号写入者

有关权限的更多信息,请参阅角色和权限

步骤

要将所有 API 密钥迁移到服务账号,请完成以下步骤

  1. 登录 Grafana,指向管理用户和访问权限,然后点击API 密钥
  2. 在页面顶部,找到标题为从 API 密钥切换到服务账号的部分
  3. 点击立即迁移到服务账号
  4. 将出现一个确认窗口,询问是否确认迁移。如果您愿意继续,请点击是,立即迁移
  5. 迁移成功后,您可以选择永久隐藏 API 密钥页面。如果您想这样做,请点击永久隐藏 API 密钥页面

要将单个 API 密钥迁移到服务账号,请完成以下步骤

  1. 登录 Grafana。
  2. 点击左侧菜单中的管理,选择用户和访问权限,然后选择API 密钥
  3. 找到您要迁移的 API 密钥。
  4. 点击迁移到服务账号

使用 HTTP API 迁移 API 密钥

本节将向您展示如何使用 HTTP API 以编程方式将 API 密钥迁移到 Grafana 服务账号。有关 API 的更多信息,请参阅服务账号 HTTP API

开始之前

要遵循这些说明,您需要具备以下一项权限

  • 管理员权限
  • 编辑者权限
  • 服务账号写入者

步骤

完成以下步骤,将 API 密钥迁移到用于 API 的服务账号

  1. 调用 POST /api/serviceaccounts 端点和 POST /api/serviceaccounts/<id>/tokens

    此操作将生成一个服务账号令牌。

  2. 存储系统返回给您的 ID 和密钥。

  3. Authorization 头部中传递令牌,前缀为 Bearer

    此操作将验证 API 请求。

  4. 用于身份验证的服务账号令牌

  5. 移除处理旧的 /api/auth/keys 端点的代码。

  6. 跟踪正在使用的 API 密钥,并将它们迁移到服务账号令牌。

示例

您当前的设置

sh
curl -X POST -H "Content-Type: application/json" -d '{"name": "my-api-key", "role": "Viewer"}' http://admin:admin@localhost:3000/api/auth/keys

# response from the api
{"id":2,"name":"my-api-key","key":"eyJrIjoiTFRSN1RBOVc3SGhjblc0bWZodXZ3MnNDcU92Um5VZUIiLKJuIjoibXktYXBpLWtleSIsImlkIjoxfQ=="}%

新设置

sh
# create a service account
curl -X POST -H "Content-Type: application/json" -d '{"name": "my-service-account", "role": "Viewer"}' http://admin:admin@localhost:3000/api/serviceaccounts

# response with the created service account id,name, login
{"id":1,"name":"my-service-account","login":"sa-my-service-account","orgId":1,"isDisabled":false,"role":"Viewer","tokens":0,"avatarUrl":""}%

# create the service account token with the service account id 1 - /serviceaccounts/{id} returned from the previous step
curl -X POST -H "Content-Type: application/json" -d '{"name": "my-service-account-token"}' http://admin:admin@localhost:3000/api/serviceaccounts/1/tokens

# response with the created SAT id,name and key.
{"id":2,"name":"my-service-account-token","key":"glsa_9244xlVFZK0j8Lh4fU8Cz6Z5tO664zIi_7a762939"}%

# now you can authenticate the same way as you did with the API key
curl --request GET --url https://:3000/api/folders --header 'Authorization: Bearer glsa_9244xlVFZK0j8Lh4fU8Cz6Z5tO664zIi_7a762939'

# response
[{"id":1,"uid":"a5261a84-eebc-4733-83a9-61f4713561d1","title":"gdev dashboards"}]%

使用 Terraform 迁移 API 密钥

注意

terraform 资源 api_key 已从 Grafana Terraform Provider v3.0.0 中移除。在迁移和移除该资源的使用之前,您应该将您的 terraform 版本固定到小于或等于 v2.19.0 的版本。有关更多信息,请参阅Grafana Terraform Provider 发布说明

将 Grafana Terraform Provider 固定到 v2.19.0

hcl
terraform {
  required_providers {
    grafana = {
      source  = "grafana/grafana"
      version = "2.19.0"
    }
  }
}

本节向您展示如何将您的 API 密钥 Terraform 配置迁移到 Grafana 服务账号。有关更多信息,请参阅Terraform 中的 Grafana 服务账号

步骤

完成以下步骤,使用 Terraform 将 API 密钥迁移到服务账号

  1. 生成 grafana_service_accountgrafana_service_account_token 资源。
  2. 创建服务账号时指定所需的范围和到期日期。
  3. 使用从 grafana_service_account_token 返回的令牌进行 API 请求身份验证。
  4. 移除用于创建您的 grafana_api_key 资源的 terraform 配置。

示例:您当前的 Terraform 配置

tf
terraform {
  required_providers {
    grafana = {
      source  = "grafana/grafana"
    }
  }
}

# configure the provider with basic auth
provider "grafana" {
  url  = "https://:3000"
  auth = "admin:admin"
}

resource "grafana_api_key" "foo" {
  name = "key_foo"
  role = "Viewer"
}

resource "grafana_api_key" "bar" {
  name            = "key_bar"
  role            = "Admin"
  seconds_to_live = 30
}

您的新 Terraform 配置

注意:您可以使用一个服务账号创建多个令牌。

tf
terraform {
  required_providers {
    grafana = {
      source  = "grafana/grafana"
    }
  }
}

# configure the provider with basic auth
provider "grafana" {
  url  = "https://:3000"
  auth = "admin:admin"
}

# Creating a service account in Grafana instance to be used as auth and attach tokens
# notice we can attach multiple tokens to one service account
resource "grafana_service_account" "sa-admin" {
  name             = "sa-admin"
  role             = "Admin"
}

# Creating a service account token in Grafana instance to be used for creating resources in Grafana instance
resource "grafana_service_account_token" "sat-bar" {
  name           = "sat-bar"
  service_account_id = grafana_service_account.sa-admin.id
}

# Creating a service account token in Grafana instance to be used for creating resources in Grafana instance
resource "grafana_service_account_token" "sat-foo" {
  name           = "sat-foo"
  service_account_id = grafana_service_account.sa-admin.id
  seconds_to_live    = 30
}

使用 Terraform 迁移 Cloud Stack API 密钥

本节向您展示如何将您的 Grafana cloud stack API 密钥的 Terraform 配置迁移到 Grafana cloud stack 服务账号。

要迁移您的 cloud stack API 密钥,请使用 grafana_cloud_stack_service_accountgafana_cloud_stack_service_account_token 资源。有关更多信息,请参阅Terraform 中的 Grafana Cloud Stack 服务账号

注意

这仅适用于 Grafana Cloud Stack API 密钥 grafana_cloud_stack_api_key。Grafana Cloud API 密钥资源 grafana_cloud_api_key 未被弃用,应继续用于管理您的 Grafana Cloud 的身份验证。

步骤

完成以下步骤,使用 Terraform 将 cloud stack API 密钥迁移到 cloud stack 服务账号

  1. 生成 grafana_cloud_stack_service_accountgrafana_cloud_stack_service_account_token 资源。
  2. 创建服务账号时指定所需的范围和到期日期。
  3. 使用从 grafana_cloud_stack_service_account_token 返回的令牌进行 API 请求身份验证。
  4. 移除用于创建您的 grafana_cloud_stack_api_key 资源的 Terraform 配置。

示例:您当前的 Terraform 配置

tf
terraform {
  required_providers {
    grafana = {
      source = "grafana/grafana"
    }
  }
}

# Declaring the first provider to be only used for creating the cloud-stack
provider "grafana" {
  alias = "cloud"

  cloud_api_key = "<API-Key>"
}

resource "grafana_cloud_stack" "my_stack" {
  provider = grafana.cloud

  name        = "my_stack"
  slug        = "my_stack"
  region_slug = "eu" # Example “us”,”eu” etc
}

# Creating a Grafana API key to be used as auth
resource "grafana_cloud_stack_api_key" "management" {
  provider = grafana.cloud

  stack_slug = grafana_cloud_stack.my_stack.slug
  name       = "management-key"
  role       = "Admin"
}

您的新 Terraform 配置

tf
terraform {
  required_providers {
    grafana = {
      source = "grafana/grafana"
    }
  }
}

# Declaring the first provider to be only used for creating the cloud-stack
provider "grafana" {
  alias = "cloud"

  cloud_api_key = "<API-Key>"
}

resource "grafana_cloud_stack" "my_stack" {
  provider = grafana.cloud

  name        = "my_stack"
  slug        = "my_stack"
  region_slug = "eu" # Example “us”,”eu” etc
}

# Creating a grafana cloud stack service account
resource "grafana_cloud_stack_service_account" "mystack_cloud-stack_service_account" {
  provider   = grafana.cloud
  stack_slug = grafana_cloud_stack.my_stack.slug

  name = "mystack-cloud-stack-sa"
  role = "Admin"
}

# Creating a grafana cloud stack service account token
resource "grafana_cloud_stack_service_account_token" "mystack_cloud-stack_service-account_token" {
  provider   = grafana.cloud
  stack_slug = grafana_cloud_stack.my_stack.slug

  name               = "mystack-cloud-stack-sa-token"
  service_account_id = grafana_cloud_stack_service_account.mystack_cloud-stack_service_account.id
}