访问谷歌工作区管理SDK与域外委托



我正在尝试使用NodeJS编写一个服务器应用程序,该应用程序访问我们的Google Workspaces(G-Suite(帐户的Admin SDK。到目前为止,我找到的所有教程都描述了以下过程:

  1. 在控制台中设置项目并启用所需的API,例如Admin SDK API
  2. 在GCP项目中创建一个服务帐户
  3. 为服务帐户启用G Suite域范围委派
  4. 创建G-Suite管理员帐户。我们称之为admin@mycompany.com
  5. 在向API发出请求时,使用服务帐户模拟管理员帐户

因此访问目录API可能看起来像这样:

const serviceAccountEmail = "gcp-service-account@gcp-project.iam.gserviceaccount.com";
const privateKey = "-----BEGIN PRIVATE KEY-----....";
const scopes = ['https://www.googleapis.com/auth/admin.directory.group'];
const adminEmail = "admin@mycompany.com";
const auth = new google.auth.JWT(
serviceAccountEmail,
null,
privateKey,
scopes,
adminEmail,
);
const admin = await google.admin({
version: 'directory_v1',
auth,
});

以下注释显示在服务帐户上的Enable G Suite Domain-wide Delegation复选框旁边:

允许此服务帐户被授权访问G Suite域上的所有用户数据,而不需要>手动授权。了解更多

也许我没有正确理解这一点,但这难道不是令人难以置信的宽容,严重违反了最低特权原则吗?我知道我的应用程序需要作为admin@mycompany.com管理员帐户进行身份验证,但有没有办法将其限制为仅此帐户,而不是"G Suite域上的所有用户数据">

服务帐户只能访问与该帐户共享的任何内容,根据向服务帐户授予全域权限:

G Suite域的管理员可以授权应用程序代表G Suite域中的用户访问用户数据。

这意味着服务帐户只有可以访问应用程序正在模拟的帐户中的数据。

您负责您的安全帐户

例如,您可以实现一项检查,以允许模拟特定组织单位的帐户,但所有这些检查都必须在应用程序级别完成。

例如,使用您的服务帐户,您可以检查模拟帐户属于哪个组织单位。如果检查成功,您可以使用域范围的委派服务帐户模拟此帐户,并执行所需操作。

单独来看,全域委派确实是一个非常强大的功能,它允许应用程序访问您组织的整个G Suite帐户中的用户数据。作为一个超级管理员帐户,您有责任正确、安全地管理它。

参考文献

授权域范围的授权

控制域范围委派

当超级管理员单独启用作用域时,会部分强制执行最小权限原则。

但正如您所猜测的,这对用户数据无效,因为应用程序具有访问权限并且可以模拟任何用户。所以答案是否定的,你不能把它限制在一封电子邮件内。

对我来说似乎有些过头了,因为有些电子邮件太敏感了,你不应该模仿它们。

最新更新