クロスクラスターAPIキーAPIの更新

クロスクラスターAPIキーを更新します。このAPIキーは、APIキーに基づくリモートクラスターへのアクセスに使用されます。

リクエスト

PUT /_security/cross_cluster/api_key/<id>

前提条件

  • このAPIを使用するには、少なくともmanage_securityクラスター権限を持っている必要があります。ユーザーは自分が作成したAPIキーのみを更新できます。他のユーザーのAPIキーを更新するには、run_as機能を使用して、他のユーザーの代理としてリクエストを送信してください。

このAPIの認証資格情報としてAPIキーを使用することはできません。APIキーを更新するには、所有者ユーザーの資格情報が必要です。

説明

このAPIを使用して、クロスクラスターAPIキー作成APIによって作成されたクロスクラスターAPIキーを更新します。期限切れのAPIキーや、APIキーを無効化するによって無効化されたAPIキーを更新することはできません。

このAPIは、APIキーのアクセス範囲、メタデータ、および有効期限の更新をサポートします。所有者ユーザーの情報(例:usernamerealm)も、毎回の呼び出しで自動的に更新されます。

このAPIは、REST APIキーを更新することはできません。これらは、APIキーの更新またはAPIキーの一括更新APIによって更新する必要があります。

パスパラメータ

  • id
  • (必須、文字列)更新するAPIキーのID。

リクエストボディ

リクエストボディに次のパラメータを指定できます。パラメータはオプションですが、すべてが欠落することはできません。

  • access
  • (オプション、オブジェクト)このAPIキーに付与されるアクセス権。アクセス権は、クロスクラスター検索およびクロスクラスターレプリケーションの権限で構成されます。少なくとも1つは指定する必要があります。指定された場合、新しいアクセス割り当ては以前に割り当てられたアクセスを完全に置き換えます。クロスクラスターAPIキーの作成APIの同じパラメータのフィールド構造を参照してください。
  • metadata
  • (オプション、オブジェクト)APIキーに関連付けたい任意のメタデータ。ネストされたデータ構造をサポートしています。metadataオブジェクト内では、_で始まるトップレベルキーはシステム使用のために予約されています。指定された場合、これは以前にAPIキーに関連付けられたメタデータを完全に置き換えます。
  • expiration
  • (オプション、文字列)APIキーの有効期限。デフォルトでは、APIキーは期限切れになりません。変更しない場合は省略できます。

レスポンスボディ

  • updated
  • (boolean)trueの場合、APIキーが更新されました。falseの場合、変更が検出されなかったため、APIキーは変更されませんでした。

次のようにクロスクラスターAPIキーを作成した場合:

Python

  1. resp = client.perform_request(
  2. "POST",
  3. "/_security/cross_cluster/api_key",
  4. headers={"Content-Type": "application/json"},
  5. body={
  6. "name": "my-cross-cluster-api-key",
  7. "access": {
  8. "search": [
  9. {
  10. "names": [
  11. "logs*"
  12. ]
  13. }
  14. ]
  15. },
  16. "metadata": {
  17. "application": "search"
  18. }
  19. },
  20. )
  21. print(resp)

Js

  1. const response = await client.transport.request({
  2. method: "POST",
  3. path: "/_security/cross_cluster/api_key",
  4. body: {
  5. name: "my-cross-cluster-api-key",
  6. access: {
  7. search: [
  8. {
  9. names: ["logs*"],
  10. },
  11. ],
  12. },
  13. metadata: {
  14. application: "search",
  15. },
  16. },
  17. });
  18. console.log(response);

コンソール

  1. POST /_security/cross_cluster/api_key
  2. {
  3. "name": "my-cross-cluster-api-key",
  4. "access": {
  5. "search": [
  6. {
  7. "names": ["logs*"]
  8. }
  9. ]
  10. },
  11. "metadata": {
  12. "application": "search"
  13. }
  14. }

成功した呼び出しは、APIキー情報を提供するJSON構造を返します。例えば:

コンソール-結果

  1. {
  2. "id": "VuaCfGcBCdbkQm-e5aOx",
  3. "name": "my-cross-cluster-api-key",
  4. "api_key": "ui2lp2axTNmsyakw9tvNnw",
  5. "encoded": "VnVhQ2ZHY0JDZGJrUW0tZTVhT3g6dWkybHAyYXhUTm1zeWFrdzl0dk5udw=="
  6. }

APIキーの情報、特にその正確なロールディスクリプタは、APIキーを取得するAPIで確認できます。

Python

  1. resp = client.security.get_api_key(
  2. id="VuaCfGcBCdbkQm-e5aOx",
  3. )
  4. print(resp)

Js

  1. const response = await client.security.getApiKey({
  2. id: "VuaCfGcBCdbkQm-e5aOx",
  3. });
  4. console.log(response);

コンソール

  1. GET /_security/api_key?id=VuaCfGcBCdbkQm-e5aOx

成功した呼び出しは、APIキーの情報を含むJSON構造を返します:

Js

  1. {
  2. "api_keys": [
  3. {
  4. "id": "VuaCfGcBCdbkQm-e5aOx",
  5. "name": "my-cross-cluster-api-key",
  6. "type": "cross_cluster",
  7. "creation": 1548550550158,
  8. "expiration": null,
  9. "invalidated": false,
  10. "username": "myuser",
  11. "realm": "native1",
  12. "metadata": {
  13. "application": "search"
  14. },
  15. "role_descriptors": {
  16. "cross_cluster": {
  17. "cluster": [
  18. "cross_cluster_search"
  19. ],
  20. "indices": [
  21. {
  22. "names": [
  23. "logs*"
  24. ],
  25. "privileges": [
  26. "read", "read_cross_cluster", "view_index_metadata"
  27. ],
  28. "allow_restricted_indices": false
  29. }
  30. ],
  31. "applications": [ ],
  32. "run_as": [ ],
  33. "metadata": { },
  34. "transient_metadata": {
  35. "enabled": true
  36. }
  37. }
  38. },
  39. "access": {
  40. "search": [
  41. {
  42. "names": [
  43. "logs*"
  44. ],
  45. "allow_restricted_indices": false
  46. }
  47. ]
  48. }
  49. }
  50. ]
  51. }
作成時に指定されたaccessスコープに対応するロールディスクリプタ。
この例では、logs*インデックスパターンに対してクロスクラスター検索権限を付与します。
accessは、APIキー作成時に指定された値に対応します。

次の例は、上記で作成されたAPIキーを更新し、新しいアクセス範囲とメタデータを割り当てます:

Python

  1. resp = client.perform_request(
  2. "PUT",
  3. "/_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx",
  4. headers={"Content-Type": "application/json"},
  5. body={
  6. "access": {
  7. "replication": [
  8. {
  9. "names": [
  10. "archive"
  11. ]
  12. }
  13. ]
  14. },
  15. "metadata": {
  16. "application": "replication"
  17. }
  18. },
  19. )
  20. print(resp)

Js

  1. const response = await client.transport.request({
  2. method: "PUT",
  3. path: "/_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx",
  4. body: {
  5. access: {
  6. replication: [
  7. {
  8. names: ["archive"],
  9. },
  10. ],
  11. },
  12. metadata: {
  13. application: "replication",
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. PUT /_security/cross_cluster/api_key/VuaCfGcBCdbkQm-e5aOx
  2. {
  3. "access": {
  4. "replication": [
  5. {
  6. "names": ["archive"]
  7. }
  8. ]
  9. },
  10. "metadata": {
  11. "application": "replication"
  12. }
  13. }

成功した呼び出しは、APIキーが更新されたことを示すJSON構造を返します:

コンソール-結果

  1. {
  2. "updated": true
  3. }

更新後のAPIキーの権限は、再度APIキーを取得するAPIで確認でき、次のようになります:

Js

  1. {
  2. "api_keys": [
  3. {
  4. "id": "VuaCfGcBCdbkQm-e5aOx",
  5. "name": "my-cross-cluster-api-key",
  6. "type": "cross_cluster",
  7. "creation": 1548550550158,
  8. "expiration": null,
  9. "invalidated": false,
  10. "username": "myuser",
  11. "realm": "native1",
  12. "metadata": {
  13. "application": "replication"
  14. },
  15. "role_descriptors": {
  16. "cross_cluster": {
  17. "cluster": [
  18. "cross_cluster_replication"
  19. ],
  20. "indices": [
  21. {
  22. "names": [
  23. "archive*"
  24. ],
  25. "privileges": [
  26. "cross_cluster_replication", "cross_cluster_replication_internal"
  27. ],
  28. "allow_restricted_indices": false
  29. }
  30. ],
  31. "applications": [ ],
  32. "run_as": [ ],
  33. "metadata": { },
  34. "transient_metadata": {
  35. "enabled": true
  36. }
  37. }
  38. },
  39. "access": {
  40. "replication": [
  41. {
  42. "names": [
  43. "archive*"
  44. ],
  45. "allow_restricted_indices": false
  46. }
  47. ]
  48. }
  49. }
  50. ]
  51. }
ロールディスクリプタは、更新時に指定されたaccessスコープに更新されます。
この例では、archive*インデックスパターンに対してクロスクラスター複製権限を付与するように更新されます。
accessは、APIキー更新時に指定された値に対応します。