ロールの一括作成または更新API

この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。

ネイティブ領域でのロールの一括追加と更新。

リクエスト

POST /_security/role/

前提条件

  • このAPIを使用するには、少なくともmanage_securityクラスター権限を持っている必要があります。

説明

ロール管理APIは、ファイルベースのロール管理を使用するよりも、ロールを管理するための一般的に推奨される方法です。一括作成または更新ロールAPIは、ロールファイルで定義されたロールを更新することはできません。

パスパラメータ

リクエストボディ

以下のパラメータは、POSTリクエストのボディに指定でき、ロールのセットを追加することに関連しています:

  • roles
  • (オブジェクト) ロールマップにロール名として追加するロール。

  • <role_name> (必須)

  • (文字列) ロール名。
  • applications
  • (リスト) アプリケーション権限エントリのリスト。
    • application (必須)
    • (文字列) このエントリが適用されるアプリケーションの名前。
    • privileges
    • (リスト) 各要素がアプリケーション権限またはアクションの名前である文字列のリスト。
    • resources
    • (リスト) 権限が適用されるリソースのリスト。
  • cluster
  • (リスト) クラスター権限のリスト。これらの権限は、このロールを持つユーザーが実行できるクラスターレベルのアクションを定義します。
  • global
  • (オブジェクト) グローバル権限を定義するオブジェクト。グローバル権限は、リクエストを認識するクラスター権限の一形態です。グローバル権限のサポートは、現在アプリケーション権限の管理に限定されています。
  • indices
  • (リスト) インデックス権限エントリのリスト。
    • field_security
    • (オブジェクト) ロールの所有者が読み取りアクセスを持つドキュメントフィールド。詳細については、フィールドおよびドキュメントレベルのセキュリティの設定を参照してください。
    • names (必須)
    • (リスト) このエントリの権限が適用されるインデックス(またはインデックス名パターン)のリスト。
    • privileges(必須)
    • (リスト) 指定されたインデックスに対してロールの所有者が持つインデックスレベルの権限。
    • query
    • ロールの所有者が読み取りアクセスを持つドキュメントを定義する検索クエリ。指定されたインデックス内のドキュメントは、ロールの所有者がアクセスできるようにするために、このクエリに一致する必要があります。
  • metadata
  • (オブジェクト) オプションのメタデータ。metadataオブジェクト内では、_で始まるキーはシステム使用のために予約されています。
  • run_as
  • (リスト) このロールの所有者がなりすますことができるユーザーのリスト。詳細については、他のユーザーの代理でリクエストを送信するを参照してください。
  • remote_indices
  • [ベータ] この機能はベータ版であり、変更される可能性があります。設計とコードは公式GA機能よりも成熟しておらず、保証なしでそのまま提供されています。ベータ機能は公式GA機能のサポートSLAの対象ではありません。 (リスト) リモートインデックス権限エントリのリスト。
    リモートインデックスは、APIキーベースモデルで構成されたリモートクラスターに対して有効です。 証明書ベースモデルで構成されたリモートクラスターには影響しません。
    • clusters (必須)
    • (リスト) このエントリの権限が適用されるクラスターエイリアスのリスト。
    • field_security
    • (オブジェクト) ロールの所有者が読み取りアクセスを持つドキュメントフィールド。詳細については、フィールドおよびドキュメントレベルのセキュリティの設定を参照してください。
    • names (必須)
    • (リスト) リモートクラスター(clustersで指定)に対してこのエントリの権限が適用されるインデックス(またはインデックス名パターン)のリスト。
    • privileges(必須)
    • (リスト) 指定されたインデックスに対してロールの所有者が持つインデックスレベルの権限。
    • query
    • ロールの所有者が読み取りアクセスを持つドキュメントを定義する検索クエリ。指定されたインデックス内のドキュメントは、ロールの所有者がアクセスできるようにするために、このクエリに一致する必要があります。

詳細については、ロールの定義を参照してください。

以下の例では、my_admin_roleおよびmy_user_roleというロールを追加します:

Python

  1. resp = client.security.bulk_put_role(
  2. roles={
  3. "my_admin_role": {
  4. "cluster": [
  5. "all"
  6. ],
  7. "indices": [
  8. {
  9. "names": [
  10. "index1",
  11. "index2"
  12. ],
  13. "privileges": [
  14. "all"
  15. ],
  16. "field_security": {
  17. "grant": [
  18. "title",
  19. "body"
  20. ]
  21. },
  22. "query": "{\"match\": {\"title\": \"foo\"}}"
  23. }
  24. ],
  25. "applications": [
  26. {
  27. "application": "myapp",
  28. "privileges": [
  29. "admin",
  30. "read"
  31. ],
  32. "resources": [
  33. "*"
  34. ]
  35. }
  36. ],
  37. "run_as": [
  38. "other_user"
  39. ],
  40. "metadata": {
  41. "version": 1
  42. }
  43. },
  44. "my_user_role": {
  45. "cluster": [
  46. "all"
  47. ],
  48. "indices": [
  49. {
  50. "names": [
  51. "index1"
  52. ],
  53. "privileges": [
  54. "read"
  55. ],
  56. "field_security": {
  57. "grant": [
  58. "title",
  59. "body"
  60. ]
  61. },
  62. "query": "{\"match\": {\"title\": \"foo\"}}"
  63. }
  64. ],
  65. "applications": [
  66. {
  67. "application": "myapp",
  68. "privileges": [
  69. "admin",
  70. "read"
  71. ],
  72. "resources": [
  73. "*"
  74. ]
  75. }
  76. ],
  77. "run_as": [
  78. "other_user"
  79. ],
  80. "metadata": {
  81. "version": 1
  82. }
  83. }
  84. },
  85. )
  86. print(resp)

Js

  1. const response = await client.security.bulkPutRole({
  2. roles: {
  3. my_admin_role: {
  4. cluster: ["all"],
  5. indices: [
  6. {
  7. names: ["index1", "index2"],
  8. privileges: ["all"],
  9. field_security: {
  10. grant: ["title", "body"],
  11. },
  12. query: '{"match": {"title": "foo"}}',
  13. },
  14. ],
  15. applications: [
  16. {
  17. application: "myapp",
  18. privileges: ["admin", "read"],
  19. resources: ["*"],
  20. },
  21. ],
  22. run_as: ["other_user"],
  23. metadata: {
  24. version: 1,
  25. },
  26. },
  27. my_user_role: {
  28. cluster: ["all"],
  29. indices: [
  30. {
  31. names: ["index1"],
  32. privileges: ["read"],
  33. field_security: {
  34. grant: ["title", "body"],
  35. },
  36. query: '{"match": {"title": "foo"}}',
  37. },
  38. ],
  39. applications: [
  40. {
  41. application: "myapp",
  42. privileges: ["admin", "read"],
  43. resources: ["*"],
  44. },
  45. ],
  46. run_as: ["other_user"],
  47. metadata: {
  48. version: 1,
  49. },
  50. },
  51. },
  52. });
  53. console.log(response);

コンソール

  1. POST /_security/role
  2. {
  3. "roles": {
  4. "my_admin_role": {
  5. "cluster": [
  6. "all"
  7. ],
  8. "indices": [
  9. {
  10. "names": [
  11. "index1",
  12. "index2"
  13. ],
  14. "privileges": [
  15. "all"
  16. ],
  17. "field_security": {
  18. "grant": [
  19. "title",
  20. "body"
  21. ]
  22. },
  23. "query": "{\"match\": {\"title\": \"foo\"}}"
  24. }
  25. ],
  26. "applications": [
  27. {
  28. "application": "myapp",
  29. "privileges": [
  30. "admin",
  31. "read"
  32. ],
  33. "resources": [
  34. "*"
  35. ]
  36. }
  37. ],
  38. "run_as": [
  39. "other_user"
  40. ],
  41. "metadata": {
  42. "version": 1
  43. }
  44. },
  45. "my_user_role": {
  46. "cluster": [
  47. "all"
  48. ],
  49. "indices": [
  50. {
  51. "names": [
  52. "index1"
  53. ],
  54. "privileges": [
  55. "read"
  56. ],
  57. "field_security": {
  58. "grant": [
  59. "title",
  60. "body"
  61. ]
  62. },
  63. "query": "{\"match\": {\"title\": \"foo\"}}"
  64. }
  65. ],
  66. "applications": [
  67. {
  68. "application": "myapp",
  69. "privileges": [
  70. "admin",
  71. "read"
  72. ],
  73. "resources": [
  74. "*"
  75. ]
  76. }
  77. ],
  78. "run_as": [
  79. "other_user"
  80. ],
  81. "metadata": {
  82. "version": 1
  83. }
  84. }
  85. }
  86. }

成功した呼び出しは、ロールが作成されたか、更新されたか、変更がなかったかを示すJSON構造を返します。

コンソール-結果

  1. {
  2. "created": [
  3. "my_admin_role",
  4. "my_user_role"
  5. ]
  6. }
結果タイプ、createdupdatednooperrorsのいずれか。
作成されたロールのリスト。

エラーは各ロールの作成または更新ごとに個別に処理されるため、APIは部分的な成功を許可します。

以下のクエリは、権限bad_cluster_privilegeが存在しないためmy_admin_roleに対してエラーをスローしますが、my_user_roleには成功します。

Python

  1. resp = client.security.bulk_put_role(
  2. roles={
  3. "my_admin_role": {
  4. "cluster": [
  5. "bad_cluster_privilege"
  6. ],
  7. "indices": [
  8. {
  9. "names": [
  10. "index1",
  11. "index2"
  12. ],
  13. "privileges": [
  14. "all"
  15. ],
  16. "field_security": {
  17. "grant": [
  18. "title",
  19. "body"
  20. ]
  21. },
  22. "query": "{\"match\": {\"title\": \"foo\"}}"
  23. }
  24. ],
  25. "applications": [
  26. {
  27. "application": "myapp",
  28. "privileges": [
  29. "admin",
  30. "read"
  31. ],
  32. "resources": [
  33. "*"
  34. ]
  35. }
  36. ],
  37. "run_as": [
  38. "other_user"
  39. ],
  40. "metadata": {
  41. "version": 1
  42. }
  43. },
  44. "my_user_role": {
  45. "cluster": [
  46. "all"
  47. ],
  48. "indices": [
  49. {
  50. "names": [
  51. "index1"
  52. ],
  53. "privileges": [
  54. "read"
  55. ],
  56. "field_security": {
  57. "grant": [
  58. "title",
  59. "body"
  60. ]
  61. },
  62. "query": "{\"match\": {\"title\": \"foo\"}}"
  63. }
  64. ],
  65. "applications": [
  66. {
  67. "application": "myapp",
  68. "privileges": [
  69. "admin",
  70. "read"
  71. ],
  72. "resources": [
  73. "*"
  74. ]
  75. }
  76. ],
  77. "run_as": [
  78. "other_user"
  79. ],
  80. "metadata": {
  81. "version": 1
  82. }
  83. }
  84. },
  85. )
  86. print(resp)

Js

  1. const response = await client.security.bulkPutRole({
  2. roles: {
  3. my_admin_role: {
  4. cluster: ["bad_cluster_privilege"],
  5. indices: [
  6. {
  7. names: ["index1", "index2"],
  8. privileges: ["all"],
  9. field_security: {
  10. grant: ["title", "body"],
  11. },
  12. query: '{"match": {"title": "foo"}}',
  13. },
  14. ],
  15. applications: [
  16. {
  17. application: "myapp",
  18. privileges: ["admin", "read"],
  19. resources: ["*"],
  20. },
  21. ],
  22. run_as: ["other_user"],
  23. metadata: {
  24. version: 1,
  25. },
  26. },
  27. my_user_role: {
  28. cluster: ["all"],
  29. indices: [
  30. {
  31. names: ["index1"],
  32. privileges: ["read"],
  33. field_security: {
  34. grant: ["title", "body"],
  35. },
  36. query: '{"match": {"title": "foo"}}',
  37. },
  38. ],
  39. applications: [
  40. {
  41. application: "myapp",
  42. privileges: ["admin", "read"],
  43. resources: ["*"],
  44. },
  45. ],
  46. run_as: ["other_user"],
  47. metadata: {
  48. version: 1,
  49. },
  50. },
  51. },
  52. });
  53. console.log(response);

コンソール

  1. POST /_security/role
  2. {
  3. "roles": {
  4. "my_admin_role": {
  5. "cluster": [
  6. "bad_cluster_privilege"
  7. ],
  8. "indices": [
  9. {
  10. "names": [
  11. "index1",
  12. "index2"
  13. ],
  14. "privileges": ["all"],
  15. "field_security": {
  16. "grant": [
  17. "title",
  18. "body"
  19. ]
  20. },
  21. "query": "{\"match\": {\"title\": \"foo\"}}"
  22. }
  23. ],
  24. "applications": [
  25. {
  26. "application": "myapp",
  27. "privileges": [
  28. "admin",
  29. "read"
  30. ],
  31. "resources": [
  32. "*"
  33. ]
  34. }
  35. ],
  36. "run_as": [
  37. "other_user"
  38. ],
  39. "metadata": {
  40. "version": 1
  41. }
  42. },
  43. "my_user_role": {
  44. "cluster": [
  45. "all"
  46. ],
  47. "indices": [
  48. {
  49. "names": [
  50. "index1"
  51. ],
  52. "privileges": [
  53. "read"
  54. ],
  55. "field_security": {
  56. "grant": [
  57. "title",
  58. "body"
  59. ]
  60. },
  61. "query": "{\"match\": {\"title\": \"foo\"}}"
  62. }
  63. ],
  64. "applications": [
  65. {
  66. "application": "myapp",
  67. "privileges": [
  68. "admin",
  69. "read"
  70. ],
  71. "resources": [
  72. "*"
  73. ]
  74. }
  75. ],
  76. "run_as": [
  77. "other_user"
  78. ],
  79. "metadata": {
  80. "version": 1
  81. }
  82. }
  83. }
  84. }

結果はerrorsフィールドがtrueに設定され、my_admin_roleの更新に対するエラーを保持します。

コンソール-結果

  1. {
  2. "created": [
  3. "my_user_role"
  4. ],
  5. "errors": {
  6. "count": 1,
  7. "details": {
  8. "my_admin_role": {
  9. "type": "action_request_validation_exception",
  10. "reason": "Validation Failed: 1: unknown cluster privilege [bad_cluster_privilege]. a privilege must be either one of the predefined cluster privilege names [manage_own_api_key,none,cancel_task,cross_cluster_replication,cross_cluster_search,delegate_pki,grant_api_key,manage_autoscaling,manage_index_templates,manage_logstash_pipelines,manage_oidc,manage_saml,manage_search_application,manage_search_query_rules,manage_search_synonyms,manage_service_account,manage_token,manage_user_profile,monitor_connector,monitor_data_stream_global_retention,monitor_enrich,monitor_inference,monitor_ml,monitor_rollup,monitor_snapshot,monitor_text_structure,monitor_watcher,post_behavioral_analytics_event,read_ccr,read_connector_secrets,read_fleet_secrets,read_ilm,read_pipeline,read_security,read_slm,transport_client,write_connector_secrets,write_fleet_secrets,create_snapshot,manage_behavioral_analytics,manage_ccr,manage_connector,manage_data_stream_global_retention,manage_enrich,manage_ilm,manage_inference,manage_ml,manage_rollup,manage_slm,manage_watcher,monitor_data_frame_transforms,monitor_transform,manage_api_key,manage_ingest_pipelines,manage_pipeline,manage_data_frame_transforms,manage_transform,manage_security,monitor,manage,all] or a pattern over one of the available cluster actions;"
  11. }
  12. }
  13. }
  14. }
成功裏に作成されたロール。
発生したエラー。
エラーが発生したロールリクエストの数。
ロール名によるエラー。