役割の作成または更新 API

ネイティブ領域に役割を追加および更新します。

リクエスト

POST /_security/role/<name>

PUT /_security/role/<name>

前提条件

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

説明

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

パスパラメータ

  • name
  • (文字列) 役割の名前。

リクエストボディ

次のパラメータは、PUT または POST リクエストのボディに指定でき、役割を追加することに関連しています:

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

詳細については、役割の定義を参照してください。

次の例では、my_admin_role という名前の役割を追加します:

Python

  1. resp = client.security.put_role(
  2. name="my_admin_role",
  3. description="Grants full access to all management features within the cluster.",
  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. print(resp)

Js

  1. const response = await client.security.putRole({
  2. name: "my_admin_role",
  3. description:
  4. "Grants full access to all management features within the cluster.",
  5. cluster: ["all"],
  6. indices: [
  7. {
  8. names: ["index1", "index2"],
  9. privileges: ["all"],
  10. field_security: {
  11. grant: ["title", "body"],
  12. },
  13. query: '{"match": {"title": "foo"}}',
  14. },
  15. ],
  16. applications: [
  17. {
  18. application: "myapp",
  19. privileges: ["admin", "read"],
  20. resources: ["*"],
  21. },
  22. ],
  23. run_as: ["other_user"],
  24. metadata: {
  25. version: 1,
  26. },
  27. });
  28. console.log(response);

コンソール

  1. POST /_security/role/my_admin_role
  2. {
  3. "description": "Grants full access to all management features within the cluster.",
  4. "cluster": ["all"],
  5. "indices": [
  6. {
  7. "names": [ "index1", "index2" ],
  8. "privileges": ["all"],
  9. "field_security" : { // optional
  10. "grant" : [ "title", "body" ]
  11. },
  12. "query": "{\"match\": {\"title\": \"foo\"}}" // optional
  13. }
  14. ],
  15. "applications": [
  16. {
  17. "application": "myapp",
  18. "privileges": [ "admin", "read" ],
  19. "resources": [ "*" ]
  20. }
  21. ],
  22. "run_as": [ "other_user" ], // optional
  23. "metadata" : { // optional
  24. "version" : 1
  25. }
  26. }

成功した呼び出しは、役割が作成または更新されたかどうかを示す JSON 構造を返します。

コンソール-結果

  1. {
  2. "role": {
  3. "created": true
  4. }
  5. }
既存の役割が更新されると、created は false に設定されます。

次の例では、JDBC で SQL を実行できる役割を構成します:

Python

  1. resp = client.security.put_role(
  2. name="cli_or_drivers_minimal",
  3. cluster=[
  4. "cluster:monitor/main"
  5. ],
  6. indices=[
  7. {
  8. "names": [
  9. "test"
  10. ],
  11. "privileges": [
  12. "read",
  13. "indices:admin/get"
  14. ]
  15. }
  16. ],
  17. )
  18. print(resp)

Js

  1. const response = await client.security.putRole({
  2. name: "cli_or_drivers_minimal",
  3. cluster: ["cluster:monitor/main"],
  4. indices: [
  5. {
  6. names: ["test"],
  7. privileges: ["read", "indices:admin/get"],
  8. },
  9. ],
  10. });
  11. console.log(response);

コンソール

  1. POST /_security/role/cli_or_drivers_minimal
  2. {
  3. "cluster": ["cluster:monitor/main"],
  4. "indices": [
  5. {
  6. "names": ["test"],
  7. "privileges": ["read", "indices:admin/get"]
  8. }
  9. ]
  10. }

次の例では、リモート クラスターでリモート インデックス権限を持つ役割を構成します:

Python

  1. resp = client.security.put_role(
  2. name="role_with_remote_indices",
  3. remote_indices=[
  4. {
  5. "clusters": [
  6. "my_remote"
  7. ],
  8. "names": [
  9. "logs*"
  10. ],
  11. "privileges": [
  12. "read",
  13. "read_cross_cluster",
  14. "view_index_metadata"
  15. ]
  16. }
  17. ],
  18. )
  19. print(resp)

Js

  1. const response = await client.security.putRole({
  2. name: "role_with_remote_indices",
  3. remote_indices: [
  4. {
  5. clusters: ["my_remote"],
  6. names: ["logs*"],
  7. privileges: ["read", "read_cross_cluster", "view_index_metadata"],
  8. },
  9. ],
  10. });
  11. console.log(response);

コンソール

  1. POST /_security/role/role_with_remote_indices
  2. {
  3. "remote_indices": [
  4. {
  5. "clusters": [ "my_remote" ],
  6. "names": ["logs*"],
  7. "privileges": ["read", "read_cross_cluster", "view_index_metadata"]
  8. }
  9. ]
  10. }
リモート インデックス権限は、エイリアス my_remote のリモート クラスターに適用されます。
権限は、リモート クラスター ( my_remote) でパターン logs* に一致するインデックスに対して付与されます。
logs* に対して my_remote に付与される実際の インデックス権限