为了解决GKE应用程式连接到其他GCP服务,现行授权验证方法存在的安全问题,Google为GKE用户推出Workload Identity功能,透过建立Kubernetes服务帐户和Cloud IAM服务帐户之间的关联,用户能够定义工作负载的身份,不需要管理Kubernetes机密资讯或是IAM帐户金钥,GKE应用程式就能自动地存取其他云端服务。
过去GKE工作负载存取Google云端API,主要使用两种授权验证方法,一种是储存服务帐号金钥作为Kubernetes机密资讯,另一种则是使用节点的IAM服务帐号,但这两种方法都存在管理和安全性的问题。
第一种方法是把Cloud IAM服务帐户当作是应用程式请求Google API的身份标示,开发人员可以为每个应用程式创建独立的IAM服务帐户,并将金钥下载下来作为Kubernetes的机密资讯,但Google提到,这个方法的应用过程不只麻烦,而且由于服务帐户金钥10年才会过期,因此在开发者没发现被入侵的情况下,骇客有机会可以长期存取使用。
第二种方法则是使用节点的IAM服务帐号,因为每个GKE节点都是Compute Engine实例,所以GKE上执行的应用程式都会继承Compute Engine实例的属性,而这也包括了IAM服务帐号,不过在容器化应用程式的架构中,用户通常会希望特定的Pod拥有存取权限就好,避免授予其他Pod不需要的权限,但是这种方法无可避免地,会让节点上的所有Pod都同时具有权限,这违反只给应用程式所需资源的最小权限原则。
由于现存两种授权方式各有缺点,因此Google推出了Workload Identity功能,提供GKE应用程式更安全也更快速的GCP服务存取验证方法。Kubernetes服务帐户与Cloud IAM服务帐户之间的关联是由Identity命名空间定义,当用户在丛集启用Workload Identity之后,专案会便会收到Identity命名空间,共用Kubernetes服务帐户名称、Kubernetes命名空间以及Identity命名空间的应用程式,将获得存取Cloud IAM服务帐户的权限。
用户授权Kubernetes服务帐户使用目标IAM服务帐户,并以Kubernetes命名空间更新IAM服务帐户,而这就能让Kubernetes工作负载知道,要使用哪个服务帐户来存取Google云端服务,只要工作负载使用的是标准Google客户端函式库存取云端服务,就能利用设定的IAM服务帐户进行存取。Workload Identity的有效范围是以专案为单位,因此用户可以为专案中的新丛集或是现有丛集授予权限。
Workload Identity带来的好处除了可以实施最小权限原则,让所有工作负载仅具有需要的对低权限,当发生安全问题时,也能限制受到影响的范围,而且因为命名空间服务帐号的凭证是由Google管理,因此也减少人为发生错误的可能性,而且实际发出的工作负载凭证也仅在短时间有效,比起10年效期的服务帐户金钥,当恶意入侵发生时,将能缩短影响的时间。
文章评论(0条评论)
登录后参与讨论