You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非交互式环境下用服务账号+IAP连接GCE实例及所需IAM权限

非交互式流水线中通过IAP代理登录GCE实例的配置方案

一、升级后的gcloud命令(适配Terraform local-exec)

在Terraform的local-exec中,需按顺序执行服务账号激活、IAP代理登录命令,确保全程非交互式:

resource "null_resource" "iap_ssh_login" {
  provisioner "local-exec" {
    command = <<EOT
      # 绑定服务账号凭证路径
      export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
      
      # 非交互式激活服务账号
      gcloud auth activate-service-account --key-file="$GOOGLE_APPLICATION_CREDENTIALS" --quiet
      
      # 通过IAP代理登录GCE实例,禁用主机密钥检查避免交互
      gcloud compute ssh INSTANCE_NAME \
        --zone=INSTANCE_ZONE \
        --project=PROJECT_ID \
        --tunnel-through-iap \
        --quiet \
        --ssh-flag="-o StrictHostKeyChecking=no" \
        --ssh-flag="-o UserKnownHostsFile=/dev/null"
    EOT
  }
}

若需登录后执行远程命令,可直接追加到ssh命令后:

gcloud compute ssh INSTANCE_NAME \
  --zone=INSTANCE_ZONE \
  --project=PROJECT_ID \
  --tunnel-through-iap \
  --quiet \
  --ssh-flag="-o StrictHostKeyChecking=no" \
  --ssh-flag="-o UserKnownHostsFile=/dev/null" \
  --command="sudo apt update && sudo apt upgrade -y"

二、服务账号所需IAM权限

需为服务账号绑定以下两类权限,可通过项目级或实例级IAM配置:

1. IAP隧道访问权限

  • 必须绑定角色:roles/iap.tunnelResourceAccessor(允许通过IAP建立到实例的隧道)
  • 绑定范围:可覆盖整个GCP项目,或仅目标GCE实例/实例组层级

2. GCE实例访问权限

需具备以下基础权限,可通过预定义角色或自定义角色实现:

  • compute.instances.get:获取实例基础信息
  • compute.instances.connect:允许通过SSH连接实例
  • compute.projects.get:获取项目基础信息(部分场景必需)

推荐绑定预定义角色roles/compute.instanceAdmin.v1(包含上述所有权限);若需最小权限,可创建自定义角色仅包含上述三个权限。

3. 额外配置要求

  • 目标GCE实例所在VPC需配置防火墙规则,允许来自35.235.240.0/20的TCP 22端口流量(IAP代理的固定IP段)
  • 确保服务账号凭证JSON文件有效且未过期

内容的提问来源于stack exchange,提问作者Gabriele B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:52:18