本文主要介绍在容器服务(VKE)上使用火山引擎访问控制(IAM)来保护您的 Kubernetes 集群访问。
说明
该功能目前处于 公测 阶段。
在现代云原生应用中,Kubernetes 已经成为了构建和管理容器化应用的标准平台。然而,保护 Kubernetes 集群免受未经授权访问的风险是至关重要的。本文将重点介绍如何利用火山引擎提供的 IAM 服务来有效地管理和保护您在 VKE 控制台上的 Kubernetes 集群的访问。
IAM(Identity and Access Management)是火山引擎提供的访问控制服务,用于管理对云资源的访问权限。通过配置 IAM 策略,您可以精确控制用户(User)、角色(Role)或实体对特定资源的访问方式和权限。 更多信息,请参见 访问控制。
本文方案仅适用于通过 VKE 控制台访问 Kubernetes 集群时的权限控制,不适用于基于 kubectl 等API 方式 Kubernetes 集群。API 方式访问集群时直接通过 Kubernetes 的 API Server 访问,不受火山引擎 IAM 控制。
VKE 提供了容器组(Pod)的控制台操作功能,类似于在集群中执行kubectl exec -it {your_container_name} -- /bin/bash
命令。该项功能允许用户直接在容器内部进行交互,提升了操作便捷性。然而,对于安全要求较高的用户,在操作便利的同时希望进一步强化访问控制,确保只有特定的 IP 地址能够访问 VKE 控制台,则可以通过本文方案配置访问策略,从而提升集群的安全性,防止未经授权的访问,保障系统的稳定和数据的安全。
示例策略代码如下:
{ "Statement": [ { "Effect": "Deny", "Action": [ "vke:GetTerminal" ], "Resource": [ "*" ], "Condition": { "NotIpAddressIfExists": { "volc:SourceIp": [ "192.168.xx.xx" ] } } } ] }
上述示例策略表示如果请求访问 VKE 控制台的 IP 地址不是192.168.xx.xx
,则拒绝访问。该示例策略配合集群中一些常规的 Effect 为 Allow 的策略(例如 VKEReadOnlyAccess),可以有效防止不安全的网络访问 VKE 控制台中的 Pod。策略代码参数说明如下所示:
参数 | 说明 |
---|---|
Effect | 访问策略的效果,本示例取值为 Deny,表示 拒绝 操作。更多语法说明,请参见 效果(Effect)。 |
Action | 被拒绝的具体操作,本示例取值为 vke:GetTerminal,表示拒绝(禁止)获取 Kubernetes 集群的终端访问。更多语法说明,请参见 操作(Action)。 |
Resource | 指定的操作起作用的资源,您可以根据需求自定义设置:您也可以指定具体的集群 ID,表示禁止获取该集群的终端访问权限。更多语法说明,请参见 资源(Resource)。
|
Condition | 定义策略生效的条件,本文示例使用 NotIpAddressIfExists,表示如果请求中包含了volc:SourceIp 字段,且字段值192.168.xx.xx 时允许访问,否则拒绝访问。更多语法说明,请参见 条件(Condition)。 |
说明
IAM 的访问控制策略以 Deny 优先,即如果多个策略叠加,有一个策略是 Deny,那么最终效果为 Deny,因此您可以叠加上述的策略到任意的集群放通策略上。
您可以通过如下步骤应用 IAM 访问策略,保护您 Kubernetes 集群的访问权限:
说明
本示例中请确保被添加策略的 IAM 用户或 IAM 角色拥有 Pod 的 exec 权限,否则无法测试权限控制效果。