如何将服务帐户附加到 gke 部署/服务,就像 ECS 服务一样?

red*_*888 6 amazon-ecs google-cloud-platform kubernetes google-kubernetes-engine google-cloud-iam

我来自 AWS,不知道如何使用 gcp 执行此操作。之前我问过一个有关服务帐户的更一般性问题,这是特定于 gke 的。

在AWS中,我可以创建ECS服务角色。我将策略附加到该角色以为其提供所需的访问权限。然后我将该角色附加到 ECS 服务。因此,我可以将多个服务部署到同一个 ECS 集群,并为它们提供不同的访问权限,并且不使用静态密钥,也不传递任何秘密。

如何使用 gke 执行此操作?如何将 gcp iam 服务帐户附加到 gke 部署/服务等?您可以在部署 yaml 中使用注释来附加服务帐户吗?

我想在同一个 gke 集群上隐式使用不同的服务帐户进行多个部署和服务(不使用密钥)

Joh*_*ley 8

介绍:

Google Cloud Kubernetes 集群由 Compute Engine 虚拟机实例组成。创建集群时,每个 VM 实例都会附加一个默认服务帐户。这些凭证存储在实例元数据中,可以通过使用默认应用程序Client()实例化(应用程序默认凭证)或指定凭证位置来访问。

ADC 凭证搜索:

from google.cloud import storage
client = storage.Client()
Run Code Online (Sandbox Code Playgroud)

或者仅来自元数据:

from google.auth import compute_engine
from google.cloud import storage
credentials = compute_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)
Run Code Online (Sandbox Code Playgroud)

[更新]

我不想提倡不良的安全做法。应在安全生产 Kubernetes 集群上阻止上述技术。

  1. 对 Kubernetes 集群使用最低权限的服务帐户。
  2. 禁用旧的元数据服务器 API 并使用元数据隐藏。
  3. 使用 Pod 安全策略。
  4. 对节点池使用单独的服务帐户。
  5. 使用网络策略限制 Pod 之间的流量。

[更新结束]

谷歌 Kubernetes 方法:

Kubernetes 的推荐技术是为集群中运行的每个应用程序创建一个单独的服务帐户,并减少应用于默认服务帐户的范围。分配给每个服务帐户的角色根据应用程序所需的权限而有所不同。

服务帐户凭据作为 Json 文件下载,然后作为Secret. 然后,您可以使用密钥(凭据)安装该卷。然后,在容器中运行的应用程序在创建 Google 应用程序客户端(例如访问云存储)时需要加载凭据。

此命令会将下载的凭证文件存储到 Kubernetes 秘密卷中,作为名为 的秘密service-account-credentials。Kubernetes 内的凭证文件名为key.json. 凭据是从 Google Cloud 下载的名为“/secrets/credentials.json”的文件中加载的

kubectl create secret generic service-account-credentials --from-file=key.json=/secrets/credentials.json
Run Code Online (Sandbox Code Playgroud)

在您的部署文件中添加以下内容以安装卷。

spec:
  volumes:
  - name: google-cloud-key
    secret:
      secretName: service-account-credentials
...
  containers:
    volumeMounts:
    - name: google-cloud-key
      mountPath: /var/secrets/google
Run Code Online (Sandbox Code Playgroud)

在容器内部,凭证是从/var/secrets/google/key.json

Python 示例:

from google.cloud import storage
client = storage.Client.from_service_account_json('/var/secrets/google/key.json')
Run Code Online (Sandbox Code Playgroud)

本文档提供有关 Kubernetes 服务帐户凭据的分步详细信息。

使用服务帐号向云平台进行认证