Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

demo回放模式

404tk edited this page May 7, 2026 · 5 revisions

场景定位

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 列表与生产能力声明一致。

启用 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 / GCP banner 格式差异

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.

退出 demo 模式

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 alibabademo 起步,先熟悉三层 REPL、help、shell 的交互再接真实凭据
  • 做内部/外部演示时,用 demo 模式避免展示真实云账号信息,也避免演示过程中不小心触发真实云账单

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /