APIキーの更新API

リクエスト

PUT /_security/api_key/<id>

前提条件

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

この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キーのID。

リクエストボディ

リクエストボディには、以下のパラメータを指定できます。これはオプションです。

  • 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キーを作成した場合:

Python

  1. resp = client.security.create_api_key(
  2. name="my-api-key",
  3. role_descriptors={
  4. "role-a": {
  5. "cluster": [
  6. "all"
  7. ],
  8. "indices": [
  9. {
  10. "names": [
  11. "index-a*"
  12. ],
  13. "privileges": [
  14. "read"
  15. ]
  16. }
  17. ]
  18. }
  19. },
  20. metadata={
  21. "application": "my-application",
  22. "environment": {
  23. "level": 1,
  24. "trusted": True,
  25. "tags": [
  26. "dev",
  27. "staging"
  28. ]
  29. }
  30. },
  31. )
  32. print(resp)

Js

  1. const response = await client.security.createApiKey({
  2. name: "my-api-key",
  3. role_descriptors: {
  4. "role-a": {
  5. cluster: ["all"],
  6. indices: [
  7. {
  8. names: ["index-a*"],
  9. privileges: ["read"],
  10. },
  11. ],
  12. },
  13. },
  14. metadata: {
  15. application: "my-application",
  16. environment: {
  17. level: 1,
  18. trusted: true,
  19. tags: ["dev", "staging"],
  20. },
  21. },
  22. });
  23. console.log(response);

コンソール

  1. POST /_security/api_key
  2. {
  3. "name": "my-api-key",
  4. "role_descriptors": {
  5. "role-a": {
  6. "cluster": ["all"],
  7. "indices": [
  8. {
  9. "names": ["index-a*"],
  10. "privileges": ["read"]
  11. }
  12. ]
  13. }
  14. },
  15. "metadata": {
  16. "application": "my-application",
  17. "environment": {
  18. "level": 1,
  19. "trusted": true,
  20. "tags": ["dev", "staging"]
  21. }
  22. }
  23. }

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

コンソール-結果

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

以下の例では、所有者ユーザーの権限は次のようになります:

Js

  1. {
  2. "cluster": ["all"],
  3. "indices": [
  4. {
  5. "names": ["*"],
  6. "privileges": ["all"]
  7. }
  8. ]
  9. }

次の例では、上記で作成したAPIキーを更新し、新しいロール記述子とメタデータを割り当てます:

Python

  1. resp = client.security.update_api_key(
  2. id="VuaCfGcBCdbkQm-e5aOx",
  3. role_descriptors={
  4. "role-a": {
  5. "indices": [
  6. {
  7. "names": [
  8. "*"
  9. ],
  10. "privileges": [
  11. "write"
  12. ]
  13. }
  14. ]
  15. }
  16. },
  17. metadata={
  18. "environment": {
  19. "level": 2,
  20. "trusted": True,
  21. "tags": [
  22. "production"
  23. ]
  24. }
  25. },
  26. )
  27. print(resp)

Js

  1. const response = await client.security.updateApiKey({
  2. id: "VuaCfGcBCdbkQm-e5aOx",
  3. role_descriptors: {
  4. "role-a": {
  5. indices: [
  6. {
  7. names: ["*"],
  8. privileges: ["write"],
  9. },
  10. ],
  11. },
  12. },
  13. metadata: {
  14. environment: {
  15. level: 2,
  16. trusted: true,
  17. tags: ["production"],
  18. },
  19. },
  20. });
  21. console.log(response);

コンソール

  1. PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx
  2. {
  3. "role_descriptors": {
  4. "role-a": {
  5. "indices": [
  6. {
  7. "names": ["*"],
  8. "privileges": ["write"]
  9. }
  10. ]
  11. }
  12. },
  13. "metadata": {
  14. "environment": {
  15. "level": 2,
  16. "trusted": true,
  17. "tags": ["production"]
  18. }
  19. }
  20. }

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

コンソール-結果

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

更新後のAPIキーの有効な権限は、提供されたロール記述子と所有者ユーザーの権限の交差点になります:

Js

  1. {
  2. "indices": [
  3. {
  4. "names": ["*"],
  5. "privileges": ["write"]
  6. }
  7. ]
  8. }

次の例では、APIキーに以前割り当てられた権限を削除し、所有者ユーザーの完全な権限を継承させます。

Python

  1. resp = client.security.update_api_key(
  2. id="VuaCfGcBCdbkQm-e5aOx",
  3. role_descriptors={},
  4. )
  5. print(resp)

Js

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

コンソール

  1. PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx
  2. {
  3. "role_descriptors": {}
  4. }

次のレスポンスが返されます:

コンソール-結果

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

更新後のAPIキーの有効な権限は、所有者ユーザーの権限と同じになります:

Js

  1. {
  2. "cluster": ["all"],
  3. "indices": [
  4. {
  5. "names": ["*"],
  6. "privileges": ["all"]
  7. }
  8. ]
  9. }

次の例では、所有者ユーザーの権限が元の権限から次のように変更されたと仮定します:

Js

  1. {
  2. "cluster": ["manage_security"],
  3. "indices": [
  4. {
  5. "names": ["*"],
  6. "privileges": ["read"]
  7. }
  8. ]
  9. }

次のリクエストは、APIキーに関連付けられたユーザーの権限のスナップショットを自動的に更新します:

Python

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

Js

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

コンソール

  1. PUT /_security/api_key/VuaCfGcBCdbkQm-e5aOx

次のレスポンスが返されます:

コンソール-結果

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

APIキーの有効な権限は次のようになります:

Js

  1. {
  2. "cluster": ["manage_security"],
  3. "indices": [
  4. {
  5. "names": ["*"],
  6. "privileges": ["read"]
  7. }
  8. ]
  9. }