本页面介绍了如何创建 Identity and Access Management (IAM) 允许政策,以在 Google Kubernetes Engine (GKE) 中进行授权。
概览
每个 Google Cloud、GKE 和 Kubernetes API 调用都要求发出请求的账号必须具备必要的权限。默认情况下,除了您之外,其他任何人均无法访问您的项目或其资源。您可以使用 IAM 管理哪些人可以访问您的项目以及可以执行哪些操作。IAM 权限可与 Kubernetes RBAC 搭配使用,后者可为集群或命名空间内的特定对象提供精细的访问权限控制。IAM 更侧重于项目和组织级层的权限,但它也为 GKE 提供了多个专用的预定义角色。
如需为用户和服务账号授予访问 Google Cloud 项目的权限,请将其添加为项目团队成员,然后为这些团队成员分配角色。角色定义了账号可以访问的 Google Cloud 资源以及可以执行的操作。
在 GKE 中,您还可以使用 IAM 管理哪些用户和服务账号可以访问您的集群并在其中执行操作。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
与 Kubernetes RBAC 进行交互
Kubernetes 具有内置的访问权限控制机制,即基于角色的访问控制 (RBAC)。RBAC 控制集群级层和命名空间级层的访问权限,而 IAM 控制项目级层的访问权限。
IAM 和 RBAC 可以搭配使用。实体必须具有足够的 RBAC 和 IAM 权限才能处理集群中的资源。
IAM 角色
以下部分介绍了 Google Cloud 中可用的 IAM 角色。
预定义 GKE 角色
IAM 提供的预定义角色可以授予对特定 Google Cloud 资源的访问权限,并防止对其他资源进行未经授权的访问。
IAM 为 GKE 提供以下预定义角色。
Role | Title | Description | Lowest resource |
---|---|---|---|
roles/ |
Kubernetes Engine Admin |
Provides access to full management of clusters and their Kubernetes API objects.
To set a service account on nodes, you must also have the Service Account User role
( |
|
roles/ |
Kubernetes Engine KMS Crypto Key User | Allow the Kubernetes Engine service agent in the cluster project to call KMS with user provided crypto keys to sign payloads. | |
roles/ |
Kubernetes Engine Cluster Admin |
Provides access to management of clusters.
To set a service account on nodes, you must also have the Service Account User role
( |
|
roles/ |
Kubernetes Engine Cluster Viewer |
Provides access to get and list GKE clusters. |
|
roles/ |
Kubernetes Engine Default Node Service Account | Least privilege role to use as the default service account for GKE Nodes. | |
roles/ |
Kubernetes Engine Developer |
Provides access to Kubernetes API objects inside clusters. |
|
roles/ |
Kubernetes Engine Host Service Agent User |
Allows the Kubernetes Engine service account in the host project to configure shared network resources for cluster management. Also gives access to inspect the firewall rules in the host project. |
|
roles/ |
Kubernetes Engine Viewer |
Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects. |
|
如需查看每个角色中的各个权限的完整列表,请参阅 Google Kubernetes Engine 角色。您还可以使用 gcloud CLI 或 Google Cloud 控制台查看每个 IAM 角色中的权限。如需查看相关说明,请参阅查看 IAM 角色授予的权限。
基本 IAM 角色
基本 IAM 角色可为用户授予对所有 Google Cloud 资源的全局项目级层访问权限。为确保项目和集群的安全,建议尽量使用预定义角色。
如需详细了解基本角色,请参阅 IAM 文档中的基本角色。
服务账号用户角色
Service Account User 角色可为 Google Cloud 用户账号授予执行操作的权限,就像服务账号在执行该操作一样。
为某用户授予项目的
iam.serviceAccountUser
角色后,该用户将会获得为项目中的所有服务账号(包括将来可能创建的服务账号)授予的全部角色。为某用户授予特定服务账号的
iam.serviceAccountUser
角色后,该用户将会获得为该服务账号授予的全部角色。
此角色可提供以下权限:
iam.serviceAccounts.actAs
iam.serviceAccounts.get
iam.serviceAccounts.list
resourcemanager.projects.get
resourcemanager.projects.list
如需详细了解 ServiceAccountUser 角色,请参阅 IAM 文档中的 ServiceAccountUser。
以下命令演示了用于授予 Service Account User 角色的语法:
gcloud iam service-accounts add-iam-policy-binding \
SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--member=user:USER \
--role=roles/iam.serviceAccountUser
替换以下内容:
- 将
SA_NAME
替换为服务账号的名称。 PROJECT_ID
:您的 Google Cloud 项目的 ID。USER
:用户的电子邮件地址。
Host Service Agent User 角色
Host Service Agent User 角色仅用于共享 VPC 集群。此角色可提供以下权限:
compute.firewalls.get
container.hostServiceAgent.*
dns.networks.bindDNSResponsePolicy
dns.networks.bindPrivateDNSPolicy
dns.networks.bindPrivateDNSZone
自定义角色
如果预定义角色不能满足您的需要,您可以使用自己定义的权限创建自定义角色。
如需了解如何创建和分配自定义角色,请参阅创建和管理自定义角色。
查看 IAM 角色授予的权限
您可以使用 gcloud CLI 或 Google Cloud 控制台查看各角色授予的权限。
gcloud
如需查看特定角色授予的权限,请运行以下命令:
gcloud iam roles describe roles/ROLE
将 ROLE
替换为任意 IAM 角色。GKE 角色带有 roles/container
前缀,例如 gcloud iam roles describe roles/container.admin
。
控制台
要查看特定角色授予的权限,请执行以下步骤:
转到 Google Cloud 控制台中 IAM 和管理页面的角色部分。
如需查看 GKE 的角色,请在过滤表字段中输入
Kubernetes Engine
。选择要查看的角色。系统会显示角色说明和已分配权限列表。
管理 IAM 角色
如需了解如何为真人用户管理 IAM 角色和权限,请参阅 IAM 文档中的授予、更改和撤消针对项目成员的访问权限。
如需了解如何为服务账号管理这些角色和权限,请参阅为服务账号授予角色。
示例
以下示例说明了如何将 IAM 与 GKE 搭配使用:
- 一名新员工加入某公司。该员工需要加入 GCP 项目中,但他只需要查看该项目的集群及其他 GCP 资源。项目所有者为其分配项目级别 Compute Viewer 角色。此角色提供用于获取和列出节点的只读访问权限,这些节点属于 Compute Engine 资源。
- 该员工在运营部门工作,该部门需要使用
gcloud
或 Google Cloud 控制台更新集群。此操作需要container.clusters.update
权限,因此项目所有者为该员工分配了 Kubernetes Engine Cluster Admin 角色。该员工现在同时拥有 Kubernetes Engine Cluster Admin 和 Compute Viewer 角色授予的权限。 - 该员工需要调查 Deployment 出现问题的原因。他需要运行
kubectl get pods
来查看集群中运行的 Pod。该员工已具有 Compute Viewer 角色,但该角色无权列出 Pod。该员工需要被授予 Kubernetes Engine Viewer 角色。 - 该员工需要创建新集群。项目所有者为其授予
PROJECT_NUMBER-compute@developer.gserviceaccount.com
服务账号的 Service Account User 角色,这样,该员工的账号便可访问 Compute Engine 的默认服务账号。此服务账号具有 Editor 角色,该角色提供一系列广泛的权限。