授权 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 realm 配置。创建的 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 密钥的用户 ID 和密码。
-
-
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);