我正在使用 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"
}
{
"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 存储桶。
我没有找到该文档,但当我测试 Alpha 预览时,在 STS 令牌之后还有 1 个额外步骤。
然后,使用这个新令牌下载您的文件。
我确信您可以通过深入研究 Google Cloud 客户端库来确认这一点,但我做不到,我目前正在机场转机!