尝试从 GKE 集群调用云函数时出现 403 错误

问题描述 投票:0回答:1

就上下文而言,我正在向部署到 GKE 集群上的 API 发送 POST 请求。设置成功,但当我将 POST 发送到面向外部的端点时,遇到以下错误。

状态:403 响应: b“无法生成身份令牌;IAM 返回 403 Forbidden:资源上的权限“iam.serviceAccounts.getOpenIdToken”被拒绝(或者可能不存在)。

当我的 API 尝试调用云函数时,就会发生这个错误。

我的集群已启用工作负载身份,并且正在使用我的项目的默认计算引擎服务帐户 (SA1) 运行。我已经注释了集群的服务帐户 yaml 文件,以及它尝试调用的云功能的服务帐户 (SA2)。它们都具有工作负载身份用户和服务帐户令牌创建者角色,因此应将上述权限提供给此工作流中涉及的任何服务帐户。如何解决此错误并从 GKE 集群成功调用云函数?

注意:我看过类似的帖子:无法从GKE集群访问云功能

但是,最终没有解决方案。

google-cloud-platform google-cloud-functions google-kubernetes-engine
1个回答
0
投票

我找到了我的问题。

我没有正确设置 Kubernetes 服务帐户。我应该将工作负载身份用户和云函数调用者 + 管理员角色赋予与集群工作负载身份关联的 kubernetes 服务帐户。

我没有看到此服务帐户出现在 IAM 部分中(它应该采用

principal://iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<project_id>.svc.id.goog/subject/ns/<namespace>/sa/<kubernetes service account>
的形式)。确保为此服务帐户提供访问您需要从集群访问的 API 所需的确切权限。在本例中,我指定了角色
Cloud Function Admin
Cloud Function Invoker
,它解决了我的访问问题。

© www.soinside.com 2019 - 2024. All rights reserved.