Google 工作负载身份联合调用目录 API

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

我正在尝试使用 AWS 设置 Google Identity Federation,以便从 aws lambda 函数进行 admin.directory API 调用。它是用 Java 编写的。

{"code": 403,
 "errors": [{"domain": "global",
             "message": "Not Authorized to access this resource/api",
             "reason": "forbidden"}],
 "message": "Not Authorized to access this resource/api"}

我确信在调用 API 时设置了正确的范围。因为带有密钥文件的服务帐户可以与相同的代码完美配合。

我的问题是

  1. 我怀疑我没有正确配置服务帐户权限? (“https://www.googleapis.com/auth/admin.directory.user.readonly”)如何为服务帐户启用此范围?我似乎找不到合适的角色,我已将角色设置为“所有者”进行测试,但仍然不起作用。

  2. 目录 API 需要超级管理员模拟,但 AwsCredential 类或 IdentityPoolCredential 没有 createDeleated 方法。我如何查询需要超级管理员模拟的 API?

google-cloud-platform google-workspace google-admin-sdk service-accounts google-directory-api
1个回答
0
投票

对于那些偶然发现这个问题的人,我终于得到了答案。

长话短说,请参阅此链接(https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys#domain-wide-delegation),因为这是我如何解决问题的一般指南。

首先,我的印象是谷歌联盟并不是为了调用工作区API。如果您查看用于构建凭证的库代码,会发现没有找到“AWS”或其他联合凭证等凭证的委托方法;而且由于工作区中的许多功能都需要超级管理员模拟,这确实不是一件容易的事。以下是获取访问令牌的步骤,该令牌可用于通过正确的委派调用工作区 API。

  1. 按照指导配置您的工作负载和外部 IDP。
  2. 根据客户端库配置 json 文件创建凭证。
  3. 使用凭证中的访问令牌调用signJWT API。在这里,确保 sub 和 iss 都存在,其中 sub 是超级管理员用户(或您想要模拟的任何人),iss 是服务帐户。
  4. 获取签名的 JWT 后,调用 token API("https://oauth2.googleapis.com/token") 获取新 token。授权类型必须是“urn:ietf:params:oauth:grant-type:jwt-bearer”。
  5. 使用令牌构建您选择的服务。如果您使用 Java,请确保将 HttpRequestInitializer 替换为自定义初始值设定项,因为您将要使用的访问令牌无法自动刷新。
  6. 完成!

有一些注意事项。

  • 确保您的服务帐户具有正确的角色,即服务帐户令牌生成器。您可以从 IAM 进行设置。我意识到为主体和服务帐户赋予角色是两件不同的事情。如果我错了请纠正我。
  • 当您在签署 JWT 时遇到错误时,请确保在 JWT 中包含 iat 密钥。 exp 不是必需的,并且在不包含时自动设置。但这是必要的。

希望这有帮助!

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