RAM 用户管理 API
创建、查询、编辑、重置密码和删除企业 RAM 用户。
RAM用户管理 API
接口参考待联调:账号创建参数已发生变化:当前控制台提交 name、phone、password、authroity 和可选 projects,下面旧例仍使用 account_id/authority。公开管理接口是否同步、身份枚举及权限需后端确认。 以下是待核对的接口资料,不作为可直接接入的正式示例。控制台操作请按对应使用指南完成。
概述
RAM(Resource Access Management)用户管理API允许主账号创建和管理子账号,实现企业内部的权限分级管理。
基础信息
- Base URL:
YOUR_GATEWAY_MANAGEMENT_BASE_URL - 认证方式: AccessKey/SecretKey签名 或 JWT Token
- 请求格式: JSON
- 响应格式: JSON
权限说明
| 操作 | 主账号 | RAM管理员 | RAM成员 |
|---|---|---|---|
| 创建RAM用户 | ✅ | ❌ | ❌ |
| 查看RAM用户列表 | ✅ | ❌ | ❌ |
| 查看RAM用户详情 | ✅ | ❌ | ❌ |
| 修改RAM用户 | ✅ | ❌ | ❌ |
| 删除RAM用户 | ✅ | ❌ | ❌ |
| 重置密码 | ✅ | ❌ | ❌ |
| 修改密码 | ✅ | ❌ | ❌ |
API接口列表
1. 创建RAM用户
创建一个新的RAM子账号。
接口信息
- Path:
/ram/user/create - Method:
POST - 权限: 仅主账号
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| name | string | 是 | RAM用户名称 | test-ram-user |
| password | string | 是 | 登录密码,至少8位 | YOUR_SECURE_PASSWORD |
| account_id | int | 是 | 账号ID | 子账号登陆所需的ID例如: 4673526704, 全局唯一 |
| authority | string | 是 | 权限级别:admin/member | member |
authority说明:
admin: RAM管理员,可以查看所有项目,管理BYOK和角色member: RAM成员,只能访问被授权的项目
请求示例
POST /ram/user/create
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"name": "dev-team-user",
"password": "YOUR_SECURE_PASSWORD",
"account_id": 4673526704,
"authority": "member"
}
响应示例
成功响应 (200 OK):
{
"code": 0,
"data": {},
"msg": "创建成功"
}
错误响应 (403 Forbidden):
{
"code": 403,
"msg": "仅主账号可以访问此功能"
}
Python调用示例
先将>认证文档的 Python 签名实现保存为 signature_helper.py,并安装 requests。本段依赖该文件;签名编码仍须完成本页顶部所述核准。
import requests
import json
from signature_helper import calculate_signature
# 配置
base_url = "http://your-domain.com"
access_key_id = "AK_xxx"
secret_key = "SK_xxx"
# 请求参数
body = {
"name": "dev-team-user",
"password": "YOUR_SECURE_PASSWORD",
"account_id": 988473713,
"authority": "member"
}
# 计算签名
method = "POST"
uri = "/ram/user/create"
timestamp, signature = calculate_signature(method, uri, body, secret_key)
# 发送请求
response = requests.post(
f"{base_url}{uri}",
data=json.dumps(body, separators=(',', ':')).encode('utf-8'),
timeout=30,
headers={
"Content-Type": "application/json",
"X-Access-Key-Id": access_key_id,
"X-Timestamp": timestamp,
"X-Signature": signature
}
)
print(response.json())
2. 获取RAM用户列表
分页查询RAM用户列表。
接口信息
- Path:
/ram/user/list - Method:
POST - 权限: 主账号、RAM管理员
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| account_name | string | 否 | 按用户名筛选(模糊搜索) | xxxxx |
请求示例
POST /ram/user/list
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"account_name": "xxxxxx"
}
响应示例
{
"code": 0,
"data": [
{
"id": 28,
"user_id": 4,
"account_id": 7468125380,
"name": "string",
"status": 1,
"authority": "string"
},
{
"id": 29,
"user_id": 4,
"account_id": 1849937,
"name": "string",
"status": 1,
"authority": "string"
}
],
"msg": "获取子用户列表成功"
}
3. 获取RAM用户详情
根据account_id查询RAM用户详细信息。
接口信息
- Path:
/ram/user/detail - Method:
POST - 权限: 主账号、RAM管理员
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| account_id | integer | 是 | RAM用户的账号ID | 100001 |
请求示例
POST /ram/user/detail
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"account_id": 100001
}
响应示例
{
"code": 0,
"data": {
"id": 16,
"user_id": 4,
"account_id": 4668925877,
"name": "lichaowei_senior",
"status": 1,
"authority": "member",
"ram_user_project_roles": [
{
"ID": 56,
"CreatedAt": "2025-12-03T17:55:43.613148+08:00",
"UpdatedAt": "2025-12-03T17:55:43.613148+08:00",
"RamUserID": 16,
"EnterpriseGatewayProjectID": 5,
"RoleID": 11,
"Role": {
"ID": 11,
"CreatedAt": "2025-11-21T14:46:12.691133+08:00",
"UpdatedAt": "2025-12-17T11:06:05.500465+08:00",
"UserId": 4,
"Name": "有限制管理员",
"Desc": "",
"Auth": "manager",
"TpmLimit": 10,
"RpmLimit": 1000,
"Budget": 20,
"BudgetKind": "daily"
}
},
{
"ID": 91,
"CreatedAt": "2025-12-19T14:09:36.398269+08:00",
"UpdatedAt": "2025-12-19T14:09:36.398269+08:00",
"RamUserID": 16,
"EnterpriseGatewayProjectID": 36,
"RoleID": 11,
"Role": {
"ID": 11,
"CreatedAt": "2025-11-21T14:46:12.691133+08:00",
"UpdatedAt": "2025-12-17T11:06:05.500465+08:00",
"UserId": 4,
"Name": "有限制管理员",
"Desc": "",
"Auth": "manager",
"TpmLimit": 10,
"RpmLimit": 1000,
"Budget": 20,
"BudgetKind": "daily"
}
},
{
"ID": 97,
"CreatedAt": "2025-12-19T15:44:58.443568+08:00",
"UpdatedAt": "2025-12-19T15:44:58.443568+08:00",
"RamUserID": 16,
"EnterpriseGatewayProjectID": 35,
"RoleID": 5,
"Role": {
"ID": 5,
"CreatedAt": "2025-11-20T16:11:20.112738+08:00",
"UpdatedAt": "2025-12-26T10:14:30.316569+08:00",
"UserId": 4,
"Name": "无限制管理员",
"Desc": "",
"Auth": "manager",
"TpmLimit": 20000,
"RpmLimit": 1000,
"Budget": 0,
"BudgetKind": "unlimited"
}
}
]
},
"msg": "获取子用户详情成功"
}
4. 获取当前RAM用户信息
获取当前认证用户(AccessKey对应的用户)的信息。
接口信息
- Path:
/ram/user/info - Method:
POST - 权限: 所有用户
请求参数
无需请求参数(请求体可为空JSON对象 {})
请求示例
POST /ram/user/info
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{}
响应示例
{
"code": 0,
"data": {
"user_id": 1,
"account_type": "sub",
"ram_user_id": 1001,
"ram_username": "dev-team-user",
"authority": "member",
"projects": [
{
"project_id": 1,
"project_name": "虚构示例项目 A",
"role": "viewer"
}
]
},
"msg": "success"
}
5. 修改RAM用户
更新RAM用户的信息。
接口信息
- Path:
/ram/user/update - Method:
POST - 权限: 仅主账号
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| ram_user_id | integer | 是 | RAM用户的ID | 12 |
| name | string | 否 | 新的用户名 | new-ram-user |
| authority | string | 否 | 新的权限级别 | admin/member |
请求示例
POST /ram/user/update
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"authroity": "member",
"name": "string",
"ram_user_id": 0
}
响应示例
{
"code": 0,
"data": {},
"msg": "更新子用户成功"
}
6. 删除RAM用户
删除指定的RAM用户。
接口信息
- Path:
/ram/user/delete - Method:
POST - 权限: 仅主账号
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| account_id | integer | 是 | RAM用户的ID | 16 |
请求示例
POST /ram/user/delete
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"ram_user_id": 16
}
响应示例
{
"code": 0,
"msg": "删除成功"
}
7. 重置RAM用户密码
由主账号重置RAM用户的密码。
接口信息
- Path:
/ram/user/reset_password - Method:
POST - 权限: 仅主账号
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| ram_user_id | integer | 是 | RAM用户的ID | 16 |
| code | string | 是 | 短信验证码 (从接口/v2/auth/sms获取) | 283779 |
| password | string | 是 | 新密码,至少8位 | YOUR_NEW_SECURE_PASSWORD |
请求示例
POST /ram/user/reset_password
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"ram_user_id": 100001,
"code": 287990,
"password": "YOUR_NEW_SECURE_PASSWORD"
}
响应示例
{
"code": 0,
"msg": "密码重置成功"
}
8. 修改RAM用户密码
主账号修改RAM用户的密码(需要提供旧密码)。
接口信息
- Path:
/ram/user/update_password - Method:
POST - 权限: 仅主账号
请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| ram_user_id | integer | 是 | RAM用户的账号ID | 100001 |
| new_password | string | 是 | 新密码,至少8位 | YOUR_NEW_SECURE_PASSWORD |
请求示例
POST /ram/user/update_password
Content-Type: application/json
X-Access-Key-Id: AK_xxx
X-Timestamp: 2024-01-01T12:00:00+00:00
X-Signature: xxx
{
"ram_user_id": 15,
"new_password": "YOUR_NEW_SECURE_PASSWORD"
}
响应示例
{
"code": 0,
"msg": "更新子用户密码成功"
}
完整调用示例
Python完整示例
import requests
import hashlib
import hmac
import base64
import json
from datetime import datetime, timezone
class RAMUserAPI:
def __init__(self, base_url, access_key_id, secret_key):
self.base_url = base_url
self.access_key_id = access_key_id
self.secret_key = secret_key
def _calculate_signature(self, method, uri, body):
# 计算Body哈希
body_bytes = json.dumps(body, separators=(',', ':')).encode('utf-8') if body is not None else b''
body_hash = base64.b64encode(hashlib.sha256(body_bytes).digest()).decode('utf-8')
# 生成时间戳
timestamp = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S%z')
timestamp = timestamp[:-2] + ':' + timestamp[-2:]
# 构造StringToSign
string_to_sign = f"{method}\n{uri}\n{timestamp}\n{body_hash}"
# 计算签名
signature = base64.b64encode(
hmac.new(
self.secret_key.encode('utf-8'),
string_to_sign.encode('utf-8'),
hashlib.sha256
).digest()
).decode('utf-8')
return timestamp, signature
def _request(self, method, uri, body=None):
timestamp, signature = self._calculate_signature(method, uri, body)
response = requests.request(
method=method,
url=f"{self.base_url}{uri}",
data=json.dumps(body, separators=(',', ':')).encode('utf-8') if body is not None else None,
timeout=30,
headers={
"Content-Type": "application/json",
"X-Access-Key-Id": self.access_key_id,
"X-Timestamp": timestamp,
"X-Signature": signature
}
)
return response.json()
def create_ram_user(self, name, password, authority, desc=""):
"""创建RAM用户"""
return self._request("POST", "/ram/user/create", {
"name": name,
"password": password,
"account_id": account_id,
"authority": authority
})
def list_ram_users(self, page=1, page_size=10, **filters):
"""获取RAM用户列表"""
body = {"page": page, "pageSize": page_size}
body.update(filters)
return self._request("POST", "/ram/user/list", body)
def get_ram_user_detail(self, account_id):
"""获取RAM用户详情"""
return self._request("POST", "/ram/user/detail", {
"ram_user_id": ram_user_id
})
def get_current_user_info(self):
"""获取当前用户信息"""
return self._request("POST", "/ram/user/info", {})
def update_ram_user(self, account_id, **updates):
"""更新RAM用户"""
body = {
"ram_user_id": ram_user_id,
"authroity" : authroity,
"name" : name
}
body.update(updates)
return self._request("POST", "/ram/user/update", body)
def delete_ram_user(self, account_id):
"""删除RAM用户"""
return self._request("POST", "/ram/user/delete", {
"ram_user_id": ram_user_id
})
def reset_password(self, account_id, new_password):
"""重置密码"""
return self._request("POST", "/ram/user/reset_password", {
"ram_user_id": ram_user_id,
"new_password": new_password
})
# 使用示例
if __name__ == "__main__":
api = RAMUserAPI(
base_url="YOUR_GATEWAY_MANAGEMENT_BASE_URL",
access_key_id="AK_xxx",
secret_key="SK_xxx"
)
# 1. 创建RAM用户
result = api.create_ram_user(
name="test-user",
password="YOUR_SECURE_PASSWORD",
authority="member",
desc="测试用户"
)
print("创建RAM用户:", result)
# 2. 获取RAM用户列表
result = api.list_ram_users(page=1, page_size=10, authority="member")
print("RAM用户列表:", result)
# 3. 获取当前用户信息
result = api.get_current_user_info()
print("当前用户信息:", result)
错误码说明
| 错误码 | 说明 | 解决方法 |
|---|---|---|
| 400 | 参数错误 | 检查请求参数是否符合要求 |
| 401 | 未认证 | 检查AccessKey和签名是否正确 |
| 403 | 权限不足 | 确认账号具有相应权限 |
| 404 | 用户不存在 | 检查account_id是否正确 |
| 409 | 用户名已存在 | 更换用户名 |
| 500 | 服务器错误 | 联系技术支持 |
注意事项
- 用户名唯一性: RAM用户名在主账号下必须唯一
- 密码强度: 密码至少8位,建议包含大小写字母、数字和特殊字符
- 权限继承: RAM用户的权限不能超过创建它的主账号
- 状态管理: 禁用RAM用户后,其AccessKey将无法使用
- 删除影响: 删除RAM用户会同时删除其所有AccessKey和项目角色绑定
相关文档
示例运行范围
完整客户端示例需要 Python 3 与 requests;JavaScript 客户端需要 Node.js 与 axios。后续业务片段复用前文创建的客户端实例,不是独立脚本。执行创建、修改或删除前,仅使用获准的测试环境及测试数据。这里的本地语法检查不代表接口联调通过。