google-cloud-platform - 服务帐户是否必须模拟用户才能访问 Directory Api?

标签 google-cloud-platform google-admin-sdk google-workspace service-accounts google-directory-api

我想我可能误解了服务帐户在 GCP 中的工作方式,因为我不明白为什么(在我的情况下)他们需要模拟用户来完成任务。

我需要在我的应用程序中访问 Workspace Admin SDK API 中的一些信息(例如 listing chromeos devices )而不提示用户登录。我认为最好的方法是使用服务帐户来执行此操作这样,我就可以将我的服务帐户的详细信息上传到我的应用程序,每次我需要一些数据时,它都会通过该帐户进行。

我在 GCP 中创建了我的服务帐户,然后在 Google Workspace 中为其提供了具有所需范围的全域委派。

起初测试时我遇到了 Forbidden 403 错误,因为我没有冒充任何用户。一旦我开始模拟用户,我就能够从 API 获取我需要的数据。我还确认,当我删除域范围委托(delegate)的某些范围时,我将无法再检索该数据。这意味着当我模拟 super 管理员时,我只能获取我提供服务帐户的范围内的数据。

这让我想到了一个问题,即为什么我首先需要冒充任何人?

这只是 Directory API 的问题吗?在他们的documentation , 它指出

Note: Only users with access to the Admin APIs can access the Admin SDK Directory API, therefore your service account needs to impersonate one of those users to access the Admin SDK Directory API. Additionally, the user must have logged in at least once and accepted the Google Workspace Terms of Service.

所以我的问题是:我是否可以在不必模拟用户的情况下调用目录 API 作为服务帐户?如果不是,是否可以在不模拟用户的情况下以服务帐户的形式进行任何 API 调用,或者这只是一个目录 API 问题?

最佳答案

与此问题相关:

why I need to impersonate anyone in the first place?

服务帐户允许您进行身份验证并被授权访问 Google API 中的数据,如记录 here ,通过执行域范围的委托(delegate),您将授予服务帐户访问权限,以通过模拟您域中的用户来访问您的帐户数据。您可以将服务帐户视为一种自动授权的方式,因为它不仅可以对 Admin SDK 执行多个 API 的更改,还可以避免模拟用户每次都提供对给定 API 的访问权限。

您可以在不模拟用户的情况下调用 API,但这会导致仅访问服务帐户可用的数据,因为这些数据属于他们自己的数据,这意味着例如,如果您调用 Drive API 来创建一个使用服务帐户而不模拟它的文档,可以创建文件,但它只属于服务帐户,您将无法以管理员身份访问该数据数据将不属于您的域,因为服务帐户与用户帐户不同,您可以在此 documentation 中查看更多相关信息.

现在与关于模拟用户的最后一个问题相关,模拟是您代表用户进行 API 调用的一种方式,这样用户就不需要在每次需要执行更改时都提供 API 访问权限,这适用于 super 管理员用户和普通用户,这在文档中也有说明:

In enterprise applications you may want to programmatically access a user's data without any manual authorization on their part.

与其将服务帐户和模拟视为问题,不如将其视为一种通过 API 对用户进行更改的方式,而无需他们授予您这样做的权限。模拟允许您进行多项更改,并可以帮助您的组织在需要 API 调用时自动执行多项任务。

关于google-cloud-platform - 服务帐户是否必须模拟用户才能访问 Directory Api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70837108/

相关文章:

python-2.7 - 导入错误: No module named google_compute_engine

google-api - 无法使用 Google 日历 Api 锁定房间

google-admin-sdk - 无法检索 Google 群组的成员,获取无效输入

google-cloud-platform - Google Cloud Platform IAM,我没有收到成员(member)邀请函

google-cloud-platform - 如果用户查询公共(public) BigQuery 数据库,数据所有者可以看到已执行的查询

javascript - 从 Apps 脚本在 Google Apps 中创建用户

google-sheets - 使用独立插件向 Google 表格添加自定义函数

javascript - 如何从字符串中取出一个子字符串并将另一个字符串附加到该字符串并将其转换为数组

google-apps-script - 如何为共享云端硬盘发布云端硬盘应用

firebase - 我可以为 Google Cloud CDN URL 实现 Firebase 授权吗?