Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›REST API ›API безопасности

API создания ключа API

Новая справка по API

Для получения самых последних данных об API обратитесь к API безопасности.

Создаёт ключ API от имени другого пользователя.

Запрос

POST /_security/api_key/grant

Предварительные условия

  • Для использования этого API у вас должна быть привилегия grant_api_key или manage_api_key кластера.

Описание

Этот API похож на создание ключей API, но он создаёт ключ API для пользователя, отличного от пользователя, выполняющего API.

Вызывающая сторона должна иметь учетные данные пользователя, от имени которого будет создан ключ API. Невозможно использовать этот API для создания ключа API без учетных данных этого пользователя. Поддерживаемые типы учетных данных пользователя: * имя пользователя и пароль * токены доступа Elasticsearch * JWT

Пользователь, для которого предоставляются учетные данные, может (по выбору) выполнять действия от имени (подменять) другого пользователя. В этом случае ключ API будет создан от имени заменённого пользователя.

Этот API предназначен для использования приложениями, которым требуется создавать и управлять ключами API для конечных пользователей, но которые не могут гарантировать, что эти пользователи имеют разрешение на создание ключей API от своего имени (см. Предварительные условия). Ключи API создаются службой ключей API Elasticsearch, которая автоматически включена.

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

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

См. настройки службы ключей API для настроек, связанных со службой ключей API.

Тело запроса

В теле запроса POST можно указать следующие параметры:

access_token
(Обязательно*, строка) Токен доступа Elasticsearch пользователя или JWT. Поддерживаются как токены доступа, так и токены идентификации JWT, и они зависят от конфигурации базового JWT-режима. Созданный ключ API будет иметь моментальный снимок разрешений пользователя, авторизованного с помощью этого токена (или ещё более ограниченные разрешения, см. параметр role_descriptors). Если вы укажете тип предоставления access_token, этот параметр обязателен. Он недействителен с другими типами предоставления.
api_key

(Обязательно, объект) Определяет ключ API.

expiration
(Необязательно, строка) Время истечения срока действия ключа API. По умолчанию ключи API никогда не истекают.
name
(Обязательно, строка) Указывает имя для этого ключа API.
role_descriptors
(Необязательно, объект) Описания ролей для этого ключа API. Этот параметр необязателен. Если он не указан или представляет собой пустой массив, ключ API имеет моментальный снимок разрешений указанного пользователя или токена доступа. Если вы предоставите описания ролей, полученные разрешения будут пересечением разрешений ключей API и разрешений пользователя или токена доступа. Структура описания роли такая же, как запрос для API создания ключей API.
metadata
(Необязательно, объект) Произвольные метаданные, которые вы хотите связать с ключом API. Он поддерживает вложенную структуру данных. В объекте metadata ключи, начинающиеся с _, зарезервированы для использования системой.
client_authentication

(Необязательно, объект) При использовании типа предоставления access_token и предоставлении JWT, это задаёт аутентификацию клиента для JWT, которые её требуют (т.е. то, что обычно задаётся заголовком запроса ES-Client-Authentication).

scheme
(Обязательно, строка) Схема (чувствительная к регистру), как она передаётся в заголовке запроса ES-Client-Authentication. В настоящее время единственное поддерживаемое значение — SharedSecret.
value
(Обязательно, строка) Значение, следующее за схемой для учетных данных клиента, как оно передаётся в заголовке запроса ES-Client-Authentication. Например, если заголовок запроса был бы ES-Client-Authentication: SharedSecret myShar3dS3cret, если клиент авторизовался бы напрямую с помощью JWT, то value здесь должен быть myShar3dS3cret.
grant_type

(Обязательно, строка) Тип предоставления. Поддерживаемые типы предоставления: access_token,password.

access_token
В этом типе предоставления вам необходимо предоставить токен доступа, созданный службой токенов Elasticsearch (см. Получение токена и Шифрование коммуникаций HTTP-клиента для Elasticsearch), или JWT (либо JWT access_token, либо JWT id_token).
password
В этом типе предоставления необходимо предоставить идентификатор пользователя и пароль, для которых нужно создать ключ API.
password
(Обязательно*, строка) Пароль пользователя. Если вы укажете тип предоставления password, этот параметр обязателен. Он недействителен с другими типами предоставления.
username
(Обязательно*, строка) Имя пользователя, идентифицирующее пользователя. Если вы укажете тип предоставления password, этот параметр обязателен. Он недействителен с другими типами предоставления.
run_as
(Необязательно, строка) Имя пользователя, для которого нужно выполнить действия от имени.

*Указывает, что настройка обязательна в некоторых, но не во всех ситуациях.

Примеры

resp = client.security.grant_api_key(
    grant_type="password",
    username="test_admin",
    password="x-pack-test-password",
    api_key={
        "name": "my-api-key",
        "expiration": "1d",
        "role_descriptors": {
            "role-a": {
                "cluster": [
                    "all"
                ],
                "indices": [
                    {
                        "names": [
                            "index-a*"
                        ],
                        "privileges": [
                            "read"
                        ]
                    }
                ]
            },
            "role-b": {
                "cluster": [
                    "all"
                ],
                "indices": [
                    {
                        "names": [
                            "index-b*"
                        ],
                        "privileges": [
                            "all"
                        ]
                    }
                ]
            }
        },
        "metadata": {
            "application": "my-application",
            "environment": {
                "level": 1,
                "trusted": True,
                "tags": [
                    "dev",
                    "staging"
                ]
            }
        }
    },
)
print(resp)
const response = await client.security.grantApiKey({
  grant_type: "password",
  username: "test_admin",
  password: "x-pack-test-password",
  api_key: {
    name: "my-api-key",
    expiration: "1d",
    role_descriptors: {
      "role-a": {
        cluster: ["all"],
        indices: [
          {
            names: ["index-a*"],
            privileges: ["read"],
          },
        ],
      },
      "role-b": {
        cluster: ["all"],
        indices: [
          {
            names: ["index-b*"],
            privileges: ["all"],
          },
        ],
      },
    },
    metadata: {
      application: "my-application",
      environment: {
        level: 1,
        trusted: true,
        tags: ["dev", "staging"],
      },
    },
  },
});
console.log(response);
POST /_security/api_key/grant
{
  "grant_type": "password",
  "username" : "test_admin",
  "password" : "x-pack-test-password",
  "api_key" : {
    "name": "my-api-key",
    "expiration": "1d",
    "role_descriptors": {
      "role-a": {
        "cluster": ["all"],
        "indices": [
          {
          "names": ["index-a*"],
          "privileges": ["read"]
          }
        ]
      },
      "role-b": {
        "cluster": ["all"],
        "indices": [
          {
          "names": ["index-b*"],
          "privileges": ["all"]
          }
        ]
      }
    },
    "metadata": {
      "application": "my-application",
      "environment": {
         "level": 1,
         "trusted": true,
         "tags": ["dev", "staging"]
      }
    }
  }
}

Пользователь (test_admin), чьи учетные данные предоставлены, может "выполнять действия от имени" другого пользователя (test_user). Ключ API будет предоставлен заменённому пользователю (test_user).

resp = client.security.grant_api_key(
    grant_type="password",
    username="test_admin",
    password="x-pack-test-password",
    run_as="test_user",
    api_key={
        "name": "another-api-key"
    },
)
print(resp)
const response = await client.security.grantApiKey({
  grant_type: "password",
  username: "test_admin",
  password: "x-pack-test-password",
  run_as: "test_user",
  api_key: {
    name: "another-api-key",
  },
});
console.log(response);
POST /_security/api_key/grant
{
  "grant_type": "password",
  "username" : "test_admin",  
  "password" : "x-pack-test-password",  
  "run_as": "test_user",  
  "api_key" : {
    "name": "another-api-key"
  }
}

Пользователь, для которого предоставлены данные и выполняет "выполнение от имени".

Данные для вышеупомянутого пользователя.

Заменяемый пользователь, для которого будет создан ключ API.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/security-api-grant-api-key.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API