-
Notifications
You must be signed in to change notification settings - Fork 12
demo回放模式
demo 命令在当前 provider 会话内开启确定性回放模式,让 ctk 在本地走完"签名 → 发请求 → 解析响应 → 装配 schema → 渲染表格"的完整 provider / 验证载荷流程,但所有 HTTP 请求被注入的 mock transport 拦下并返回事先内置的 fixture 数据,不会真的打到云厂商。
典型用途:
-
培训 / 演示:不需要真实凭据就能跑完
cloudlist/shell/bucket-check等场景,演示 CSPM / CNAPP 验证链路 - POC / 售前:在客户环境签约前用固定样例数据展示 ctk 的工作方式与产出样例
- 验证预演:正式在真实云账号执行验证流程前,先在 demo 模式下过一遍交互流程,避免误操作
- 新同学上手:没有云账号时也能体验 REPL 的三层嵌套、help 系统、shell 会话、表格渲染
i️ demo 模式只回放请求,不会把任何虚构数据写入凭据缓存(
cache.Cfg.CredInsert在 demo 模式下被跳过)。
9 家厂商全部支持 demo replay。各厂商已回放的验证载荷:
| 厂商 | 已回放验证载荷 |
|---|---|
| alibaba | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| aws | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| azure | cloudlist / iam-user-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| gcp | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| huawei | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| tencent | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| volcengine | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| jdcloud | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / instance-cmd-check / role-binding-check / bucket-acl-check / iam-credential-check |
| ucloud | cloudlist / iam-user-check / bucket-check / event-check / rds-account-check / role-binding-check / bucket-acl-check / iam-credential-check |
Azure 不出现 bucket-check:当前 Blob 数据面枚举未启用,与 spec.go capability 声明保持一致。UCloud 不出现 instance-cmd-check:当前无原生等价的 Run Command 服务。除此之外,demo 列表与生产能力声明一致。
必须先 use <provider> 进入 provider 会话,再运行 demo:
ctk > use alibaba
ctk > alibaba > demo
MOCK REPLAY MODE
================
!!! USE THESE DEMO CREDENTIALS !!!
----------------------------------
AccessKey: LTAI4tDVhjxvrWKTsEXAMPLE
SecretKey: EXAMPLEv2fYAa2s7GhvLun7xqctKEY
ctk > alibaba[mock] >
提示符切换为 ctk > <provider>[mock] >,会话进入 mock 嵌套层。
Azure 的认证模型是 clientId + clientSecret + tenantId + subscriptionId,GCP 是 base64 service account JSON,都没有 AccessKey / SecretKey 概念。这两家在 banner 中跳过 AK/SK 行,只显示原生字段:
ctk > azure > demo
MOCK REPLAY MODE
================
!!! USE THESE DEMO CREDENTIALS !!!
----------------------------------
clientId: 11111111-2222-3333-4444-555555555555
clientSecret: AzExampleClientSecretEXAMPLEvalueDEMO0000
tenantId: 11111111-2222-3333-4444-555555555555
subscriptionId: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
ctk > azure[mock] >
GCP 类似,banner 仅显示 base64Json: ...(truncated)。
进入 mock 会话后,把上方横幅给出的 demo 专用凭据 填进去(mock transport 只认这一对值),然后照常执行:
ctk > alibaba[mock] > set accesskey LTAI4tDVhjxvrWKTsEXAMPLE
accesskey => LTAI4tDVhjxvrWKTsEXAMPLE
ctk > alibaba[mock] > set secretkey EXAMPLEv2fYAa2s7GhvLun7xqctKEY
secretkey => EXAMPLEv2fYAa2s7GhvLun7xqctKEY
ctk > alibaba[mock] > run
[+] 12:00:00 Current user: ctkvalidator (acs:ram::235000000000000001:user/ctkvalidator)
[*] 12:00:00 Start enumerating ECS ...
Hosts results:
+-------------+----------------+----------------+------------+------------+--------+-------------+
| HostName | Instance ID | Public IP | Private IP | OS Type | Public | Region |
+-------------+----------------+----------------+------------+------------+--------+-------------+
| ... | ... | ... | ... | ... | ... | ... |
+-------------+----------------+----------------+------------+------------+--------+-------------+
...
切换到其它 payload 同样走标准流程:
ctk > alibaba[mock] > set payload iam-user-check
ctk > alibaba[mock] > set metadata add ctk-validation-user DemoPass0rd!
ctk > alibaba[mock] > run
进入 shell 模式回放命令执行:
ctk > alibaba[mock] > shell i-bp1demoinstance001
Mock Shell Session
==================
Simulated commands only.
Type `exit` to return.
[mock@i-bp1demoinstance001 ~]$ id
uid=0(root) gid=0(root) groups=0(root)
[mock@i-bp1demoinstance001 ~]$ exit
shell 提示符在 demo 模式下是 [mock@<id> ~]$,区别于真实会话的 [validation@<id> ~]$。
如果把 AK 或 SK 改成其它值再 run,mock transport 会返回与真实云一致的认证错误(例如阿里云的 InvalidAccessKeyId.NotFound / SignatureDoesNotMatch,腾讯云的 AuthFailure.SignatureFailure,AWS 的 InvalidClientTokenId),不会静默 fall through 到真云。这样 demo 模式的边界行为贴近真实,也避免了"误以为在 demo 实则在线"的风险。
ctk > alibaba[mock] > set accesskey WRONG
ctk > alibaba[mock] > run
[-] 12:00:02 GetCallerIdentity failed: InvalidAccessKeyId.NotFound: Specified access key is not found.
exit / quit / back 均可退出 mock,返回到原本的 live provider 会话;原会话的 provider / payload / metadata 保持进入 demo 之前的状态:
ctk > alibaba[mock] > exit
Mock replay disabled.
Returned to the live provider session for alibaba.
ctk > alibaba >
-
demo只能在 provider 会话(ctk > <provider> >)里发起;顶层ctk >下直接敲demo会拒绝执行 - 一次只能激活一个 provider 的 demo;要切别的 provider 请先
exit回到 live 会话再use <other> - demo 模式不会写凭据缓存,
sessions列表不会多出 mock 条目 - demo 模式不会产生敏感操作的 y/N 二次确认(fixture 是惰性的,回放过程不会真改云态)
- mock fixture 是内嵌到二进制里的确定性样本;升级 ctk 版本时 fixture 内容可能会随之更新
- 第一次跑 ctk 建议从
use alibaba→demo起步,先熟悉三层 REPL、help、shell 的交互再接真实凭据 - 做内部/外部演示时,用 demo 模式避免展示真实云账号信息,也避免演示过程中不小心触发真实云账单