记忆库入站身份认证
记忆库作为智能体记忆数据的托管存储服务,为保障数据安全,记忆库需要对每一个到达数据面的请求进行身份验证,确保请求来自可信的调用方,并根据调用方身份进行授权控制。
支持的认证方式
记忆库支持以下两种入站身份认证方式,在创建记忆库时二选一:
| 认证方式 | 认证凭据 | 鉴权能力 | 适用用户 |
|---|---|---|---|
| IAM 认证 | IAM临时凭证(AK/SK签名认证) | 提供细粒度鉴权能力,支持actor级和session级数据隔离 | 企业级用户 |
| API Key 认证 | API Key 字符串 | 仅提供身份认证能力(无鉴权) | 个人用户、快速验证场景 |
IAM认证
IAM认证将华为云IAM身份配置为入站身份认证,通过IAM临时凭证(AK/SK)验证调用者身份。IAM认证不仅提供身份验证能力,还支持通过IAM策略进行细粒度鉴权,实现数据级隔离控制。
使用IAM认证方式访问记忆库数据面接口时,调用方需携带IAM签名信息(AK/SK 签名认证):
POST /v1/spaces/{space_id}/memories HTTP/1.1
Host: memory.cn-southwest-2.huaweicloud-agentarts.com
Content-Type: application/json
X-Sdk-Date: 20260909T033655Z
Authorization: V11-HMAC-SHA256 Access={AK}, SignedHeaders=content-type;host;x-sdk-date, Signature=...
X-Security-Token: {SecurityToken}
{"content": "用户偏好信息"} V11-HMAC-SHA256签名规范
记忆库采用华为云API网关的V11-HMAC-SHA256签名算法,与标准IAM签名有以下关键差异:
| 特性 | 说明 |
|---|---|
| 密钥派生机制(HKDF) | 结合AK + SK + 请求日期 + 区域(例如:cn-southwest-2)+ 服务(agentarts)动态派生加密密钥,安全性高于普通签名算法。 |
| Body 不参与签名 | 由于智能体交互的请求Body可能包含较长文本,约定在请求头中设置X-Sdk-Content-Sha256: UNSIGNED-PAYLOAD,通知网关跳过Body哈希计算,提升性能。 |
| 时间戳防重放 | 请求头必须包含X-Sdk-Date(ISO 8601 UTC格式),网关校验与当前时间偏差需小于15分钟,防止请求被重放攻击。 |
签名器初始化代码示例:
from apig_sdk import signer
sig = signer.Signer(
algorithm="V11-HMAC-SHA256", # 必须指定 V11 版本
region_id="cn-southwest-2" # 区域id,贵阳一区域则填写为"cn-southwest-2"
)
sig.Key = os.getenv("HUAWEICLOUD_SDK_AK")
sig.Secret = os.getenv("HUAWEICLOUD_SDK_SK") 构造签名请求的代码示例:
import os
import json
import requests
from apig_sdk import signer
API_URL = "https://memory.cn-southwest-2.huaweicloud-agentarts.com/v1/spaces/{space_id}/memories"
REGION_ID = "cn-southwest-2"
def build_signed_request(sig, api_url, payload):
method = "POST"
body = json.dumps(payload, ensure_ascii=False)
headers = {
"Content-Type": "application/json",
"X-Sdk-Content-Sha256": "UNSIGNED-PAYLOAD", # Body 免签名
}
req = signer.HttpRequest(method, api_url, headers, body)
sig.Sign(req) # 自动填充 X-Sdk-Date 和 Authorization
return req
# 初始化 V11 签名器
sig = signer.Signer(algorithm="V11-HMAC-SHA256", region_id=REGION_ID)
sig.Key = os.getenv("HUAWEICLOUD_SDK_AK")
sig.Secret = os.getenv("HUAWEICLOUD_SDK_SK")
# 构造并发送签名请求
payload = {"content": "用户偏好信息"}
req = build_signed_request(sig, API_URL, payload)
resp = requests.request(
method=req.method,
url=f"{req.scheme}://{req.host}{req.uri}",
headers=req.headers,
data=req.body,
timeout=(5, 60)
)
- 使用V11签名前,需先从签名指南文档下载Python SDK(apig_sdk包),其中signer.py为核心签名逻辑。
- 文档中下载Python SDK,并在本地解压。签名指南文档中的其他内容本案例中可不用关注。 图1 获取SDK
- 解压后的文件目录结构如下:
ApiGateway-python-sdk/ ← 根目录(解压出来的文件夹) │ ├── apig_sdk/ ← 【核心签名库,不要动!】 │ ├── __init__.py ← 包的入口标识文件 │ └── signer.py ← 签名核心代码(所有签名逻辑都在这里) │ ├── main.py ← 【您要改的文件】调用示例 │ └── licenses/ ← 开源许可证文件夹(不用管) └── license-requests ← requests库的许可证说明图2 目录结构
- 文档中下载Python SDK,并在本地解压。签名指南文档中的其他内容本案例中可不用关注。
- AK/SK可通过控制台“我的凭证>访问密钥”获取,并配置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
- 在Python SDK所在文件夹的地址栏输入cmd打开命令窗口后,执行以下命令设置临时环境变量。
set HUAWEICLOUD_SDK_AK=您的Access Key set HUAWEICLOUD_SDK_SK=您的Secret Key
- 通过以下命令检查环境变量是否生效。
echo %HUAWEICLOUD_SDK_AK% echo %HUAWEICLOUD_SDK_SK%
- 在Python SDK所在文件夹的地址栏输入cmd打开命令窗口后,执行以下命令设置临时环境变量。
API Key认证
API Key认证是一种轻量级的认证方式。调用方在请求头中携带API Key字符串即可完成身份认证。关于API KEY的获取请参考如何获取记忆库ID和API Key。
请求格式:
POST /v1/spaces/{space_id}/memories HTTP/1.1
Host: memory.cn-southwest-2.huaweicloud-agentarts.com
Content-Type: application/json
Authorization: Bearer {您的API Key}
{"content": "用户偏好信息"} 认证方式升级
记忆库支持从API Key认证单向升级为IAM认证,升级后原有API Key将在宽限期结束后失效。
升级规则
- 单向升级:仅支持从API Key认证升级为IAM认证,升级后不可修改。
- 宽限期结束:若未开启立即失效,7天宽限期结束后API Key自动失效,所有请求需通过IAM认证访问。
- 升级后不可逆:认证方式升级为 IAM后,不支持切换回API Key认证。
升级后请及时更新相关SDK和接口的认证参数,否则会导致调用失败及数据接口认证失败。
升级操作
- 登录AgentArts智能体平台。
- 在左侧导航栏选择“托管与运行 > 记忆库”,进入记忆库界面。
- 单击记忆库名称,进入基本信息页面。
- 在“入站身份认证”区域,当前显示为“API Key”,单击右侧的编辑图标
。 图3 升级为IAM认证
- 在弹出的“升级为IAM认证”对话框中,配置“API Key 立即失效”开关。
- 开启:原API Key在升级完成时立即失效。
- 关闭(默认):API Key认证将在7天后自动失效,宽限期内API Key仍可正常使用,但如果调用了重置API接口则API Key会立刻失效。
- 在确认输入框中输入“CONFIRM”(可单击“一键输入”快速填入),然后单击“确定”。
- 如果未开启“API Key 立即失效”,请务必在7天宽限期内将所有调用方切换为IAM认证方式,宽限期结束后API Key将自动失效。
- 升级后认证方式不可修改,请确认后再进行操作。