如何配置Rundeck向Google Cloud Compute API发起API调用并完成认证
Rundeck 对接 Google Cloud Compute API 认证实操方案
首先明确:GCP 公有云 API 原生不支持基础认证(Basic)方案,你此前尝试 Basic 认证的方向本身不可行,无需再投入时间调试,仅需聚焦 OAuth2 相关配置即可,以下是已验证可跑通的实操流程:
前置准备
- 登录 GCP 控制台进入 IAM 管理页,创建专属服务账号,根据你的业务需求分配 Compute API 对应权限(遵循最小权限原则,测试阶段可临时授予
Compute Admin角色) - 导出该服务账号的 JSON 格式密钥文件,上传至 Rundeck 服务器的安全目录,比如
/etc/rundeck/gcp-compute-sa.json - 调整密钥文件权限,确保 Rundeck 运行用户可读取:
chown rundeck:rundeck /etc/rundeck/gcp-compute-sa.json && chmod 600 /etc/rundeck/gcp-compute-sa.json
两种可行的认证配置方式
方式1:使用 Rundeck 内置 GCP 凭据插件(推荐)
- 确认 Rundeck 版本 ≥ 3.3.x,该版本及以上默认预装 GCP 服务账号凭据插件,无需额外安装
- 进入对应项目的「项目设置」-「密钥存储」(如需全局可用则进入系统级密钥存储),选择「导入凭据」,凭据类型选择 Google Cloud Service Account Key
- 上传之前导出的服务账号 JSON 密钥文件,或者直接粘贴文件内容,给凭据设置易识别的名称,比如
gcp-compute-access-key - 配置调用 GCP Compute API 的作业时,HTTP 步骤的认证模块直接选择上述存储的 GCP 凭据即可,Rundeck 会自动生成有效期 1 小时的 OAuth2 访问令牌,自动附加到请求头中
- 快速验证:作业中新增一个 HTTP 步骤,请求方法选 GET,请求地址填
https://compute.googleapis.com/compute/v1/projects/你的GCP项目ID/zones,认证选择刚配置的 GCP 凭据,运行作业如果返回当前项目下的可用区列表即为配置成功
方式2:手动封装 gcloud 命令调用(适合复杂自定义场景)
- 先在 Rundeck 所在服务器安装 Google Cloud SDK,安装完成后切换到 Rundeck 运行用户,执行认证初始化:
gcloud auth activate-service-account --key-file=/etc/rundeck/gcp-compute-sa.json - 简单 API 调用可直接使用 gcloud 原生命令,比如列出所有虚拟机实例的命令为:
gcloud compute instances list --project 你的GCP项目ID --format json - 如需自定义 HTTP 请求,可通过 gcloud 命令手动获取令牌拼接请求,示例代码如下:
# 生成当前有效访问令牌 ACCESS_TOKEN=$(gcloud auth print-access-token) # 调用Compute API查询指定可用区下的实例列表 curl -H "Authorization: Bearer ${ACCESS_TOKEN}" \ https://compute.googleapis.com/compute/v1/projects/你的GCP项目ID/zones/us-central1-a/instances
常见踩坑排查
- 服务账号权限不足:可直接查看 GCP IAM 审计日志,确认被拒绝的请求对应的权限缺失项,补充到服务账号的角色中即可
- OAuth2 scope 配置不全:如果是手动配置 OAuth2 请求,需要给令牌添加对应 API 的 scope,Compute API 完整权限 scope 为
https://www.googleapis.com/auth/compute,只读场景可使用https://www.googleapis.com/auth/compute.readonly - 密钥文件权限错误:如果 Rundeck 运行用户没有密钥文件的读取权限,会直接返回认证失败,需严格按照前置准备中的权限要求配置
内容的提问来源于stack exchange,提问作者Pietto Vasco
相关产品推荐
相关产品推荐

