如何使用 Ansible 将 playbook 运行到 GCP GCE 虚拟机中,同时使用控制节点的 GCP 帐户和 IAM 权限

问题描述 投票:0回答:2

我正在尝试通过 Ansible 通过 SSH 连接到 Compute Engine 虚拟机,以便能够与 GKE 私有集群进行交互。该虚拟机位于 Ansible 动态清单中,当我说我想通过 SSH 访问它时,我的意思是我希望能够在其中运行 ansible playbook,而不是从控制节点以外的另一台计算机显式通过 SSH 运行。

我能够通过 SSH 连接到该虚拟机,但是,显然,当我这样做时,我使用虚拟机附加的服务帐户在虚拟机上进行了身份验证,并且我想使用我自己的 GCP 帐户的凭据,[我是能够使用

gcloud compute ssh
在 Ansible 控制节点计算机上执行此操作,因为我已使用该计算机上的 gcloud CLI 进行了身份验证。]* 有什么方法可以让我使用这些凭据通过 Ansible 通过 SSH 连接到该虚拟机吗?

我知道我可以为虚拟机服务帐户提供所需的 IAM 角色或使用另一个服务帐户,方法是生成服务帐户密钥,将其复制到虚拟机并使用虚拟机内的 gcloud CLI 使用该密钥进行身份验证,但是出于安全原因,我试图避免这两种选择。欢迎其他替代方案。

*编辑:显然,当我通过

gcloud auth ssh
进行 SSH 时,我没有通过我自己的身份验证。在虚拟机上运行
gcloud auth list
表明虚拟机内唯一可用的凭据是虚拟机的服务帐户。

编辑 2:提到了动态库存并提供了更详细的解释。

google-cloud-platform ssh ansible google-cloud-iam
2个回答
0
投票

1- 在 Ansible 控制节点机器上安装 ansible-galaxy 角色 google-auth。
2 - 创建一个 Ansible playbook,使用 gcp_compute_auth 插件通过 GCP 进行身份验证,然后使用 ssh 模块通过 SSH 连接到 Compute Engine VM
3 - 请检查我在剧本中使用的代码来实现此目的

- name: SSH into Compute Engine VM with GCP credentials
  hosts: compute_engine_vm
  tasks:
  - name: Authenticate with GCP
    google.auth.gcp_compute_auth:
      scopes:
      - "https://www.googleapis.com/auth/cloud-platform"
    register: auth_result

  - name: SSH into Compute Engine VM
    ssh:
      user: "your-username"
      host: "{{ inventory_hostname }}"
      port: 22
      become: true
    delegate_to: localhost
    environment:
      ACCESS_TOKEN: "{{ auth_result.access_token }}"

Ansible 控制节点机器并将生成的访问令牌存储在 access_token 变量中。然后,ssh 模块使用此访问令牌通过 SSH 连接到 Compute Engine 虚拟机。我希望这可以根据您的安全要求满足您的需求


0
投票

目前(8 月 24 日)我在 ansible Galaxy 中找不到 google-auth 角色的痕迹。 也许它已经被重构了。 我认为大多数人都是在外部生成 ssh 密钥。

© www.soinside.com 2019 - 2024. All rights reserved.