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

如何通过Ansible利用控制节点GCP账户权限操作GCE VM及GKE私有集群

用Ansible借助控制节点个人GCP账户操作GCE VM(对接GKE私有集群)

你已经能通过Ansible连接GCE VM,但默认用的是VM绑定的服务账户,不想给服务账户加权限也不想复制密钥,以下几种安全方案可以实现用控制节点的个人GCP账户权限执行操作:

方案1:临时传递应用默认凭据(ADC)并清理

控制节点通过gcloud auth application-default login生成的应用默认凭据存在~/.config/gcloud/application_default_credentials.json,可以临时复制到VM的临时目录,设置环境变量指向它,操作完成后立即删除:

- name: 使用个人GCP账户执行GKE操作
  hosts: gce_vm
  tasks:
    - name: 临时复制控制节点的ADC到VM
      copy:
        content: "{{ lookup('file', lookup('env', 'HOME') + '/.config/gcloud/application_default_credentials.json') }}"
        dest: "/tmp/adc_temp.json"
        mode: '0600'
      no_log: true  # 禁止日志输出凭据内容,避免泄露

    - name: 设置GCP认证环境变量
      set_fact:
        gcp_auth_env:
          GOOGLE_APPLICATION_CREDENTIALS: "/tmp/adc_temp.json"

    - name: 获取GKE私有集群凭证
      command: gcloud container clusters get-credentials your-private-cluster --zone your-cluster-zone
      environment: "{{ gcp_auth_env }}"

    - name: 清理临时凭据文件
      file:
        path: "/tmp/adc_temp.json"
        state: absent

方案2:SSH Agent转发+gcloud代理配置

利用SSH Agent转发,让VM通过控制节点的SSH代理使用个人GCP账户认证,无需传递任何凭据文件:

  1. 控制节点先配置gcloud使用SSH代理:
gcloud config set ssh/use_ssh_agent true
  1. 在Ansible中开启SSH Agent转发,执行操作:
- name: 通过SSH Agent转发使用个人GCP账户
  hosts: gce_vm
  vars:
    ansible_ssh_args: "-o ForwardAgent=yes"
  tasks:
    - name: 配置VM上的gcloud使用SSH代理
      command: gcloud config set ssh/use_ssh_agent true

    - name: 获取GKE集群凭证
      command: gcloud container clusters get-credentials your-private-cluster --zone your-cluster-zone

注意:确保控制节点的SSH Agent已经加载了个人GCP关联的SSH密钥,且VM的SSH配置允许Agent转发。

方案3:使用临时访问令牌(最安全)

通过Ansible从控制节点获取个人GCP账户的临时访问令牌,在VM上通过环境变量传递令牌进行认证,令牌有有效期(默认约1小时),不会在VM留下持久化凭据:

# 先在控制节点获取临时令牌
- name: 获取个人GCP账户临时访问令牌
  hosts: localhost
  tasks:
    - name: 请求临时令牌
      gcp_auth:
        scopes:
          - https://www.googleapis.com/auth/cloud-platform
      register: gcp_token

# 在GCE VM上使用令牌执行操作
- name: 用临时令牌操作GKE集群
  hosts: gce_vm
  vars:
    gcp_access_token: "{{ hostvars['localhost']['gcp_token']['access_token'] }}"
  tasks:
    - name: 设置令牌环境变量
      set_fact:
        gcp_token_env:
          GOOGLE_OAUTH_ACCESS_TOKEN: "{{ gcp_access_token }}"

    - name: 获取GKE集群凭证
      command: gcloud container clusters get-credentials your-private-cluster --zone your-cluster-zone
      environment: "{{ gcp_token_env }}"

内容的提问来源于stack exchange,提问作者Pedro Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:45:19