授予 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 密钥由 Elasticsearch API 密钥服务创建,该服务会自动启用。
成功授予 API 密钥 API 调用将返回一个 JSON 结构,其中包含 API 密钥、其唯一 ID 及其名称。如果适用,它还会以毫秒为单位返回 API 密钥的过期信息。
默认情况下,API 密钥永不过期。您可以在创建 API 密钥时指定过期信息。
有关与 API 密钥服务相关的配置设置,请参阅 API 密钥服务设置。
请求正文编辑
以下参数可以在 POST 请求的正文中指定
-
access_token
- (必需*,字符串) 用户的 Elasticsearch 访问令牌 或 JWT。两种 访问 和 ID 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 令牌服务创建的访问令牌(请参阅 获取令牌 和 加密 Elasticsearch 的 HTTP 客户端通信),或 JWT(JWT
access_token
或 JWTid_token
)。 -
password
- 在此类型的授权中,您必须提供要为其创建 API 密钥的用户名和密码。
-
-
password
- (必需*,字符串) 用户的密码。如果您指定
password
授权类型,则此参数是必需的。它与其他授权类型不兼容。 -
username
- (必需*,字符串) 标识用户的用户名。如果您指定
password
授权类型,则此参数是必需的。它与其他授权类型不兼容。 -
run_as
- (可选,字符串) 要 模拟 的用户的名称。
*表示设置在某些情况下是必需的,但在并非所有情况下都是必需的。
示例编辑
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
)。