ユーザープロファイルデータAPIの更新

ユーザープロファイル機能は、KibanaおよびElasticのObservability、Enterprise Search、Elastic Securityソリューション専用に設計されています。個々のユーザーや外部アプリケーションは、このAPIを直接呼び出すべきではありません。Elasticは、事前通知なしに将来のリリースでこの機能を変更または削除する権利を留保します。

指定された一意のIDに関連付けられたユーザープロファイルの特定のデータを更新します。

リクエスト

POST /_security/profile/<uid>/_data

前提条件

このAPIを使用するには、次のいずれかの権限を持っている必要があります:

  • manage_user_profile クラスター権限。
  • リクエストで参照される名前空間に対する update_profile_data グローバル権限。

説明

ユーザープロファイルの更新APIは、既存のユーザープロファイルドキュメントの labels および data フィールドをJSONオブジェクトで更新します。新しいキーとその値がプロファイルドキュメントに追加され、競合するキーはリクエストに含まれるデータによって置き換えられます。

labelsdata の両方について、コンテンツはトップレベルフィールドによって名前空間化されます。 update_profile_data グローバル権限は、許可された名前空間のみを更新するための権限を付与します。

パスパラメータ

  • uid
  • (必須、文字列)ユーザープロファイルの一意の識別子。

クエリパラメータ

  • if_seq_no
  • (オプション、整数)ドキュメントがこのシーケンス番号を持つ場合にのみ操作を実行します。詳細は楽観的同時制御を参照してください。
  • if_primary_term
  • (オプション、整数)ドキュメントがこのプライマリタームを持つ場合にのみ操作を実行します。詳細は楽観的同時制御を参照してください。
  • refresh
  • (オプション、列挙型)true の場合、Elasticsearchは影響を受けたシャードをリフレッシュしてこの操作を検索可能にします。wait_for の場合は、リフレッシュを待ってこの操作を検索可能にします。false の場合は、リフレッシュに対して何もしません。有効な値:truefalsewait_for。デフォルト:false
  • uid
  • (必須、文字列)ユーザープロファイルの一意の識別子。

リクエストボディ

  • labels
  • (必須*、オブジェクト)ユーザープロファイルに関連付けたい検索可能なデータ。このフィールドはネストされたデータ構造をサポートします。labels オブジェクト内では、トップレベルキーはアンダースコア(_)で始めることはできず、ピリオド(.)を含むことはできません。
  • data
  • (必須*、オブジェクト)ユーザープロファイルに関連付けたい非検索可能なデータ。このフィールドはネストされたデータ構造をサポートします。data オブジェクト内では、トップレベルキーはアンダースコア(_)で始めることはできず、ピリオド(.)を含むことはできません。data オブジェクトは検索可能ではありませんが、ユーザープロファイル取得APIで取得できます。

*この設定は、すべての状況ではなく、一部の状況で必須であることを示します。

レスポンスボディ

成功したユーザープロファイルデータAPIの更新呼び出しは、リクエストが承認されたことを示すJSON構造を返します。

Js

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

次のリクエストは、uid に一致する u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0 のプロファイルドキュメントを更新します。

Python

  1. resp = client.security.update_user_profile_data(
  2. uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. labels={
  4. "direction": "east"
  5. },
  6. data={
  7. "app1": {
  8. "theme": "default"
  9. }
  10. },
  11. )
  12. print(resp)

Js

  1. const response = await client.security.updateUserProfileData({
  2. uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. labels: {
  4. direction: "east",
  5. },
  6. data: {
  7. app1: {
  8. theme: "default",
  9. },
  10. },
  11. });
  12. console.log(response);

コンソール

  1. POST /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0/_data
  2. {
  3. "labels": {
  4. "direction": "east"
  5. },
  6. "data": {
  7. "app1": {
  8. "theme": "default"
  9. }
  10. }
  11. }

プロファイルデータを更新して、一部のキーを置き換え、新しいキーを追加できます。

Python

  1. resp = client.security.update_user_profile_data(
  2. uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. labels={
  4. "direction": "west"
  5. },
  6. data={
  7. "app1": {
  8. "font": "large"
  9. }
  10. },
  11. )
  12. print(resp)

Js

  1. const response = await client.security.updateUserProfileData({
  2. uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. labels: {
  4. direction: "west",
  5. },
  6. data: {
  7. app1: {
  8. font: "large",
  9. },
  10. },
  11. });
  12. console.log(response);

コンソール

  1. POST /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0/_data
  2. {
  3. "labels": {
  4. "direction": "west"
  5. },
  6. "data": {
  7. "app1": {
  8. "font": "large"
  9. }
  10. }
  11. }

現在プロファイルを取得すると、統合されたプロファイルデータが返されます。

Python

  1. resp = client.security.get_user_profile(
  2. uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. data="*",
  4. )
  5. print(resp)

Js

  1. const response = await client.security.getUserProfile({
  2. uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  3. data: "*",
  4. });
  5. console.log(response);

コンソール

  1. GET /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0?data=*

コンソール-結果

  1. {
  2. "profiles": [
  3. {
  4. "uid": "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  5. "enabled": true,
  6. "last_synchronized": 1642650651037,
  7. "user": {
  8. "username": "jackrea",
  9. "roles": [
  10. "admin"
  11. ],
  12. "realm_name": "native",
  13. "full_name": "Jack Reacher",
  14. "email": "[email protected]"
  15. },
  16. "labels": {
  17. "direction": "west"
  18. },
  19. "data": {
  20. "app1": {
  21. "theme": "default",
  22. "font": "large"
  23. }
  24. },
  25. "_doc": {
  26. "_primary_term": 88,
  27. "_seq_no": 66
  28. }
  29. }
  30. ]
  31. }