我有一个部署在GKE集群上的java应用程序。我们管它叫“骑兵”
应用程序应该能够使用helm命令在同一个GCP项目上部署其他应用程序(可以是相同的GKE或不同的GKE集群)。
我们能够使用身份验证做到这一点,其中JSON密钥被提供给"orchestrator“,我们可以使用它来生成令牌。
我的问题是。由于“orchestrator”和其他应用程序都运行在同一个GCP项目上(有时运行在同一个GKE集群上),是否有一种方法可以使用GCP自动发现的默认凭据,而不是为“orchestrator”应用程序生成和提供服务帐户JSON密钥?
这样,客户就不需要向我们的系统公开这个密钥,并且在没有应用程序干预的情况下,身份验证将在幕后进行。
GCP管理员能做些什么使这个用例无缝地工作吗?
发布于 2022-03-17 12:14:40
我将详细阐述我的意见。
当您使用Service Account时,您必须使用密钥进行身份验证--每个服务帐户都与公共/私有RSA密钥对相关联。在使用GKE集群时,是否考虑使用工作负载标识,就像使用和管理SA的最佳实践中提到的那样?
根据使用和管理服务帐户的最佳实践,所有非人类帐户都应该用服务帐户来表示。
服务帐户代表非人类用户。它们适用于工作负载(如自定义应用程序)需要访问资源或执行操作而不需要最终用户参与的情况。
因此,通常,每当您想要向应用程序提供某些权限时,都应该使用Service Account。
在服务帐户的密钥类型中,您可以找到所有Service Accounts都需要RSA对键的信息:
每个服务帐户都与公共/私有RSA密钥对相关联。Service凭据API使用这个内部密钥对创建短期服务帐户凭据,并对blobs和JSON令牌(JWT)进行签名。这个密钥对被称为Google管理的密钥对. 此外,您还可以创建多个公共/私有RSA密钥对(称为用户管理密钥对),并使用私钥使用Google进行身份验证。此私钥称为服务帐户密钥。
您也可以考虑工作负载标识,但我不确定这是否能满足您的需求,因为您的环境仍然有很多未知之处。
作为附加信息,有一种名为Basic Authentication的选项可以供您选择,但由于安全原因,从GKE1.19开始就不支持它了。在另一个堆栈案例中提到了这一点:我们禁止在Google Kubernetes Engine (GKE)中进行基本身份验证。。
总结:
为非人工帐户提供权限的最佳实践是使用Service Account。每个服务帐户都需要一对RSA Keys,您可以创建多个密钥。如果您有此选项,也可以使用Workload Identity,但由于缺乏详细信息,很难确定这在您的场景中是否有效。
附加链接:
发布于 2022-03-21 15:42:12
实现这一目标的一种方法是使用这里提到的默认凭据方法:自动查找凭据。GCP管理员可以将相同的SA附加到GKE集群资源(请参阅附加的屏幕快照),而不是向我们的应用程序公开SA密钥,默认的凭据机制将使用SA凭据来访问API和资源(取决于SA角色和权限)。

https://stackoverflow.com/questions/71455569
复制相似问题