Миграция ключей API на токены сервисных учётных записей

Note

Ключи API устарели. Теперь сервисные учётные записи заменяют ключи API для аутентификации с помощью HTTP API и взаимодействия с Grafana.

Ключи API задают роль — Admin, Editor или Viewer, — которая определяет разрешения, связанные с взаимодействием с Grafana.

По сравнению с ключами API сервисные учётные записи имеют ограниченные области действия, что обеспечивает большую безопасность. Дополнительные сведения о преимуществах сервисных учётных записей см. в разделе service account benefits.

При миграции ключа API на сервисную учётную запись создаётся сервисная учётная запись с токеном сервисной учётной записи. Ваш существующий ключ API — теперь перенесённый на токен сервисной учётной записи — продолжит работать как прежде.

Чтобы найти перенесённые ключи API, нажмите Administration в меню слева, затем Users and access -> Service Accounts, выберите сервисную учётную запись и найдите Token.

Миграция ключей API с помощью пользовательского интерфейса Grafana

В этом разделе показано, как перенести ключи API на сервисные учётные записи Grafana с помощью пользовательского интерфейса Grafana. Вы можете перенести один ключ API или все ключи API. При миграции всех ключей API вы больше не сможете создавать ключи API и должны будете использовать сервисные учётные записи.

Прежде чем начать

Чтобы выполнить эти инструкции, вам нужно как минимум одно из следующего:

  • права администратора
  • права редактора
  • роль writer сервисных учётных записей

Дополнительные сведения о разрешениях см. в разделе Roles and permissions.

Шаги

Чтобы перенести все ключи API на сервисные учётные записи, выполните следующие шаги:

  1. Войдите в Grafana, наведите указатель на Administration, Users and access и нажмите API Keys.
  2. В верхней части страницы найдите раздел Switch from API keys to service accounts
  3. Нажмите Migrate to service accounts now.
  4. Появится окно подтверждения с запросом на подтверждение миграции. Нажмите Yes, migrate now, если хотите продолжить.
  5. После успешной миграции вы можете скрыть страницу ключей API навсегда. Нажмите Hide API keys page forever, если хотите это сделать.

Чтобы перенести один ключ API на сервисную учётную запись, выполните следующие шаги:

  1. Войдите в Grafana.
  2. Нажмите Administration в меню слева, затем Users and access и выберите API Keys.
  3. Найдите ключ API, который хотите перенести.
  4. Нажмите Migrate to service account.

Миграция ключей API с помощью HTTP API

В этом разделе показано, как программно перенести ключи API на сервисные учётные записи Grafana с помощью HTTP API. Дополнительные сведения об API см. в разделе Service account HTTP APIs.

Прежде чем начать

Чтобы выполнить эти инструкции, вам нужно одно из следующего:

  • права администратора
  • права редактора
  • роль writer сервисных учётных записей

Шаги

Выполните следующие шаги, чтобы перенести ключи API на сервисные учётные записи для API:

  1. Вызовите конечную точку POST /api/serviceaccounts и конечную точку POST /api/serviceaccounts/<id>/tokens.

    Это действие генерирует токен сервисной учётной записи.

  2. Сохраните ID и секрет, которые вернёт вам система.

  3. Передайте токен в заголовке Authorization с префиксом Bearer.

    Это действие аутентифицирует запросы к API.

  4. Используйте SAT для аутентификации

  5. Удалите код, который обрабатывает старую конечную точку /api/auth/keys.

  6. Отследите используемые ключи API и перенесите их на SAT.

Пример

Ваша текущая конфигурация

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

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

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

Миграция ключей API с помощью Terraform

Note

Ресурс 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"
    }
  }
}

В этом разделе показано, как перенести вашу конфигурацию Terraform для ключей API на сервисные учётные записи Grafana. Дополнительные сведения см. в разделе Grafana Service Accounts in Terraform.

Шаги

Выполните следующие шаги, чтобы перенести ключи API на сервисные учётные записи с помощью Terraform:

  1. Создайте ресурсы grafana_service_account и grafana_service_account_token.
  2. Укажите нужные области действия и дату истечения срока действия при создании сервисной учётной записи.
  3. Используйте токен, возвращённый grafana_service_account_token, для аутентификации запросов к API.
  4. Удалите конфигурацию terraform для создания ресурсов grafana_api_key.

Пример: ваша текущая конфигурация Terraform

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

# configure the provider with basic auth
provider "grafana" {
  url  = "http://localhost: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  = "http://localhost: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
}

Миграция ключей API Cloud Stack с помощью Terraform

В этом разделе показано, как перенести вашу конфигурацию Terraform для ключей API Grafana cloud stack на сервисные учётные записи Grafana cloud stack.

Для миграции ключей API вашего cloud stack используйте ресурсы grafana_cloud_stack_service_account и gafana_cloud_stack_service_account_token. Дополнительные сведения см. в разделе Grafana Cloud Stack Service Accounts in Terraform.

Note

Это относится только к ключам API Grafana Cloud Stack grafana_cloud_stack_api_key. Ресурс ключей API Grafana Cloud grafana_cloud_api_key не устарел и должен использоваться для аутентификации при управлении вашим Grafana cloud.

Шаги

Выполните следующие шаги, чтобы перенести ключи API cloud stack на сервисные учётные записи cloud stack с помощью Terraform:

  1. Создайте ресурсы grafana_cloud_stack_service_account и grafana_cloud_stack_service_account_token.
  2. Укажите нужные области действия и дату истечения срока действия при создании сервисной учётной записи.
  3. Используйте токен, возвращённый grafana_cloud_stack_service_account_token, для аутентификации запросов к API.
  4. Удалите конфигурацию Terraform для создания ресурсов grafana_cloud_stack_api_key.

Пример: ваша текущая конфигурация 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
}