Skip to content

Commit 1e36abd

Browse files
committed
add Readme and fix pre-commit
1 parent df55890 commit 1e36abd

File tree

3 files changed

+345
-6
lines changed

3 files changed

+345
-6
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
ADK_OAUTH2_USERPOOL_UID=940e2171-b2c3-48f9-94b9-4c95da5640c2
2-
ADK_OAUTH2_CLIENT_ID=c8d3b6d5-eaaf-4ce0-b334-d851d0789488
1+
ADK_OAUTH2_USERPOOL_UID=
2+
ADK_OAUTH2_CLIENT_ID=
33
ADK_OAUTH2_CLIENT_SECRET=
4-
ADK_OAUTH2_CALLBACK_URL=http://127.0.0.1:8000/api/v1/oauth2callback
4+
ADK_OAUTH2_CALLBACK_URL=
55
ADK_OAUTH2_SCOPE="openid profile"
6-
RUNTIME_IAM_ROLE_TRN=trn:iam::2114543432:role/identity_agentkit_workshop
6+
RUNTIME_IAM_ROLE_TRN=
77
VOLCENGINE_ACCESS_KEY=
88
VOLCENGINE_SECRET_KEY=
9-
DATABASE_VIKING_BASE_URL=https://sd4vv7l4140fa57o3abng.apigateway-cn-beijing.volceapi.com
10-
ADAPTIVE_PERMISSION_SERVICE_KEY=
9+
DATABASE_VIKING_BASE_URL=
10+
ADAPTIVE_PERMISSION_SERVICE_KEY=
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# See https://pre-commit.com for more information
2+
# See https://pre-commit.com/hooks.html for more hooks
3+
repos:
4+
- repo: https://github.com/pre-commit/pre-commit-hooks
5+
rev: v3.2.0
6+
hooks:
7+
- id: trailing-whitespace
8+
- id: end-of-file-fixer
9+
- id: check-yaml
10+
- id: check-added-large-files
Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
## 📖  智能体身份实验手册(README)
2+
3+
---
4+
5+
### 1️⃣ 项目简介
6+
- **目标**:通过一系列动手实验,熟悉火山智能体身份(Agent Identity)平台的 **身份认证、授权、凭证托管、细粒度权限** 等核心能力。
7+
- **适用对象**:对智能体安全感兴趣的开发者。
8+
9+
---
10+
11+
### 2️⃣ 前置准备
12+
13+
| 项目 | 说明 | 操作 |
14+
|------|------|------|
15+
| **火山控制台账号** | 必须拥有 **IDFullAccess****STSAssumeRoleAccess** 的子账号,并且该子账号需要提供对应的 **AK/SK**进行**复制并记录**(后续 `.env` 或代码中需要使用) | 用于登录 IAM 子用户 |
16+
| **飞书账号** | 需要能够查看或配置 **飞书开放平台**<https://open.feishu.cn/app>),以便创建/授权应用(参考下文配置) | 加入 `火山 AgentKit Identity(内部测试)` 组织:<code>https://identity.feishu.cn/invite/member/_oF71wu7U3w</code> |
17+
| **本地环境** | Git、PowerShell / Bash、`uv`(Python 环境管理) | 参考下文安装步骤 |
18+
19+
---
20+
21+
### 3️⃣ 环境搭建
22+
23+
#### 3.1 拉取代码
24+
```bash
25+
git clone https://github.com/volcengine/agentkit-samples.git
26+
cd agentkit-samples/01-tutorials/workshop/session3
27+
```
28+
29+
#### 3.2 安装 `uv`(推荐国内镜像)
30+
```bash
31+
# Linux/macOS
32+
curl -LsSf https://force-workshop.tos-cn-beijing.volces.com/uv-latest/uv-installer.sh | sh
33+
34+
# Windows PowerShell
35+
irm https://force-workshop.tos-cn-beijing.volces.com/uv-latest/uv-installer.ps1 | iex
36+
```
37+
38+
#### 3.3 创建并同步 Python 3.12 虚拟环境
39+
```bash
40+
export UV_PYTHON_INSTALL_MIRROR=https://force-workshop.tos-cn-beijing.volces.com/python-build-standalone
41+
export UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple/
42+
uv venv --python 3.12
43+
uv sync --force-reinstall
44+
```
45+
46+
#### 3.4 增加火山角色
47+
48+
1. **打开角色管理页面**
49+
<https://console.volcengine.com/iam/identitymanage/role>
50+
51+
2. **新建角色**
52+
- 在「角色管理」页面,点击 **「新建角色」** 按钮。
53+
54+
3. **设置信任身份**
55+
- **信任身份**`账号`
56+
- **身份**`当前账号`(即你登录的主账号)
57+
- 点击 **「下一步」**
58+
59+
4. **填写角色名称**
60+
- 在弹出的表单中输入角色名称,例如 `identity_agentkit_workshop`(自行命名,后续便于辨识)。
61+
- 再次点击 **「下一步」**
62+
63+
5. **绑定策略**
64+
- 在策略搜索框中输入 **`IDReadOnlyAccess`**,勾选对应的策略名称。
65+
- 点击 **「完成」**,角色即创建成功。
66+
67+
6. **记录角色 TRN**
68+
- 创建成功后,点击新建好的角色进入 **角色详情页**
69+
- 在页面顶部可以看到 **「角色TRN」**,形如:
70+
71+
```text
72+
trn:iam::2114543432:role/identity_agentkit_workshop
73+
```
74+
75+
- 将该 TRN **复制并记录**(后续 `.env` 或代码中需要使用)。
76+
77+
#### 3.5 配置用户池和客户端
78+
79+
1. **打开用户池列表**
80+
访问 <https://console.volcengine.com/identity/region:identity+cn-beijing/user-pools?projectName=default>。
81+
82+
2. **新建用户池**
83+
- 点击 **「新建用户池」**。
84+
- 填写 **用户池名称**(如 `workshop_user_pool`)。
85+
- 选择登录属性(推荐 **用户名 + 手机号**)。
86+
- 点击 **「确认」** 完成创建。
87+
88+
3. **进入用户池详情**
89+
在用户池列表中点击刚创建的 `workshop_user_pool`,进入详情页。
90+
91+
4. **新建客户端**
92+
- 在用户池详情页点击 **「新建客户端」**。
93+
- 输入 **客户端名称**(如 `workshop_web_client`)。
94+
- 选择 **客户端类型** 为 **Web 应用**。
95+
- 在 **允许回调 URIs** 中填入本地回调地址,例如:
96+
```text
97+
http://127.0.0.1:8000/api/v1/oauth2callback
98+
```
99+
- 点击 **「确认」** 完成创建。
100+
101+
5. **记录关键信息**
102+
- 创建成功后页面会展示 **Client ID**、**Client Secret**、**Redirect URI** 等信息。
103+
- 记录用户池详情中的外部身份提供商回调 URL **OAuth 注册回调地址**、**OAuth 登录回调地址**,后续将填写**飞书开放平台应用**中。
104+
- **注意**:`Client Secret` 仅用于本地开发,请勿提交到代码仓库。
105+
106+
### 3.6 配置飞书应用
107+
108+
1. **创建飞书应用**
109+
- 访问 <https://open.feishu.cn/app/>,点击 **「创建应用」**,填写名称、描述等信息后提交。
110+
111+
2. **开通所需权限**
112+
- 进入 **「权限管理」 → 「开通权限」**,勾选以下权限并保存:
113+
- `user_access_token`(用户身份权限)
114+
- `contact:contact.base:readonly`
115+
- `contact:user.base:readonly`
116+
- `contact:user.employee_id:readonly`
117+
- `drive:drive`
118+
- `docx:document:readonly`
119+
- `docs:document.content:read`
120+
121+
3. **配置安全设置(回调 URL)**
122+
- 在左侧菜单选择 **「安全设置」 → 「回调 URL」**,依次添加:
123+
124+
```text
125+
# 火山 Identity 回调,例如
126+
https://auth.id.cn-beijing.volces.com/api/v1/oauth2callback
127+
128+
# UserPool 登录回调,例如
129+
https://userpool-dc3db63c-093f-42b5-aa58-8b0ad57424c7.userpool.auth.id.cn-beijing.volces.com/login/generic_oauth/callback
130+
131+
# UserPool 注册回调,例如
132+
https://userpool-dc3db63c-093f-42b5-aa58-8b0ad57424c7.userpool.auth.id.cn-beijing.volces.com/signup/generic_oauth/callback
133+
```
134+
135+
- 对应字段分别为 **「OAuth 注册回调地址」**、**「OAuth 登录回调地址」**,确保 URL 完全匹配(包括协议、域名、路径),否则会出现 `redirect_uri mismatch` 错误。
136+
137+
4. **保存并获取凭证**
138+
- 完成上述配置后,点击 **「保存」**。
139+
- 前往 **「凭证与基础信息」** 页面,记录下 **`App ID`** 与 **`App Secret`**。
140+
141+
### 3.7 配置外部身份供应商
142+
143+
1. **打开身份管理控制台**
144+
访问 <https://console.volcengine.com/identity/region:identity+cn-beijing> 并登录。
145+
146+
2. **进入目标用户池**
147+
- 在左侧列表中找到并点击本次实验使用的 **用户池**。
148+
149+
3. **新建外部身份供应商**
150+
- 在用户池详情页左侧选择 **「外部身份供应商」**。
151+
- 点击 **「新建供应商」**。
152+
153+
4. **填写供应商信息**
154+
- **供应商名称**:自行取名,例如 `feishu_identity_provider`。
155+
- **提供商类型**:选择 **「内置身份供应商」**。
156+
- **客户端 ID**:填写 **飞书应用的 App ID**。
157+
- **客户端密码**:填写 **飞书应用的 App Secret**。
158+
159+
5. **配置授权范围(Scope)**
160+
- 在 **「授权作用域」** 输入以下权限(英文逗号分隔):
161+
```
162+
contact:user.base:readonly,contact:contact.base:readonly
163+
```
164+
165+
6. **设置用户唯一标识属性**
166+
- 在 **「用户唯一标识属性」** 填写:
167+
```json
168+
["data","user_id"]
169+
```
170+
171+
7. **保存并记录**
172+
- 点击 **「确认」** 完成创建。
173+
- 记录下 **供应商 ID**(后续在代码或配置文件中可能需要使用)。
174+
175+
### 3.9 配置 `.env`
176+
177+
在项目根目录新建(或编辑)**`.env`** 文件,将以下变量填入对应的值。每个变量的获取来源已在前面的章节标注,确保在填写前已完成相应的配置步骤。
178+
179+
```dotenv
180+
# ==================== 认证相关 ====================
181+
ADK_OAUTH2_USERPOOL_UID= # ① 用户池 UID(用户池详情页可见)
182+
ADK_OAUTH2_CLIENT_ID= # ② OAuth2 客户端 ID(用户池 → 客户端 → Client ID)
183+
ADK_OAUTH2_CLIENT_SECRET= # ③ OAuth2 客户端 Secret(同上)
184+
ADK_OAUTH2_CALLBACK_URL= # ④ OAuth2 回调地址,示例:
185+
# http://127.0.0.1:8000/api/v1/oauth2callback
186+
ADK_OAUTH2_SCOPE="openid profile" # ⑤ 授权范围,保持默认即可
187+
188+
# ==================== 角色/凭证 ====================
189+
RUNTIME_IAM_ROLE_TRN= # ⑥ 运行时 IAM 角色 TRN(3.4 创建角色后记录)
190+
191+
# ==================== 火山云凭证 ====================
192+
VOLCENGINE_ACCESS_KEY= # ⑦ 子账号 AK(火山控制台 → 子账号 → Access Key)
193+
VOLCENGINE_SECRET_KEY= # ⑧ 子账号 SK(同上)
194+
195+
# ==================== 业务服务 ====================
196+
DATABASE_VIKING_BASE_URL= # ⑨ Viking 数据库访问地址(实验提供或自行部署)
197+
ADAPTIVE_PERMISSION_SERVICE_KEY= # ⑩ 细粒度权限服务 Key(平台分配)
198+
199+
# ==================== 其他可选 ====================
200+
# 如有额外的环境变量,可在此处继续添加
201+
```
202+
203+
#### 填写要点
204+
205+
1. **`ADK_OAUTH2_USERPOOL_UID`**
206+
- 进入 **火山 Identity 控制台 → 用户池**,在用户池列表中点击目标池,URL 中的 `uid` 即为该值。
207+
208+
2. **`ADK_OAUTH2_CLIENT_ID / SECRET`**
209+
- 在同一用户池的 **客户端** 页面创建的 **Web 应用**,页面会展示 `Client ID``Client Secret`
210+
211+
3. **`RUNTIME_IAM_ROLE_TRN`**
212+
- 参见 **3.4 增加火山角色**,创建成功后进入角色详情页即可看到形如
213+
`trn:iam::2114543432:role/identity_agentkit_workshop` 的 TRN。
214+
215+
4. **`VOLCENGINE_ACCESS_KEY / SECRET_KEY`**
216+
- 使用拥有 **IDFullAccess****STSAssumeRoleAccess** 权限的子账号登录 **火山控制台 → AccessKey**,生成并复制。
217+
218+
5. **`DATABASE_VIKING_BASE_URL`****`ADAPTIVE_PERMISSION_SERVICE_KEY`**
219+
- 这两项通常由实验组织者提供,若自行部署请填入对应服务的访问地址与密钥。
220+
221+
#### 保存与安全
222+
223+
- **务必**`.env` 文件加入 `.gitignore`,防止凭证泄露。
224+
- 在 CI/CD 环境中,推荐使用 **GitHub Secrets / GitLab CI Variables** 或公司内部密钥管理系统来注入这些变量,而不是直接提交到仓库。
225+
226+
完成上述填写后,运行项目即可读取到所有必要的配置信息。祝实验顺利 🚀!
227+
228+
---
229+
230+
### 3.8 配置凭据管理(Outbound Credentials)
231+
232+
1. **打开凭据管理页面**
233+
访问 <https://console.volcengine.com/identity/region:identity+cn-beijing/outbound-credentials>
234+
235+
2. **新建凭据**
236+
- 点击 **「新建凭据」**,在弹窗中选择 **「OAuthClient」** 类型。
237+
238+
3. **填写 OAuth 客户端信息**
239+
- **客户端 ID**:填写 **飞书应用的 App ID**(与 3.7 中保持一致)。
240+
- **客户端密码**:填写 **飞书应用的 App Secret**
241+
- **权限范围(Scope)**:同样填入
242+
```
243+
contact:user.base:readonly,contact:contact.base:readonly
244+
```
245+
246+
4. **完成创建**
247+
- 确认信息无误后点击 **「确认」**。
248+
249+
---
250+
251+
### 4️⃣ 实验列表 & 操作步骤
252+
253+
> **⚡️ 所有实验均在同一目录下运行,若已启动应用可直接跳到对应实验步骤。**
254+
255+
#### 4.1 实验 1 – 用户池登录智能体
256+
1. 启动服务
257+
```bash
258+
uv run veadk web
259+
```
260+
2. 浏览器访问 `http://127.0.0.1:8000` → 登录页。
261+
3. 使用 **实验前创建的本地用户**(用户名/临时密码)登录。
262+
4. 首次登录需修改密码并完成短信验证码。
263+
5. 授权后即可进入 Agent 应用页面。
264+
265+
#### 4.2 实验 2 – 飞书 IdP 联合登录
266+
1. 同实验 1 启动服务(若已运行可跳过)。
267+
2. 在登录页点击 **“使用飞书登录”** → 跳转飞书授权页面 → **授权** → 返回 Agent 并 **允许访问**
268+
3. 成功后即可使用飞书身份访问智能体。
269+
270+
#### 4.3 实验 3 – 安全托管飞书文档凭证
271+
1. 登录 **Agent Identity 控制台 → 凭证托管**,查看已预置的 `feishu` Provider(无需手动创建)。
272+
2. 启动服务并打开 Agent。
273+
3. 选择 **E3_lark_doc** Agent,输入
274+
```
275+
为我总结文档内容:https://icncjgc0bh0b.feishu.cn/docx/WmlQdfqiNoB1CqxHtKMcdJfonBd
276+
```
277+
4. 按提示完成飞书授权,即可得到文档摘要。
278+
279+
#### 4.4 实验 4 – 安全托管火山资源(ECS)凭证
280+
1. 登录 **凭证托管**,查看 `ecs‑oauth‑provider`(已预置)。
281+
2. 启动服务 → 选择 **E4_volc_ops** Agent,输入查询指令(如 “我有哪些 ECS?”)。
282+
3. 完成火山登录与授权后,Agent 将返回 ECS 列表。
283+
284+
#### 4.5 实验 5 – 静态细粒度权限策略
285+
1. 登录 **Agent Identity 控制台 → 用户池**,记录当前登录用户的 **User ID**
286+
2.**权限策略** 页面,新建策略:
287+
- **效果**:允许
288+
- **主体**`user::<UserID>`
289+
- **Agent**`identity_agentkit_workshop`
290+
- **资源**`knowledgebase document``production_credential.md`
291+
3. 保存后,在 **E5_ops_knowledgebase** Agent 中查询 “生产服务器如何登录?” 即可看到授权成功的结果。
292+
293+
#### 4.6 实验 6 – 动态权限围栏(预览功能)
294+
1. 启动服务 → 选择 **E6a_mail_ast_with_guard**(开启动态围栏)或 **E6b_mail_ast_without_guard**(未开启)。
295+
2. 按提示输入邮件地址、关键词、转发目标。
296+
3. 观察 **Event 窗口**`customMetaData.permissions`,验证是否 **阻断** 攻击邮件(`[email protected]`)或 **放行** 正常邮件(`[email protected]`)。
297+
298+
---
299+
300+
### 5️⃣ 常见问题 & 排查
301+
302+
| 场景 | 可能原因 | 解决办法 |
303+
|------|----------|----------|
304+
| **启动后无日志输出** | `uv` 环境未激活或依赖未安装 | 确认 `uv sync` 成功,重新执行 `uv run veadk web` |
305+
| **登录页面一直跳转** | 浏览器缓存或未正确创建用户 | 清除浏览器缓存或重新创建用户(实验 1) |
306+
| **飞书授权失败** | 组织邀请未生效或账号未绑定 | 重新加入组织链接,确认飞书账号已绑定组织 |
307+
| **凭证托管页面 404** | IAM 子账号权限不足 | 使用组委会提供的子账号登录控制台 |
308+
| **动态权限未生效** | 使用了 **E6b**(未开启)或浏览器阻止弹窗 | 切换到 **E6a**,确保浏览器允许弹窗 |
309+
310+
---
311+
312+
### 6️⃣ 清理资源
313+
```bash
314+
# 删除本地虚拟环境
315+
rm -rf .venv
316+
317+
# 删除克隆的代码仓库
318+
cd .. && rm -rf agentkit-samples
319+
```
320+
> 如在火山控制台创建了 **用户、策略、凭证 Provider**,请在对应页面手动删除,避免产生额外费用。
321+
322+
---
323+
324+
### 7️⃣ 参考文档
325+
- **智能体身份课程 - 可信身份链和细粒度权限管控**(完整实验手册)
326+
327+
---
328+
329+
祝实验顺利 🎉!

0 commit comments

Comments
 (0)