tencent cloud

云市场

产品动态
产品简介
产品概述
应用看板介绍
购买指南
用户指南
新手指引
应用商店应用使用指南
应用看板使用指南
服务商指南
上架流程概述
云市场入驻流程
制作和管理安装包
商品管理
订单管理
用户应用实例
常见问题
用户相关问题
Marketplace 政策
隐私协议
数据处理和安全协议
Tencent Cloud Marketplace User Agreement
Tencent Cloud Marketplace Products Cooperation Agreement
Tencent Cloud Marketplace End User License Agreement(Standard Version)
Marketplace Product Cancellation and Refund Rules
联系我们
词汇表

调用云 API

PDF
聚焦模式
字号
最后更新时间: 2026-01-30 17:02:53

概述

云市场提供了一套方案,让应用进程以安全且受控的方式调用云 API,从而访问或操作客户的云资源。常用的场景包括:
云管类软件
调用公有云 SaaS 实现软件功能(如短信)
自动扩缩容
校验软件授权

方案说明

API 调用方案围绕 CAM 运行时角色的生成及使用进行。


操作步骤

一、声明权限策略

在 package.yaml 声明权限策略,限制应用调用的云 API 范围。云市场在安装安装包时,会根据 声明的权限策略 来生成 CAM 策略。因此,没包含在权限策略声明中的 API,进程内是无调用权限的。
# package.yaml
role:
policy:
version: "2.0"
statement:
- action:
- cloudapp:DescribeLicense
- cvm:DescribeInstances
resource: "*"
effect: allow

二、声明使用角色变量

在 variable.tf 中声明使用角色变量:
# variable.tf variable "cloudapp_cam_role" {}

三、将分配的角色名注入到进程内

云市场会把应用安装时生成的软件运行时角色,通过 Terraform 变量的方式给到安装包。安装包需要在声明云资源的时候,将角色名的变量 cloudapp_cam_role 注入到进程的环境变量或者配置文件中。以下是 CVM 和 容器的示例。
CVM 示例
容器示例

方法1:注入到环境变量

您可以在 CVM 声明的用户脚本中,添加环境变量。
# deployment.tf
resource "tencentcloud_instance" "demo_cvm" {
# 注意:需要将 CAM 角色绑定到 CVM 的实例运行时角色
cam_role_name = var.cloudapp_cam_role
user_data_raw = <<-EOT
#!/bin/bash
# 导出角色名到环境变量
export CLOUDAPP_CAM_ROLE=${var.cloudapp_cam_role}
# 启动进程可以从环境变量读取角色名
node main.js
EOT
}

方法2:注入到配置文件

您也可以将角色名注入到配置文件。
# deployment.tf
resource "tencentcloud_instance" "demo_cvm" {
# 注意:需要将 CAM 角色绑定到 CVM 的实例运行时角色
cam_role_name = var.cloudapp_cam_role
user_data_raw = <<-EOT
#!/bin/bash
# 导出角色名到配置文件
echo "${var.cloudapp_cam_role}" >> /usr/local/.cloudapp_cam_role
# 启动进程可以从配置文件 /usr/local/.cloudapp_cam_role 读取角色名
node main.js
EOT
}

首先:将变量作为 Chart 变量传入

首先在 Terraform 中,声明 Worker 对应的云主机绑定运行时角色,同时将变量给到 Helm 的 Chart Values:
# <deployment.tf>
resource "tencentcloud_kubernetes_cluster" "tke-cluster1" {
worker_config {
# 此处省略了其他 worker_config 内容
cam_role_name = var.cloudapp_cam_role
}
}
resource "cloudapp_helm_app" "helm_charts" {
chart_values = {
CAM_ROLE = var.cloudapp_cam_role # 这里注入角色名变量
}
}

方法1:将 Chart 变量作为 StatefulSet 环境变量使用

在 Helm Chart 中,将 Chart 变量在工作负载中引用:
# <values.yaml>
# CAM 角色名,用于获取调用云 API 的临时密钥,从 tf 声明中注入
CAM_ROLE: ""

# <templates/statefulset.yaml>
kind: StatefulSet
spec:
spec:
containers:
- name: "my-container"
image: {{ quote .Values.SERVER_IMAGE }}
env:
# 将 CAM_ROLE 给到容器的环境变量
- name: CAM_ROLE
value: {{ quote .Values.CAM_ROLE }}
容器启动后,环境变量 CAM_ROLE 将包含角色名。

方法2:将变量写入到 ConfigMap,在 StatefulSet 中使用

在 Helm Chart 中,声明一个 Configmap,并且在工作负载引用:
# <values.yaml>
# CAM 角色名,用于获取调用云 API 的临时密钥,从 tf 声明中注入
CAM_ROLE: ""

# <configmap.yaml>
# 声明 ConfigMap
kind: ConfigMap
metadata:
name: cloudapp-config
data:
.cloudapp_cam_role: {{ quote .Values.CAM_ROLE }}

# <templates/statefulset.yaml>
kind: StatefulSet
spec:
template:
spec:
containers:
- name: "my-container"
image: {{ quote .Values.SERVER_IMAGE }}
valueMounts:
- name: cloudapp-cam-role
mountPath: /usr/local/cloudapp
subPath: .cloudapp_cam_role
volumes:
- name: cloudapp-cam-role
configMap:
name: cloudapp-config
至此,容器启动后,进程可以从 /usr/local/cloudapp/.cloudapp_cam_role 读取到 CAM 角色。

四、获取角色临时密钥

当进程里获得角色名后,我们通过 HTTP 请求就可获得角色的临时密钥。
请求的 CURL 示例如下:
curl http://metadata.tencentyun.com/meta-data/cam/security-credentials/$CLOUDAPP_CAM_ROLE
响应结果如下:
{
"TmpSecretId": "(RESPONSED SECRET ID)",
"TmpSecretKey": "(RESPONSED SECRET KEY)",
"ExpiredTime": 1658866289,
"Expiration": "2022-07-26T20:11:29Z",
"Token": "(RESPONSED TOKEN)",
"Code": "Success"
}

五、使用临时密钥调用云 API

使用上面的临时密钥,即可调用云 API。调用云 API 的认证凭证必须包含:SecretId、SecretKey、Token。
不同语言调用方法,可参考对应 SDK 文档:
PHP
Python
Java
Go
.NET
Node.js
C++


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈