将 API 密钥迁移到服务账号令牌
注意
API 密钥已被弃用。
服务账号现在取代 API 密钥,用于通过 HTTP API 进行身份验证以及与 Grafana 交互。
API 密钥指定一个角色——可以是管理员、编辑者或查看者——用于确定与 Grafana 交互的权限。
与 API 密钥相比,服务账号拥有有限的范围,提供更高的安全性。有关服务账号优势的更多信息,请参阅服务账号优势。
当您将 API 密钥迁移到服务账号时,系统会创建一个带服务账号令牌的服务账号。您现有的 API 密钥(现已迁移为服务账号令牌)将继续像以前一样工作。
要查找已迁移的 API 密钥,请点击左侧菜单中的管理,然后选择用户和访问权限 -> 服务账号,选择相应的服务账号,然后找到令牌。
使用 Grafana 用户界面迁移 API 密钥
本节将向您展示如何使用 Grafana 用户界面将 API 密钥迁移到 Grafana 服务账号。您可以选择迁移单个 API 密钥或所有 API 密钥。当您迁移所有 API 密钥后,将无法再创建 API 密钥,必须改用服务账号。
开始之前
要遵循这些说明,您需要具备以下至少一项权限
- 管理员权限
- 编辑者权限
- 服务账号写入者
有关权限的更多信息,请参阅角色和权限。
步骤
要将所有 API 密钥迁移到服务账号,请完成以下步骤
- 登录 Grafana,指向管理、用户和访问权限,然后点击API 密钥。
- 在页面顶部,找到标题为从 API 密钥切换到服务账号的部分
- 点击立即迁移到服务账号。
- 将出现一个确认窗口,询问是否确认迁移。如果您愿意继续,请点击是,立即迁移。
- 迁移成功后,您可以选择永久隐藏 API 密钥页面。如果您想这样做,请点击永久隐藏 API 密钥页面。
要将单个 API 密钥迁移到服务账号,请完成以下步骤
- 登录 Grafana。
- 点击左侧菜单中的管理,选择用户和访问权限,然后选择API 密钥。
- 找到您要迁移的 API 密钥。
- 点击迁移到服务账号。
使用 HTTP API 迁移 API 密钥
本节将向您展示如何使用 HTTP API 以编程方式将 API 密钥迁移到 Grafana 服务账号。有关 API 的更多信息,请参阅服务账号 HTTP API。
开始之前
要遵循这些说明,您需要具备以下一项权限
- 管理员权限
- 编辑者权限
- 服务账号写入者
步骤
完成以下步骤,将 API 密钥迁移到用于 API 的服务账号
调用
POST /api/serviceaccounts
端点和POST /api/serviceaccounts/<id>/tokens
。此操作将生成一个服务账号令牌。
存储系统返回给您的 ID 和密钥。
在
Authorization
头部中传递令牌,前缀为Bearer
。此操作将验证 API 请求。
用于身份验证的服务账号令牌
移除处理旧的
/api/auth/keys
端点的代码。跟踪正在使用的 API 密钥,并将它们迁移到服务账号令牌。
示例
您当前的设置
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=="}%
新设置
# 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
terraform {
required_providers {
grafana = {
source = "grafana/grafana"
version = "2.19.0"
}
}
}
本节向您展示如何将您的 API 密钥 Terraform 配置迁移到 Grafana 服务账号。有关更多信息,请参阅Terraform 中的 Grafana 服务账号。
步骤
完成以下步骤,使用 Terraform 将 API 密钥迁移到服务账号
- 生成
grafana_service_account
和grafana_service_account_token
资源。 - 创建服务账号时指定所需的范围和到期日期。
- 使用从
grafana_service_account_token
返回的令牌进行 API 请求身份验证。 - 移除用于创建您的
grafana_api_key
资源的 terraform 配置。
示例:您当前的 Terraform 配置
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 配置
注意:您可以使用一个服务账号创建多个令牌。
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_account
和 gafana_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 服务账号
- 生成
grafana_cloud_stack_service_account
和grafana_cloud_stack_service_account_token
资源。 - 创建服务账号时指定所需的范围和到期日期。
- 使用从
grafana_cloud_stack_service_account_token
返回的令牌进行 API 请求身份验证。 - 移除用于创建您的
grafana_cloud_stack_api_key
资源的 Terraform 配置。
示例:您当前的 Terraform 配置
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 配置
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
}