You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用elasticsearch-py客户端在AWS环境中创建Elasticsearch用户与角色

解决方案

方案1:直接使用elasticsearch-py客户端内置的原始请求方法

你初始化的elasticsearch-py客户端本身就支持发送任意自定义路径的原始请求,不需要调用封装好的索引相关接口,直接使用perform_request方法即可,示例代码如下:

# 你的角色定义载荷
role_payload = {
    "cluster_permissions" : [
      "indices_monitor",
    ],
    "index_permissions" : [
      {
        "index_patterns" : [
          "*"
        ],
        "dls" : "",
        "fls" : [ ],
        "masked_fields" : [ ],
        "allowed_actions" : [
          "read",
          "indices:monitor/stats"
        ]
      }
    ],
    "tenant_permissions" : [
      {
        "tenant_patterns" : [
          "human_resources"
        ],
        "allowed_actions" : [
          "kibana_all_read"
        ]
      }
    ]
}

# 调用perform_request发送PUT请求
response = elasticsearch.perform_request(
    "PUT",
    "/_opendistro/_security/api/roles/jesperancinha-role",
    body=role_payload
)
# 打印返回结果确认创建成功
print(response)

注意:如果你使用的是较新版本的AWS OpenSearch服务,安全API路径可能已变更为/_plugins/_security/api/roles/jesperancinha-role,如果原路径返回404可以替换路径重试。

方案2:直接使用requests库配合现有AWS4Auth鉴权发送请求

如果你不想依赖elasticsearch-py的封装,也可以直接用你已经构造好的awsauth鉴权实例,通过requests直接发送HTTP请求,代码更直观:

import requests

role_payload = {
    # 同上的角色定义
}

url = f"https://{self._host}/_opendistro/_security/api/roles/jesperancinha-role"
response = requests.put(
    url,
    auth=awsauth,
    json=role_payload,
    verify=True
)
# 检查请求状态
print(response.status_code)
print(response.json())

两种方案都可以满足你的需求,不需要额外调整你已经完成的AWS鉴权逻辑。


内容的提问来源于stack exchange,提问作者João Esperancinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:54:01