API обновления ключа API
Запрос
PUT /_security/api_key/<id>
Предварительные условия
- Для использования этого API у вас должно быть как минимум право
manage_own_api_keyкластера. Пользователи могут обновлять только ключи API, которые они создали или которым они были предоставлены. Чтобы обновить ключ API другого пользователя, воспользуйтесь функциейrun_as, чтобы отправить запрос от имени другого пользователя.
Невозможно использовать ключ API в качестве аутентификационных данных для этого API. Для обновления ключа API требуются учетные данные пользователя-владельца.
Описание
Используйте этот API для обновления ключей API, созданных API создания ключа API или предоставления ключа API. Если вам нужно применить одно и то же обновление к многим ключам API, вы можете использовать массовое обновление ключей API, чтобы уменьшить нагрузку.
Невозможно обновить истекшие ключи API или ключи API, которые были аннулированы с помощью API аннулирования ключа API.
Этот API поддерживает обновления области доступа ключа API, метаданных и срока действия. Область доступа ключа API определяется из role_descriptors, указанного в запросе, и моментальной фотографии разрешений пользователя-владельца на момент запроса. Моментальная фотография разрешений владельца обновляется автоматически при каждом вызове.
Если вы не укажете role_descriptors в запросе, вызов этого API всё равно может изменить область доступа ключа API. Это изменение может произойти, если разрешения пользователя-владельца изменились с момента создания или последнего изменения ключа API.
Параметры пути
-
id - (Обязательный, строка) Идентификатор ключа API, который нужно обновить.
Тело запроса
В теле запроса, которое является необязательным, можно указать следующие параметры.
-
role_descriptors - (Необязательный, объект) Описатели ролей, которые нужно назначить этому ключу API. Эффективные разрешения ключа API являются пересечением назначенных привилегий и моментальной фотографии разрешений пользователя-владельца на определённый момент времени. Вы можете назначить новые привилегии, указав их в этом параметре. Чтобы удалить назначенные привилегии, можно указать пустой параметр
role_descriptors, т.е. пустой объект{}. Если у ключа API нет назначенных привилегий, он наследует полные разрешения пользователя-владельца. Моментальная фотография разрешений владельца всегда обновляется, независимо от того, указываете ли вы параметрrole_descriptorsили нет. Структура описателя роли такая же, как и в запросе к API создания ключей API. -
metadata - (Необязательный, объект) Произвольные метаданные, которые вы хотите связать с ключом API. Он поддерживает вложенную структуру данных. Внутри объекта
metadataключевые значения, начинающиеся с_, зарезервированы для системного использования. При указании полностью заменяет метаданные, ранее связанные с ключом API. -
expiration - (Необязательный, строка) Время истечения срока действия ключа API. По умолчанию ключи API никогда не истекают. Можно опустить, чтобы оставить без изменений.
Тело ответа
-
updated - (boolean) Если
true, ключ API был обновлен. Еслиfalse, ключ API не изменился, потому что изменений не было обнаружено.
Примеры
Если вы создаёте ключ API следующим образом:
resp = client.security.create_api_key(
name="my-api-key",
role_descriptors={
"role-a": {
"cluster": [
"all"
],
"indices": [
{
"names": [
"index-a*"
],
"privileges": [
"read"
]
}
]
}
},
metadata={
"application": "my-application",
"environment": {
"level": 1,
"trusted": True,
"tags": [
"dev",
"staging"
]
}
},
)
print(resp) const response = await client.security.createApiKey({
name: "my-api-key",
role_descriptors: {
"role-a": {
cluster: ["all"],
indices: [
{
names: ["index-a*"],
privileges: ["read"],
},
],
},
},
metadata: {
application: "my-application",
environment: {
level: 1,
trusted: true,
tags: ["dev", "staging"],
},
},
});
console.log(response); POST /_security/api_key
{
"name": "my-api-key",
"role_descriptors": {
"role-a": {
"cluster": ["all"],
"indices": [
{
"names": ["index-a*"],
"privileges": ["read"]
}
]
}
},
"metadata": {
"application": "my-application",
"environment": {
"level": 1,
"trusted": true,
"tags": ["dev", "staging"]
}
}
} Успешный вызов возвращает JSON-структуру, предоставляющую информацию о ключе API. Например:
{
"id": "VuaCfGcBCdbkQm-e5aOx",
"name": "my-api-key",
"api_key": "ui2lp2axTNmsyakw9tvNnw",
"encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
} Для примеров ниже предположим, что разрешения пользователя-владельца:
{
"cluster": ["all"],
"indices": [
{
"names": ["*"],
"privileges": ["all"]
}
]
} Следующий пример обновляет созданный выше ключ API, назначая ему новые описатели ролей и метаданные:
resp = client.security.update_api_key(
id="VuaCfGcBCdbkQm-e5aOx",
role_descriptors={
"role-a": {
"indices": [
{
"names": [
"*"
],
"privileges": [
"write"
]
}
]
}
},
metadata={
"environment": {
"level": 2,
"trusted": True,
"tags": [
"production"
]
}
},
)
print(resp) const response = await client.security.updateApiKey({
id: "VuaCfGcBCdbkQm-e5aOx",
role_descriptors: {
"role-a": {
indices: [
{
names: ["*"],
privileges: ["write"],
},
],
},
},
metadata: {
environment: {
level: 2,
trusted: true,
tags: ["production"],
},
},
});
console.log(response); PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx
{
"role_descriptors": {
"role-a": {
"indices": [
{
"names": ["*"],
"privileges": ["write"]
}
]
}
},
"metadata": {
"environment": {
"level": 2,
"trusted": true,
"tags": ["production"]
}
}
} Успешный вызов возвращает JSON-структуру, указывающую, что ключ API был обновлён:
{
"updated": true
} Эффективные разрешения ключа API после обновления будут пересечением предоставленных описателей ролей и разрешений пользователя-владельца:
{
"indices": [
{
"names": ["*"],
"privileges": ["write"]
}
]
} Следующий пример удаляет ранее назначенные разрешения ключа API, заставляя его унаследовать полные разрешения пользователя-владельца.
resp = client.security.update_api_key(
id="VuaCfGcBCdbkQm-e5aOx",
role_descriptors={},
)
print(resp) const response = await client.security.updateApiKey({
id: "VuaCfGcBCdbkQm-e5aOx",
role_descriptors: {},
});
console.log(response); PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx
{
"role_descriptors": {}
} Что возвращает ответ:
{
"updated": true
} Эффективные разрешения ключа API после обновления будут такими же, как у пользователя-владельца:
{
"cluster": ["all"],
"indices": [
{
"names": ["*"],
"privileges": ["all"]
}
]
} Для следующего примера предположим, что разрешения пользователя-владельца изменились с исходных разрешений на:
{
"cluster": ["manage_security"],
"indices": [
{
"names": ["*"],
"privileges": ["read"]
}
]
} Следующий запрос автоматически обновляет моментальную фотографию разрешений пользователя, связанных с ключом API:
resp = client.security.update_api_key(
id="VuaCfGcBCdbkQm-e5aOx",
)
print(resp) const response = await client.security.updateApiKey({
id: "VuaCfGcBCdbkQm-e5aOx",
});
console.log(response); PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx
Что возвращает ответ:
{
"updated": true
} Результат - следующие эффективные разрешения для ключа API:
{
"cluster": ["manage_security"],
"indices": [
{
"names": ["*"],
"privileges": ["read"]
}
]
}
© 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-update-api-key.html