使用Descope工作负载身份联邦访问GCS时遭遇403禁止错误
使用Descope作为IdP实现工作负载身份联邦访问GCS时遇到403 Forbidden错误
我正在用Descope作为身份提供商(IdP)实现工作负载身份联邦,以访问Google Cloud Storage(GCS)。已经成功将Descope JWT交换为Google访问令牌,但读取GCS存储桶对象时收到403 Forbidden错误。
已完成的步骤与配置
- Descope身份验证:已成功完成。
- 令牌交换:通过STS端点将Descope JWT成功交换为Google令牌,请求详情如下(敏感信息已匿名化):
请求负载:POST https://sts.googleapis.com/v1/token Content-Type: application/json{ "audience": "//iam.googleapis.com/projects/<my_project_id>/locations/global/workloadIdentityPools/descopeidp/providers/descope-default-oidc", "grantType": "urn:ietf:params:oauth:grant-type:token-exchange", "scope": "https://www.googleapis.com/auth/devstorage.read_only", "requestedTokenType": "urn:ietf:params:oauth:token-type:access_token", "subjectToken": "<descope_session_jwt>", "subjectTokenType": "urn:ietf:params:oauth:token-type:jwt" } - 错误信息:令牌交换成功,但使用Google令牌访问GCS时返回:
{ "error": { "code": 403, "message": "Caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist).", ... } } - 服务账号权限:已为
gcs-read服务账号分配roles/storage.objectViewer角色。 - 工作负载身份联邦:联邦配置已验证,IAM策略绑定看似正确。
已执行的排查步骤
- 确认
gcs-read服务账号已正确分配roles/storage.objectViewer角色。 - 验证联邦身份与
gcs-read服务账号的映射关系无误。 - 确认IAM策略绑定配置正确。
- 核实GCS存储桶与
gcs-read服务账号在同一项目中,且存储桶配置正常。
补充说明
- IAM角色绑定:已在Google Cloud控制台的IAM与管理>IAM页面,为
gcs-read服务账号在项目级别绑定roles/storage.objectViewer角色。 - 令牌生成范围:STS令牌请求中明确指定了
https://www.googleapis.com/auth/devstorage.read_only范围。 - 资源访问:目标GCS存储桶与
gcs-read服务账号同属一个项目,且无存储桶级IAM策略覆盖项目级权限。 - 工作负载身份联邦:已配置联邦规则允许Descope提供的身份扮演
gcs-read服务账号,该账号应继承对应权限。
基于上述配置,我认为必要的角色与范围均已设置,但仍无法访问GCS存储桶。请问Google Cloud设置中是否存在被忽略的细节或特定配置?恳请提供更多排查思路。
内容的提问来源于stack exchange,提问作者Dmytro Piskun
相关产品推荐
相关产品推荐

