概要
Microsoft Graph API を利用してAzureActiveDirectoryから指定したグループ情報(今回はグループメールアドレス)を取得し、そこからそのグループメンバーのUser-IDを取得するための Python プログラムです。
Access Token の取得については、このプログラム を使用しています。
実行環境
macOS Big Sur 11.1
python 3.8.3
実行プログラム
GetAzureGroupMember.py
import json
import requests
import argparse
import time
import pprint
from datetime import datetime, timedelta, date
from collections import OrderedDict
from GetAzureAccessToken import get_azure_access_token # Azureアクセスのためのアクセストークンの取得オリジナル関数
# メンバーを取得したいグループのメールアドレス
GROUP_ADDRESS_LIST = [
'tech-gp1@hogehoge.local',
'tech-gp2@hogehoge.local'
]
# グループに所属するUser情報(id, displayName)の取得
def get_user_from_group(access_token):
# グループIDの取得
groupid = OrderedDict()
groupmember = OrderedDict()
for num, dept in enumerate(GROUP_ADDRESS_LIST):
gid = get_group_id(access_token, num, dept)
groupid[dept] = gid
# グループメンバーの取得
gmember = get_group_member(access_token, num, dept, gid)
groupmember[dept] = gmember
# pprint.pprint(groupmember)
# print(groupid)
return groupid, groupmember
# グループメールアドレス毎でのユーザ情報の抽出
def get_group_id(access_token, num, dept) -> str:
# Microsoft Graphを実行するためのヘッダ情報
headers = {
'Authorization': 'Bearer %s' % access_token
}
# グループの id, ddisplayName, mail の取得のURL
GroupsGet_URL = "https://graph.microsoft.com/v1.0/groups?$filter=mail eq '" + \
dept + "'&$select=id,displayName"
print(GroupsGet_URL)
# グループ情報取得のGetリクエスト
res1 = requests.get(
GroupsGet_URL,
headers=headers
)
# requrest処理をクローズする
res1.close
# res1をjsonファイルに整形しグループID情報の取得
try :
print(res1.json()['value'])
return res1.json()['value'][0]['id']
except KeyError :
print(res1)
# グループメールアドレス毎でのユーザ情報の抽出
def get_group_member(access_token, num, dept, gid):
# Microsoft Graphを実行するためのヘッダ情報
headers = {
'Authorization': 'Bearer %s' % access_token
}
# グループメンバーの id, ddisplayName, mail の取得のURL
MemberGet_URL = "https://graph.microsoft.com/v1.0/groups/{" + \
gid + "}/members?$count=true&$select=id,displayName,mail"
print(MemberGet_URL)
# 全Users情報取得のGetリクエスト
res1 = requests.get(
MemberGet_URL,
headers=headers
)
# requrest処理をクローズする
res1.close
# res1をjsonファイルに整形しグループメンバー情報の取得
return res1.json()['value']
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='グループのメールアドレスからそのGroup-IDを取得し、そこからグループメンバーのUser-IDを取得する')
args = parser.parse_args()
start = time.time()
access_token = get_azure_access_token()
groupid, groupmember = get_user_from_group(access_token)
get_time = time.time() - start
print("")
pprint.pprint(groupid)
print("")
pprint.pprint(groupmember)
print("")
print("取得時間:{0}".format(get_time) + " [sec]")
print("")
プログラムの実行
最初にヘルプを表示してみます。
$ python GetAzureGroupMember.py -h
usage: GetAzureGroupMember.py [-h]
グループのメールアドレスからそのGroup-IDを取得し、そこからグループメンバーのUser-IDを取得する
optional arguments:
-h, --help show this help message and exit
では、グループに所属するメンバー(ユーザ)の情報を取得してみます。
取得する情報は displayName, id, mail となます。
プログラム中の print文/pprint文を参照に以下の結果を確認ください。
$ python GetAzureGroupMember.py
https://graph.microsoft.com/v1.0/groups?$filter=mail eq 'tech-gp1@hogehoge.local'&$select=id,displayName
[{'id': 'aaaaaaaa-5798-4bcc-9c29-bbbbbbbbbbbb', 'displayName': '04_技術本部/Group1'}]
https://graph.microsoft.com/v1.0/groups/{aaaaaaaa-5798-4bcc-9c29-bbbbbbbbbbbb}/members?$count=true&$select=id,displayName,mail
https://graph.microsoft.com/v1.0/groups?$filter=mail eq 'tech-gp2@hogehoge.local'&$select=id,displayName
[{'id': 'eeeeeeee-45e3-4985-add1-cccccccccccc', 'displayName': '04_技術本部/Group2'}]
https://graph.microsoft.com/v1.0/groups/{eeeeeeee-45e3-4985-add1-cccccccccccc}/members?$count=true&$select=id,displayName,mail
OrderedDict([('tech-gp1@hogehoge.local',
'aaaaaaaa-5798-4bcc-9c29-bbbbbbbbbbbb'),
('tech-gp2@hogehoge.local',
'eeeeeeee-45e3-4985-add1-cccccccccccc')])
OrderedDict([('tech-gp1@hogehoge.local',
[{'@odata.type': '#microsoft.graph.user',
'displayName': 'Satoh Koichi',
'id': '7f7f7f7f-9c7a-48f6-bea4-2a2a2a2a2a2a',
'mail': 'satoh@hogehoge.local'},
:
中略
:
{'@odata.type': '#microsoft.graph.user',
'displayName': 'Mikuni Rentaro',
'id': '3a3a3a3a-4b0c-43d2-8361-d4d4d4d4d4d4',
'mail': 'mikuni@hogehoge.local'}]),
('tech-gp2@hogehoge.local',
[{'@odata.type': '#microsoft.graph.user',
'displayName': 'Yamada Taro',
'id': 'c2c2c2c2-6038-4516-9d80-4f4f4f4f4f4f',
'mail': 'yamada@hogehoge.local'},
:
中略
:
{'@odata.type': '#microsoft.graph.user',
'displayName': 'Suzuki Ichiro',
'id': '8a8a8a8a-181b-48e0-85dc-2c2c2c2c2c2c',
'mail': 'suzuki@hogehoge.local'}])])
取得時間:0.9662401676177979 [sec]
参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。
Azure AD ユーザーアカウントの棚卸しに便利なスクリプト
Microsoft Graph を使ってみよう : Graph エクスプローラー