Create or update roles

POST /_security/role/{name}

The role management APIs are generally the preferred way to manage roles in the native realm, rather than using file-based role management. The create or update roles API cannot update roles that are defined in roles files. File-based role management is not available in Elastic Serverless.

Path parameters

  • name string Required

    The name of the role that is being created or updated. On Elasticsearch Serverless, the role name must begin with a letter or digit and can only contain letters, digits and the characters '_', '-', and '.'. Each role must have a unique name, as this will serve as the identifier for that role.

Query parameters

  • refresh string

    If true (the default) then refresh the affected shards to make this operation visible to search, if wait_for then wait for a refresh to make this operation visible to search, if false then do nothing with refreshes.

    Values are true, false, or wait_for.

application/json

Body Required

  • applications array[object]

    A list of application privilege entries.

    Hide applications attributes Show applications attributes object
    • application string Required

      The name of the application to which this entry applies.

    • privileges array[string] Required

      A list of strings, where each element is the name of an application privilege or action.

    • resources array[string] Required

      A list resources to which the privileges are applied.

  • cluster array[string]

    A list of cluster privileges. These privileges define the cluster-level actions for users with this role.

  • global object

    An object defining global privileges. A global privilege is a form of cluster privilege that is request-aware. Support for global privileges is currently limited to the management of application privileges.

    Hide global attribute Show global attribute object
    • * object Additional properties

      Additional properties are allowed.

  • indices array[object]

    A list of indices permissions entries.

    Hide indices attributes Show indices attributes object
    • Additional properties are allowed.

      Hide field_security attributes Show field_security attributes object
    • names array[string] Required

      A list of indices (or index name patterns) to which the permissions in this entry apply.

    • privileges array[string] Required

      The index level privileges that owners of the role have on the specified indices.

    • query string | object

      While creating or updating a role you can provide either a JSON structure or a string to the API. However, the response provided by Elasticsearch will only be string with a json-as-text content.

      Since this is embedded in IndicesPrivileges, the same structure is used for clarity in both contexts.

    • Set to true if using wildcard or regular expressions for patterns that cover restricted indices. Implicitly, restricted indices have limited privileges that can cause pattern tests to fail. If restricted indices are explicitly included in the names list, Elasticsearch checks privileges against these indices regardless of the value set for allow_restricted_indices.

  • remote_indices array[object]

    A list of remote indices permissions entries.

    Hide remote_indices attributes Show remote_indices attributes object
    • clusters string | array[string] Required
    • Additional properties are allowed.

      Hide field_security attributes Show field_security attributes object
    • names array[string] Required

      A list of indices (or index name patterns) to which the permissions in this entry apply.

    • privileges array[string] Required

      The index level privileges that owners of the role have on the specified indices.

    • query string | object

      While creating or updating a role you can provide either a JSON structure or a string to the API. However, the response provided by Elasticsearch will only be string with a json-as-text content.

      Since this is embedded in IndicesPrivileges, the same structure is used for clarity in both contexts.

    • Set to true if using wildcard or regular expressions for patterns that cover restricted indices. Implicitly, restricted indices have limited privileges that can cause pattern tests to fail. If restricted indices are explicitly included in the names list, Elasticsearch checks privileges against these indices regardless of the value set for allow_restricted_indices.

  • metadata object
    Hide metadata attribute Show metadata attribute object
    • * object Additional properties

      Additional properties are allowed.

  • run_as array[string]

    A list of users that the owners of this role can impersonate. Note: in Serverless, the run-as feature is disabled. For API compatibility, you can still specify an empty run_as field, but a non-empty list will be rejected.

  • Optional description of the role descriptor

  • Indicates roles that might be incompatible with the current cluster license, specifically roles with document and field level security. When the cluster license doesn’t allow certain features for a given role, this parameter is updated dynamically to list the incompatible features. If enabled is false, the role is ignored, but is still listed in the response from the authenticate API.

    Hide transient_metadata attribute Show transient_metadata attribute object
    • * object Additional properties

      Additional properties are allowed.

Responses

  • 200 application/json
    Hide response attribute Show response attribute object
    • role object Required

      Additional properties are allowed.

      Hide role attribute Show role attribute object
POST /_security/role/{name}
curl \
 -X POST http://api.example.com/_security/role/{name} \
 -H "Content-Type: application/json" \
 -d '{"applications":[{"application":"string","privileges":["string"],"resources":["string"]}],"cluster":["string"],"global":{"additionalProperty1":{},"additionalProperty2":{}},"indices":[{"field_security":{"except":"string","grant":"string"},"names":["string"],"privileges":["string"],"":"string","allow_restricted_indices":true}],"remote_indices":[{"clusters":"string","field_security":{"except":"string","grant":"string"},"names":["string"],"privileges":["string"],"":"string","allow_restricted_indices":true}],"metadata":{"additionalProperty1":{},"additionalProperty2":{}},"run_as":["string"],"description":"string","transient_metadata":{"additionalProperty1":{},"additionalProperty2":{}}}'
Request examples
{
  "applications": [
    {
      "application": "string",
      "privileges": [
        "string"
      ],
      "resources": [
        "string"
      ]
    }
  ],
  "cluster": [
    "string"
  ],
  "global": {
    "additionalProperty1": {},
    "additionalProperty2": {}
  },
  "indices": [
    {
      "field_security": {
        "except": "string",
        "grant": "string"
      },
      "names": [
        "string"
      ],
      "privileges": [
        "string"
      ],
      "": "string",
      "allow_restricted_indices": true
    }
  ],
  "remote_indices": [
    {
      "clusters": "string",
      "field_security": {
        "except": "string",
        "grant": "string"
      },
      "names": [
        "string"
      ],
      "privileges": [
        "string"
      ],
      "": "string",
      "allow_restricted_indices": true
    }
  ],
  "metadata": {
    "additionalProperty1": {},
    "additionalProperty2": {}
  },
  "run_as": [
    "string"
  ],
  "description": "string",
  "transient_metadata": {
    "additionalProperty1": {},
    "additionalProperty2": {}
  }
}
Response examples (200)
{
  "role": {
    "created": true
  }
}