通过 Descope 使用来自工作负载身份联合的令牌时,Google Cloud Storage 出现禁止错误

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

我正在使用 Descope 作为身份提供商 (IdP) 来实现工作负载身份联合,以访问 Google Cloud Storage (GCS)。我已成功将 Descope JWT 交换为 Google 访问令牌,但在尝试从 GCS 存储桶读取对象时遇到 403 Forbidden 错误。

以下是我实施的步骤和配置:

  1. 使用 Descope 进行身份验证:已成功完成。

  2. 令牌交换:使用具有以下有效负载的 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"
}
  1. 错误消息:尽管令牌交换成功,但在使用 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).",
        ...
    }
}
  1. 服务帐户权限:gcs-read 服务帐户已分配 Roles/storage.objectViewer 角色。

  2. 工作负载身份联合:联合似乎已正确配置,并且 IAM 策略绑定已验证。

采取的故障排除步骤:

  • 确认 gcs-read Google 服务帐户已分配 Roles/storage.objectViewer 角色。
  • 确保联合身份和 gcs-read 服务帐户之间的正确映射。
  • 已验证 IAM 策略绑定及其正确性。
  • 检查 GCS 存储桶是否与 gcs-read 服务帐户位于同一项目中并且配置正确。

尽管配置正确且令牌交换成功,但我仍无法按预期访问 GCS 存储桶。

google-cloud-platform google-cloud-storage google-iam workload-identity
1个回答
0
投票

我没有找到该文档,但当我测试 Alpha 预览时,在 STS 令牌之后还有 1 个额外步骤。

  • 像以前一样获取STS令牌
  • :通过调用此 API
  • 使用此 STS 令牌生成访问令牌

然后,使用这个新令牌下载您的文件。

我确信您可以通过深入研究 Google Cloud 客户端库来确认这一点,但我做不到,我目前正在机场转机!

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