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, либо JWTid_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