我正在尝试使用 AWS 设置 Google Identity Federation,以便从 aws lambda 函数进行 admin.directory API 调用。它是用 Java 编写的。
我设置了工作负载池,创建了服务帐户并建立了指向 aws lambda 执行角色的主体。
检查后,在 lambda 内部,使用 AwsCredential 构建凭证时会生成访问令牌(https://github.com/googleapis/google-auth-library-java/blob/ab872812d0f6e9ad7598ba4c4c503d5bff6c2a2b/oauth2_http/java/com/google/auth /oauth2/AwsCredentials.java#L60),因此我开始了解到这个 aws 资源已被 GCP 正确识别
但是,当对目录 API 进行 API 调用时,我收到以下错误(已格式化)
{"code": 403,
"errors": [{"domain": "global",
"message": "Not Authorized to access this resource/api",
"reason": "forbidden"}],
"message": "Not Authorized to access this resource/api"}
我确信在调用 API 时设置了正确的范围。因为带有密钥文件的服务帐户可以与相同的代码完美配合。
我的问题是
我怀疑我没有正确配置服务帐户权限? (“https://www.googleapis.com/auth/admin.directory.user.readonly”)如何为服务帐户启用此范围?我似乎找不到合适的角色,我已将角色设置为“所有者”进行测试,但仍然不起作用。
目录 API 需要超级管理员模拟,但 AwsCredential 类或 IdentityPoolCredential 没有 createDeleated 方法。我如何查询需要超级管理员模拟的 API?
对于那些偶然发现这个问题的人,我终于得到了答案。
长话短说,请参阅此链接(https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys#domain-wide-delegation),因为这是我如何解决问题的一般指南。
首先,我的印象是谷歌联盟并不是为了调用工作区API。如果您查看用于构建凭证的库代码,会发现没有找到“AWS”或其他联合凭证等凭证的委托方法;而且由于工作区中的许多功能都需要超级管理员模拟,这确实不是一件容易的事。以下是获取访问令牌的步骤,该令牌可用于通过正确的委派调用工作区 API。
有一些注意事项。
希望这有帮助!