API управления секретами

Note

Доступно в Grafana 12 и более поздних версиях.

Этот API соответствует новой структуре API Grafana. Дополнительные сведения см. в документации о структуре API в Grafana.

Этот документ может не содержать последнюю версию API. Самый актуальный список доступных конечных точек см. в secret.grafana.app/v1 в Swagger.

API управления секретами Grafana позволяет управлять секретами, которые используются другими сервисами и приложениями в вашем экземпляре Grafana.

Caution

В настоящее время API находится в публичном предварительном просмотре и может быть подвержен изменениям.

Требования

Если вы используете Grafana Enterprise, для некоторых конечных точек потребуются определённые права. Дополнительные сведения см. в разделе Права управления доступом на основе ролей.

Расшифровщики

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

Доступные в настоящее время расшифровщики:

  • k6-cloud (для Grafana Cloud k6)
  • provisioning.grafana.app (для GitSync/провижининга)
  • synthetic-monitoring (для проверок Synthetic Monitoring)

Создание защищённого значения

POST /apis/secret.grafana.app/v1beta1/namespaces/:namespace/securevalues

Создаёт новое защищённое значение.

Параметры URL

  • namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.

Тело запроса

  • metadata.name: уникальный идентификатор Grafana. Если вы не хотите его указывать, задайте вместо него metadata.generateName как префикс для случайно сгенерированного uid (не может быть пустой строкой).
  • spec.description: краткое описание, объясняющее назначение этого защищённого значения. Обязательно. Длиной до 25 символов.
  • spec.value: значение секрета для хранения. Обязательно. Длиной до 24576 байт.
  • spec.decrypters: список сервисов, которым разрешено расшифровывать это защищённое значение. До 64 элементов; список поддерживаемых значений см. в примечании в разделе расшифровщики.

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
secret.securevalues:create
  • secret.securevalues:*

Пример запроса на создание:

http
POST /apis/secret.grafana.app/v1beta1/namespaces/default/securevalues HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

{
  "metadata": {
    "name": "api-key"
  },
  "spec": {
    "description": "External API Key",
    "value": "secret-api-key-12345",
    "decrypters": ["synthetic-monitoring"]
  }
}

Пример ответа:

http
HTTP/1.1 201 Created
Content-Type: application/json; charset=UTF-8
Content-Length: 343

{
  "apiVersion": "secret.grafana.app/v1beta1",
  "kind": "SecureValue",
  "metadata": {
    "name": "api-key",
    "namespace": "default",
    "uid": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
    "creationTimestamp": "2024-01-15T10:35:00Z"
  },
  "spec": {
    "description": "External API Key",
    "decrypters": ["synthetic-monitoring"]
  },
  "status": {}
}

Коды состояния:

  • 201 – Создано
  • 400 – Ошибки (некорректный JSON, отсутствующие или недопустимые поля и т. д.)
  • 401 – Не авторизован
  • 403 – Доступ запрещён
  • 409 – Конфликт (защищённое значение с таким же именем уже существует)

Note

Поле spec.value никогда не возвращается конечными точками API. Пользователи не могут расшифровать секреты.

Получение списка защищённых значений

GET /apis/secret.grafana.app/v1beta1/namespaces/:namespace/securevalues

Возвращает список всех защищённых значений в пространстве имён.

Параметры URL

  • namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.

Параметры запроса

  • labelSelector: фильтрует защищённые значения по меткам.

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
secret.securevalues:read
  • secret.securevalues:*

Пример запроса на получение списка:

http
GET /apis/secret.grafana.app/v1beta1/namespaces/default/securevalues HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 383

{
  "apiVersion": "secret.grafana.app/v1beta1",
  "kind": "SecureValueList",
  "metadata": {
    "resourceVersion": "12345"
  },
  "items": [
    {
      "apiVersion": "secret.grafana.app/v1beta1",
      "kind": "SecureValue",
      "metadata": {
        "name": "database-password",
        "namespace": "default",
        "creationTimestamp": "2024-01-15T10:30:00Z"
      },
      "spec": {
        "description": "Production DB Password",
        "decrypters": ["synthetic-monitoring"]
      },
      "status": {}
    }
  ]
}

Коды состояния:

  • 200 – OK
  • 401 – Не авторизован
  • 403 – Доступ запрещён

Получение защищённого значения

GET /apis/secret.grafana.app/v1beta1/namespaces/:namespace/securevalues/:name

Возвращает сведения о конкретном защищённом значении. Значение секрета при этом не возвращается.

Параметры URL

  • namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
  • name: имя защищённого значения.

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
secret.securevalues:read
  • secret.securevalues:*

Пример запроса на получение:

http
GET /apis/secret.grafana.app/v1beta1/namespaces/default/securevalues/api-key HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 294

{
  "apiVersion": "secret.grafana.app/v1beta1",
  "kind": "SecureValue",
  "metadata": {
    "name": "api-key",
    "namespace": "default",
    "uid": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
    "creationTimestamp": "2024-01-15T10:35:00Z"
  },
  "spec": {
    "description": "External API Key",
    "decrypters": ["synthetic-monitoring"]
  },
  "status": {}
}

Коды состояния:

  • 200 – OK
  • 401 – Не авторизован
  • 403 – Доступ запрещён
  • 404 – Не найдено

Обновление защищённого значения

PUT /apis/secret.grafana.app/v1beta1/namespaces/:namespace/securevalues/:name

Заменяет существующее защищённое значение новой спецификацией.

Параметры URL

  • namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
  • name: имя защищённого значения.

Тело запроса

  • spec.description: краткое описание, объясняющее назначение этого защищённого значения. Обязательно. Длиной до 25 символов.
  • spec.value: значение секрета для хранения. Обязательно. Длиной до 24576 байт.
  • spec.decrypters: список сервисов, которым разрешено расшифровывать это защищённое значение. До 64 элементов; список поддерживаемых значений см. в примечании в разделе расшифровщики.

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
secret.securevalues:write
  • secret.securevalues:*

Пример запроса на обновление:

http
PUT /apis/secret.grafana.app/v1beta1/namespaces/default/securevalues/api-key HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

{
  "metadata": {
    "name": "api-key"
  },
  "spec": {
    "description": "External API Key",
    "value": "new-value-12345",
    "decrypters": ["synthetic-monitoring"]
  }
}

Пример ответа:

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 282

{
  "apiVersion": "secret.grafana.app/v1beta1",
  "kind": "SecureValue",
  "metadata": {
    "name": "api-key",
    "namespace": "default",
    "uid": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
    "creationTimestamp": "2024-01-15T10:35:00Z"
  },
  "spec": {
    "description": "External API Key",
    "decrypters": ["synthetic-monitoring"]
  }
}

Коды состояния:

  • 200 – OK
  • 400 – Ошибки (некорректный JSON, отсутствующие или недопустимые поля и т. д.)
  • 401 – Не авторизован
  • 403 – Доступ запрещён
  • 404 – Не найдено

Удаление защищённого значения

DELETE /apis/secret.grafana.app/v1beta1/namespaces/:namespace/securevalues/:name

Безвозвратно удаляет защищённое значение. Это также удаляет лежащее в основе хранимое значение секрета.

Параметры URL

  • namespace: подробнее о том, какое пространство имён использовать, см. в обзоре API.
  • name: имя защищённого значения.

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
secret.securevalues:delete
  • secret.securevalues:*

Пример запроса на удаление:

http
DELETE /apis/secret.grafana.app/v1beta1/namespaces/default/securevalues/api-key HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 65

{
  "apiVersion": "v1",
  "kind": "Status",
  "status": "Success",
  "code": 200
}

Коды состояния:

  • 200 – OK
  • 401 – Не авторизован
  • 403 – Доступ запрещён
  • 404 – Не найдено