Alibaba Cloud CLI:用 profile、RAM 与 STS 控制调用身份
Alibaba Cloud CLI 通过 profile、环境变量或外部凭据机制选择调用身份,再按产品 OpenAPI 的 RegionId 和参数定位资源。脚本在执行前必须证明当前 profile、RAM 主体、账号与区域,不能把默认配置当成可信输入。
profile 与凭据来源共同决定调用身份
CLI 配置通常保存在 ~/.aliyun/config.json,命名 profile 可以使用 AccessKey、STS、RAM Role、OIDC 等不同来源。环境变量还能覆盖或绕过 profile;官方环境变量文档提供 ALIBABA_CLOUD_IGNORE_PROFILE 以强制忽略配置文件。排障时应记录最终凭据来源,而不是打印密钥。
aliyun version
aliyun configure list
aliyun configure get --profile dev-readonly
aliyun sts GetCallerIdentity --profile dev-readonly --output cols=AccountId,Arn rows=Identity若当前 CLI 发行线的配置命令输出结构不同,以 aliyun help 和锁定版本实测为准。GetCallerIdentity 返回的账号与 ARN 是写操作前的身份守卫,RegionId 则由产品命令显式传入。
安装与配置隔离先证明没有借用旧 AK
二进制来源和版本进入工具清单。人员优先使用组织批准的 SSO、RAM 角色或临时 STS;CI 使用 OIDC/角色等短期身份,不把个人 AK/SK 复制进流水线。项目实验通过独立配置目录或干净用户环境进行,第一次身份查询应失败。
export ALIBABA_CLOUD_CLI_HOME="$PWD/.tmp/aliyun-cli"
export ALIBABA_CLOUD_IGNORE_PROFILE=TRUE
aliyun sts GetCallerIdentity只有在受控注入临时凭据后才应成功。配置文件、环境变量、进程参数和 shell 历史都可能泄漏 Secret 或 SecurityToken;密钥不出现在命令行示例、日志和 artifact。
正向查询与越权拒绝证明 RAM 边界
正向实验查询一个明确 RegionId 下的开发资源,输出实例 ID、状态、标签和 RequestId。反向实验使用同一身份调用未授权写动作或越界资源,预期得到权限拒绝。资源不存在、API 版本错误与权限拒绝要分别判断。
aliyun ecs DescribeInstances \
--RegionId cn-hangzhou \
--Tag.1.Key Environment \
--Tag.1.Value dev \
--profile dev-readonly
aliyun ecs DeleteInstance \
--RegionId cn-hangzhou \
--InstanceId i-intentional-negative-canary \
--profile dev-readonly反例使用隔离测试对象。错误中的 RequestId 与 RAM 审计、ActionTrail 或工单关联,不能因为一个 AccessDenied 就临时授予管理员权限。
OpenAPI 参数与结构化输出是脚本契约
Alibaba Cloud CLI 以产品 code 和 Action 调用 OpenAPI,参数名称、API 版本与分页字段属于具体产品模型。自动化固定 JSON 输出并验证字段,不解析表格。批量查询需要处理 PageNumber/PageSize 或 NextToken,估算账号、Region、资源类型与重试形成的请求量。
变更脚本先调用 STS 身份接口,再校验账号、ARN、RegionId 与资源标签。创建资源写入 owner、environment、expires-at、cost-center。RAM Policy、资源组、条件键和管控策略共同决定实际权限,不能只看一份角色名称。
identity=$(aliyun sts GetCallerIdentity --profile "$ALIYUN_PROFILE")
printf '%s' "$identity" | jq -e --arg account "$EXPECTED_ACCOUNT" '.AccountId == $account'
aliyun ecs DescribeInstances --RegionId "$EXPECTED_REGION" --profile "$ALIYUN_PROFILE"凭据、审计、容量和费用同时治理
AK/SK、STS token、配置文件与 debug 日志按敏感资产处理。人员和工作负载身份分开,临时会话限制权限与期限,CI 信任条件绑定仓库与环境。发现泄漏立即禁用或撤销凭据,随后检查 ActionTrail 和资源变更。
容量来自 Region、产品、分页和并发,费用还包括公网 IP、快照、日志、流量和保留数据。全量资产盘点使用专门资源中心或治理入口,不让开发机脚本无限遍历。限流重试区分幂等查询和创建动作,避免自动重试产生重复资源。
删除 profile 不会回滚云端资源
退出先停止调用入口,按标签与资源记录盘点创建物,完成依赖检查、备份或移交,再删除云资源并复核费用与审计。随后清理 STS 缓存、环境变量和本地 profile;长期 AK 还要在 RAM 控制面禁用或删除。
aliyun configure delete --profile dev-readonly
aliyun configure list
aliyun sts GetCallerIdentity --profile dev-readonly最后一条应失败。命令名称以当前锁定版本帮助为准,清理前先确认目标 profile。团队保存 profile owner、允许账号/Region、RAM 策略、CLI 版本、正反金丝雀与退出证据,避免本地配置消失后仍留下无主资源。
迁移到新电脑时只迁移非敏感 profile 契约和安装清单,不复制旧缓存与明文凭据;新环境重新取得短期身份,并让同一组身份、区域、允许与拒绝实验全部通过。
