介绍:
一个 Google Cloud Kubernetes 集群由 Compute Engine 虚拟机实例组成。创建集群时,每个 VM 实例都会附加一个默认服务帐户。这些凭证存储在实例元数据中,可以通过使用默认应用程序Client()
实例化(Application Default Credentials)或指定凭证位置来访问。
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
. 然后,您将使用密钥(凭据)安装卷。然后,在容器中运行的应用程序将需要在创建 Google 应用程序客户端(例如访问云存储)时加载凭据。
此命令会将下载的凭证文件存储到 Kubernetes 机密卷中,作为名为service-account-credentials
. 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
蟒蛇示例:
from google.cloud import storage
client = storage.Client.from_service_account_json('/var/secrets/google/key.json')
本文档提供了有关 Kubernetes 服务帐户凭据的分步详细信息。
使用服务帐号向云平台进行身份验证