Grant API key API

他のユーザーの代わりにAPIキーを作成します。

Request

POST /_security/api_key/grant

Prerequisites

  • このAPIを使用するには、grant_api_keyまたはmanage_api_keyクラスターの権限が必要です。

Description

このAPIはCreate API keysに似ていますが、APIを実行するユーザーとは異なるユーザーのためにAPIキーを作成します。

呼び出し元は、APIキーが作成されるユーザーの認証情報を持っている必要があります。そのユーザーの認証情報なしにこのAPIを使用してAPIキーを作成することはできません。サポートされているユーザー認証情報の種類は次のとおりです: ユーザー名とパスワード Elasticsearchアクセス トークン * JWT

提供された認証情報のユーザーは、オプションで[\

Request body

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キーの権限とユーザーまたはアクセス トークンの権限の交差になります。ロール記述子の構造は、create API keys APIのリクエストと同じです。
    • metadata
    • (オプション、オブジェクト) APIキーに関連付けたい任意のメタデータ。ネストされたデータ構造をサポートします。metadataオブジェクト内では、_で始まるキーはシステム使用のために予約されています。
  • client_authentication
  • (オプション、オブジェクト) access_tokenグラントタイプを使用し、JWTを提供する場合、これは必要なJWTsのクライアント認証を指定します(つまり、通常はES-Client-Authenticationリクエストヘッダーで指定されるもの)。
    • scheme
    • (必須、文字列) ES-Client-Authenticationリクエストヘッダーで提供されるスキーム(大文字と小文字を区別)。現在、サポートされている唯一の値はSharedSecretです。
    • value
    • (必須、文字列) ES-Client-Authenticationリクエストヘッダーで提供されるクライアント資格情報のスキームに続く値。たとえば、リクエストヘッダーがES-Client-Authentication: SharedSecret myShar3dS3cretで、クライアントがJWTで直接認証する場合、ここではvaluemyShar3dS3cretである必要があります。
  • grant_type
  • (必須、文字列) グラントのタイプ。サポートされているグラントタイプは:access_tokenpasswordです。
    • access_token
    • このタイプのグラントでは、Elasticsearchトークンサービスによって作成されたアクセストークン(Get tokenおよびEncrypt HTTP client communications for Elasticsearchを参照)またはJWT(JWT access_tokenまたはJWT id_tokenのいずれか)を提供する必要があります。
    • password
    • このタイプのグラントでは、APIキーを作成するために必要なユーザーIDとパスワードを提供する必要があります。
  • password
  • (必須*、文字列) ユーザーのパスワード。passwordグラントタイプを指定する場合、このパラメータは必須です。他のグラントタイプでは無効です。
  • username
  • (必須*、文字列) ユーザーを識別するユーザー名。passwordグラントタイプを指定する場合、このパラメータは必須です。他のグラントタイプでは無効です。
  • run_as
  • (オプション、文字列) なりすましされるユーザーの名前。

*この設定は、すべての状況で必須ではないことを示します。

Examples

Python

  1. resp = client.security.grant_api_key(
  2. grant_type="password",
  3. username="test_admin",
  4. password="x-pack-test-password",
  5. api_key={
  6. "name": "my-api-key",
  7. "expiration": "1d",
  8. "role_descriptors": {
  9. "role-a": {
  10. "cluster": [
  11. "all"
  12. ],
  13. "indices": [
  14. {
  15. "names": [
  16. "index-a*"
  17. ],
  18. "privileges": [
  19. "read"
  20. ]
  21. }
  22. ]
  23. },
  24. "role-b": {
  25. "cluster": [
  26. "all"
  27. ],
  28. "indices": [
  29. {
  30. "names": [
  31. "index-b*"
  32. ],
  33. "privileges": [
  34. "all"
  35. ]
  36. }
  37. ]
  38. }
  39. },
  40. "metadata": {
  41. "application": "my-application",
  42. "environment": {
  43. "level": 1,
  44. "trusted": True,
  45. "tags": [
  46. "dev",
  47. "staging"
  48. ]
  49. }
  50. }
  51. },
  52. )
  53. print(resp)

Js

  1. const response = await client.security.grantApiKey({
  2. grant_type: "password",
  3. username: "test_admin",
  4. password: "x-pack-test-password",
  5. api_key: {
  6. name: "my-api-key",
  7. expiration: "1d",
  8. role_descriptors: {
  9. "role-a": {
  10. cluster: ["all"],
  11. indices: [
  12. {
  13. names: ["index-a*"],
  14. privileges: ["read"],
  15. },
  16. ],
  17. },
  18. "role-b": {
  19. cluster: ["all"],
  20. indices: [
  21. {
  22. names: ["index-b*"],
  23. privileges: ["all"],
  24. },
  25. ],
  26. },
  27. },
  28. metadata: {
  29. application: "my-application",
  30. environment: {
  31. level: 1,
  32. trusted: true,
  33. tags: ["dev", "staging"],
  34. },
  35. },
  36. },
  37. });
  38. console.log(response);

Console

  1. POST /_security/api_key/grant
  2. {
  3. "grant_type": "password",
  4. "username" : "test_admin",
  5. "password" : "x-pack-test-password",
  6. "api_key" : {
  7. "name": "my-api-key",
  8. "expiration": "1d",
  9. "role_descriptors": {
  10. "role-a": {
  11. "cluster": ["all"],
  12. "indices": [
  13. {
  14. "names": ["index-a*"],
  15. "privileges": ["read"]
  16. }
  17. ]
  18. },
  19. "role-b": {
  20. "cluster": ["all"],
  21. "indices": [
  22. {
  23. "names": ["index-b*"],
  24. "privileges": ["all"]
  25. }
  26. ]
  27. }
  28. },
  29. "metadata": {
  30. "application": "my-application",
  31. "environment": {
  32. "level": 1,
  33. "trusted": true,
  34. "tags": ["dev", "staging"]
  35. }
  36. }
  37. }
  38. }

提供された資格情報のユーザー(test_admin)は、別のユーザー(test_user)として「実行」できます。APIキーはなりすまされたユーザー(test_user)に付与されます。

Python

  1. resp = client.security.grant_api_key(
  2. grant_type="password",
  3. username="test_admin",
  4. password="x-pack-test-password",
  5. run_as="test_user",
  6. api_key={
  7. "name": "another-api-key"
  8. },
  9. )
  10. print(resp)

Js

  1. const response = await client.security.grantApiKey({
  2. grant_type: "password",
  3. username: "test_admin",
  4. password: "x-pack-test-password",
  5. run_as: "test_user",
  6. api_key: {
  7. name: "another-api-key",
  8. },
  9. });
  10. console.log(response);

Console

  1. POST /_security/api_key/grant
  2. {
  3. "grant_type": "password",
  4. "username" : "test_admin",
  5. "password" : "x-pack-test-password",
  6. "run_as": "test_user",
  7. "api_key" : {
  8. "name": "another-api-key"
  9. }
  10. }
資格情報が提供され、”run as”を実行するユーザー。
上記のユーザーの資格情報
APIキーが作成されるなりすまされたユーザー。