我有一个python脚本,可查询Google BigQuery访问日志并提取“列入白名单”(MySQL db)IP地址/范围列表中不存在的条目。对于每个未列入白名单的日志条目,我将获取用户的登录名(john@mygoogledomain.com),并使用服务帐户(模拟管理员帐户)从中获取该用户的登录令牌,以列出分配给该用户的特定访问令牌clientId。目的是能够根据用户采取的某些操作来批准/阻止。
工作流程如下:
Python查询GBQ日志>向用户发送有关任何未列入白名单的条目的电子邮件,要求他们批准/阻止(是,这是我,不是,这不是我)>电子邮件包含指向php页面的链接(approve.php / IF:用户单击approve.php,并在白名单db中添加/确认条目 ELSE:用户单击reject.php,我尝试获取其令牌,按我们的clientId过滤,最后删除令牌。
列表令牌功能不适用于管理员不是(显然)不是管理员的域,因此gmail.com等第三方域不起作用,这很好,我对此有一个单独的更手动的过程
但是,这对于域为@ .iam.gserviceaccount.com的服务帐户也不起作用。我在这里可以做什么?
require_once '/var/www/html/gbq-audit/vendor/autoload.php';
putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/svc/creds.json");
$query_user = $row["user"]; //$row["user"] is an email address
$admin = "admin" . substr($query_user, strpos($query_user, "@"), strlen($query_user)-strpos($query_user, "@"));
//$admin = "admin@mydomain.com";
$client = new Google_Client();
$client -> useApplicationDefaultCredentials();
$client -> setSubject($admin);
$client -> setScopes("https://www.googleapis.com/auth/admin.directory.user.security");
$dir_svc = new Google_Service_Directory($client);
$response = $dir_svc -> tokens -> listTokens($query_user);
foreach($response["items"] as $token) {
if(strpos($token["displayText"], "specific app") || strpos($token["displayText"], "specific app")) {
echo $token["userKey"] . ": " . $token["displayText"] . " - " . $token["clientId"] . "<br />";
$scopes = $token["scopes"];
foreach($scopes as $scope) {
echo " " . $scope . "<br />";
}
}
}
我的代码适用于: normal-user@mydomain.com(将vc A / c委派为admin@mydomain.com)
但由于以下原因而失败:
normal-user@gmail|hotmail|external.com(这是预期的/原因),并且
svc-user@project.iam.gserviceaccount.com(这是有问题的情况)