kubernetes - 您如何像 EC​​S 服务一样将服务帐户附加到 gke 部署/服务?

标签 kubernetes google-cloud-platform amazon-ecs google-kubernetes-engine google-cloud-iam

我来自 AWS 不知道如何使用 gcp 做到这一点。以前我问过一个关于服务帐户的更一般的问题,这是 gke 特有的。

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

我如何用 gke 做到这一点?如何将 gcp iam 服务帐户附加到 gke 部署/服务等?您可以在部署 yaml 中使用注释来附加服务帐户吗?

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

最佳答案

简介:

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

ADC 凭证搜索:

from google.cloud import storage
client = storage.Client()

或仅来自元数据:
from google.auth import compute_engine
from google.cloud import storage
credentials = compute_engine.Credentials()
client = storage.Client(credentials=credentials, project=project)

[更新]

我不想宣传糟糕的安全实践。上述技术应该在安全的生产 Kubernetes 集群上被阻止。
  • 为 Kubernetes 集群使用最低权限的服务帐户。
  • 禁用旧的元数据服务器 API 并使用元数据隐藏。
  • 使用 Pod 安全策略。
  • 为节点池使用单独的服务帐户。
  • 使用网络策略限制 pod 之间的流量。

  • [结束更新]

    Google Kubernetes 方法:

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

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

    此命令会将下载的凭证文件作为名为 service-account-credentials 的 secret 存储到 Kubernetes secret 卷中。 . Kubernetes 中的凭证文件名为 key.json .凭据是从名为 `/secrets/credentials.json 的 Google Cloud 下载的文件中加载的
    kubectl create secret generic service-account-credentials --from-file=key.json=/secrets/credentials.json
    

    在您的部署文件中添加以下内容以安装卷。
    spec:
      volumes:
      - name: google-cloud-key
        secret:
          secretName: service-account-credentials
    ...
      containers:
        volumeMounts:
        - name: google-cloud-key
          mountPath: /var/secrets/google
    

    在容器内,凭据从 /var/secrets/google/key.json 加载。

    python 示例:
    from google.cloud import storage
    client = storage.Client.from_service_account_json('/var/secrets/google/key.json')
    

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

    Authenticating to Cloud Platform with Service Accounts

    关于kubernetes - 您如何像 EC​​S 服务一样将服务帐户附加到 gke 部署/服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53585128/

    相关文章:

    performance - 在 Kubernetes 中并置 pod

    azure - 云提供商如何实际实现 FaaS/Serverless 架构

    amazon-web-services - 无法使用 aws cli 为 ecs 创建部署(部署指定修订为空文件,但提供的修订为 zip 文件)

    node.js - 带有 NGINX 的 Ubuntu 20 为现有 IP 添加子域

    amazon-web-services - 是否可以从 AWS lambda 直接调用 docker run

    amazon-web-services - 使用 terraform 的 AWS ECS 容量提供商

    postgresql - 管理 Kubernetes 集群上的数据库迁移

    kubernetes - 找出集群中使用 ConfigMap 值的位置

    azure - 新 Kubernetes 集群自动扩展节点的预拉镜像

    google-cloud-platform - 使用 Google DataFlow/Apache Beam 并行化图像处理或抓取任务是否有意义?