【逗老師帶你學IT】Google Admin服務賬號+API管理G suit內所有網域用戶

本文主要介紹使用Google API服務賬號和Google Admin管理G suit內所有網域用戶。主要技術點在

Google API 服務賬號申請
Google OAuth 2.0認證獲取token
Google Admin內對API應用授權

一、Google API服務賬號申請

1、註冊Google Cloud Platform平臺

訪問https://console.developers.google.com
初次使用GCP(Google Cloud Platform)的用戶會自動彈出註冊頁面
在這裏插入圖片描述

2、新建GCP開發者項目

在API信息中心標題欄,點擊“組織”按鈕,然後點擊新建項目。
在這裏插入圖片描述

3、啓用Admin SDK

新項目建立完成後,進入項目的信息中心,點擊“+啓用API和服務
在這裏插入圖片描述
在搜索欄搜索Admin,可以快速檢索到Admin SDK
在這裏插入圖片描述
點擊“啓用”
在這裏插入圖片描述

4、申請Google API服務賬號

在API和服務控制檯內,點擊“憑據”,“+創建憑據”,“服務賬號
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在創建服務賬號的第三步,下載密鑰私鑰文件,是一個JSON格式的祕鑰,用於服務賬號的鑑權。
在這裏插入圖片描述
記得保存好此祕鑰,後面用得到,並且不要分享到Github等公開場合。
在這裏插入圖片描述
創建完成後,點擊賬號名稱進入賬號管理,啓用G suit全網與委派功能。一旦啓用此功能後,OAuth2.0客戶端處會自動生成用於管理G suit
在這裏插入圖片描述
在這裏插入圖片描述
至此,記錄下API OAuth2.0客戶端ID,後面用得到。

二、G Suit控制檯授權API服務賬號管理

1、添加API OAuth2.0客戶端ID至G Suit

登錄https://admin.google.com
在這裏插入圖片描述
往後翻,找到高級設置,點擊管理API客戶端訪問權限
在這裏插入圖片描述
客戶端名稱部分,添加剛纔創建API服務賬號時生成的客戶端ID,作用域部分,填寫Google OAuth2.0身份認證裏提供的scope作用域URL。
例如本利中,我們需要管理G Suit所有網域下的所有用戶,因此本利的scope作用域

View and manage the provisioning of users on your domain:
https://www.googleapis.com/auth/admin.directory.user

在這裏插入圖片描述

2、關於Scope作用域

對於不同功能的API請求,在請求開始前的OAuth2.0認證階段,就需要提供scope來請求token。對於獲取的token,也僅具備訪問此Scope作用域的權限。
Google API中涉及的做用戶請見下文鏈接:
Directory API: Authorize Requests
以及,在開發文檔中,每個功能的詳細介紹中都會註明該功能需要請求的scope
在這裏插入圖片描述

3、G Suit內授權服務賬號管理用戶的權限

API服務賬號和Scope作用域約束的是API調用權限,沒有這兩個先決條件,API接口都沒法正常運行。
但是,因爲我們本例中調用的API最終實現的是管理G Suit內所有用戶。因此還需要在G Suit的權限體系下爲API授權。
(Google內部的權限劃分真特麼的細緻)
通過OAuth2.0之後,有兩種方式可以使服務賬戶具備全網域賬號的管理權限。

1、授權API應用可管理全部用戶。
2、創建一個G Suit用戶管理員賬戶,之後API調用時委派身份爲此賬戶。

實話說,別看第一種方式聽起來簡單,實際操作時,委派身份的方式反而更簡單。

3.1 授權API應用可管理全部用戶。

此方法截圖太長了,僅文字描述

1)訪問G Suit控制檯->安全性->設置->API權限->應用訪問權限控制->管理第三方應用的訪問權限->添加應用->OAuth應用名稱或客戶端ID
2)輸入API OAuth2.0客戶端ID,點擊搜索
3)如果輸入的客戶端ID正確,可以查找到之前創建的API認證客戶端
4)點擊添加按鈕,添加API應用.
5)找到剛剛添加的應用,點擊右側,Change Access,配置爲受信任。

3.2、通過委派管理員身份的方式獲取管理員權限

在獲取OAuth2.0階段的credentials是,使用.with_subject方法委派一個具備管理權限的用戶身份即可。
在這裏插入圖片描述

三、API接口調用範例

1、Google SDK Python開發環境安裝

pip安裝Google提供的SDK包

pip install google-api-python-client
pip install google-ads
pip install oauth2client

2、Google SDK Github倉庫地址

Google APIs Client Library for Python

3、Google Admin SDK文檔

首頁>產品>G Suite Developer>Admin SDK>Directory API>參考>API Reference

4、Google OAuth 2.0文檔

首頁>產品>Google Identity Platform>指南>Using OAuth 2.0 to Access Google APIs

5、本例中的範例代碼

#coding=utf-8
import datetime
import os
import re
import sys
import time
import requests
import httplib2
from googleapiclient.discovery import build
from google.oauth2 import service_account

SCOPES = ['https://www.googleapis.com/auth/admin.directory.user']
SERVICE_ACCOUNT_FILE = './account_manager_service_account_cc97f7d70a741.json'
#授權空間(scope)和授權祕鑰
#授權的JSON文件,參見第一章節第4節中申請服務賬號時創建的JSON祕鑰文件。

class APIrequest:

	def get_credentials():
		credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
		#授權應用訪問G suit控制檯,獲取授權信息
		credentials = credentials.with_subject('[email protected]')
		#委派管理員權限
		return credentials
	def get_user_data(credentials,userKey_in):
	#獲取用戶信息
		try:
			service = build("admin", "directory_v1", credentials=credentials)
			results = service.users().get(userKey=userKey_in).execute()
		except Exception as err:
			raise err
		else:
			return results
		
	def update_user_password(credentials,userKey_in,password_in):
		try:
			update_data={"password": password_in,"changePasswordAtNextLogin": "true"}
			service = build("admin", "directory_v1", credentials=credentials)
			results = service.users().update(userKey=userKey_in,body=update_data).execute()
		except Exception as err:
			raise err
		else:
			return results
			
	def suspend_user(credentials,userKey_in):
		try:
			update_data={"suspended": "true"}
			service = build("admin", "directory_v1", credentials=credentials)
			results = service.users().update(userKey=userKey_in,body=update_data).execute()
		except Exception as err:
			raise err
		else:
			return results
			
	def add_user(credentials,primaryEmail,familyName,givenName,password):
		try:
			insert_data={
				"name": {
					"familyName": familyName,
					"givenName": givenName,
					},
				 "password": password,
				 "primaryEmail": primaryEmail,
				 "changePasswordAtNextLogin": "true"
				}
			service = build("admin", "directory_v1", credentials=credentials)
			results = service.users().insert(body=insert_data).execute()
		except Exception as err:
			raise err
		else:
			return results

def main():
	sys.argv[1]='suspend_user'
	sys.argv[2]='[email protected]'
	sys.argv[3]='P@ssw0rd123123123444'
	sys.argv[4]='new'
	sys.argv[5]='user'
	method=sys.argv[1]
	credentials=APIrequest.get_credentials()
	try:
		if method=="update_password":
			userKey=sys.argv[2]
			password=sys.argv[3]
			APIrequest_get_data=APIrequest.update_user_password(credentials,userKey,password)
			#print(APIrequest_get_data)
		if method=="get_user_info":
			userKey=sys.argv[2]
			APIrequest_get_data=APIrequest.get_user_data(credentials,userKey)
			print(APIrequest_get_data)
		if method=="suspend_user":
			userKey=sys.argv[2]
			APIrequest_get_data=APIrequest.suspend_user(credentials,userKey)
			#print(APIrequest_get_data)
		if method=="add_user":
			primaryEmail=sys.argv[2]
			password=sys.argv[3]
			familyName=sys.argv[4]
			givenName=sys.argv[5]
			APIrequest_get_data=APIrequest.add_user(credentials,primaryEmail,familyName,givenName,password)
			#print(APIrequest_get_data)
	except Exception as err:
		print(err)
	else:
		print("200:OK")


if __name__ == '__main__':
    main()

6、API返回數據

Google API返回JSON格式數據,例如本例中查詢用戶信息,會獲取以下信息。
JSON具體字段解釋:
Google Admin SDK | Users Resource representations
在這裏插入圖片描述
往期回顧:
【逗老師帶你學IT】PRTG監控系統通過企業微信推送圖文混排告警消息
【逗老師帶你學IT】PRTG HTTP API獲取指定傳感器流量圖表圖片
【逗老師帶你學IT】PRTG監控系統合併多個傳感器通道數據
【逗老師帶你學IT】PRTG監控系統通過企業微信推送告警消息
【逗老師帶你學IT】PRTG監控系統配合樹莓派採集企業內部無線網絡質量
【逗老師帶你學IT】vMware ESXi 6.7合併第三方硬件驅動
【逗老師帶你學IT】Kiwi Syslog Server安裝和配置教程
【逗老師帶你學IT】Kiwi Syslog Web Access與Active Directory集成認證
【逗老師帶你學IT】vMware ESXi 6.7合併第三方硬件驅動
【逗老師帶你學IT】Windows Server Network Policy Service(NPS)記賬與審計
【逗老師帶你學IT】Windows Server NPS服務構建基於AD域控的radius認證
【逗老師帶你學IT】AD域控和freeradius集成認證環境,PAP,MSCHAPV2
【逗老師帶你學IT】深信服SSL遠程接入與深信服行爲審計同步登陸用戶信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章