注意:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它會使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值替代為您雲端環境特定的值。
使用 Python 從 OCI IAM 識別網域產生使用者群組成員報表
簡介
Oracle Cloud Infrastructure (OCI) 是能夠提供一系列雲端服務的雲端平台,包括儲存、網路及基礎架構。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 是一項服務,可讓您管理對 OCI 資源的存取。它為使用者和群組提供認證和授權。
OCI IAM 的其中一個主要功能是將使用者指派給群組,以簡化存取管理。OCI IAM 的客戶之一,就是在 OCI IAM 識別網域產生報表。您可以從 OCI IAM 識別網域主控台輕鬆產生數個 IAM 報表。不過,目前在 OCI IAM 中取得使用者群組成員身分報表並不是立即可用的功能,但您可以使用 REST API 呼叫輕鬆產生。
對象
本教學課程的對象為 IAM 專業人員和管理員。
目標
本教學課程將介紹使用搭配 Python 的 REST API,從 OCI IAM 識別網域產生使用者群組成員報表的方法。
必要條件
- 作用中 OCI 訂閱。
- 熟悉 OCI IAM 和 Python。
- 必須具備使用 OCI IAM 識別網域 REST API 的知識。
- 具備管理應用程式授權的 IAM 使用者 (識別網域管理員、安全管理員或應用程式管理員)。
- 系統上安裝的 Python 3.x。
- 已安裝 'urllib3'、'requests' 及 'pandas' Python 套裝軟體。
作業 1:在 OCI IAM 識別網域中建立機密應用程式
依照教學課程建立機密應用程式並擷取從屬端 ID 和從屬端加密密碼,之後便可用來執行對 OCI IAM 的 REST API 呼叫,以擷取存取記號和後續的 API 端點。
作業 2:設定 config.json
檔案
在您的本機機器上設定配置檔案。config.json
檔案包含用來產生存取權杖的識別網域 URL、從屬端 ID 以及從屬端加密密碼相關資訊。
{
"iamurl" : "https://idcs-###########.identity.oraclecloud.com",
"client_id" : "#######################",
"client_secret" : "#######################"
}
作業 3:取得存取權杖
config.json
檔案放置之後,首先需要產生存取記號,這可用來進一步對 OCI IAM 端點進行 REST API 呼叫。
在下面的程式碼片段中,函數 get_encoded 採用從屬端 ID 和從屬端加密密碼作為引數,然後傳回 base64-encoded 字串。
此編碼字串會進一步以引數形式傳送給函數 get_access_token
作為「授權」標頭,以透過執行 POST 要求來取得存取權杖。
#get base64 encoded
def get_encoded(self,clid, clsecret):
encoded = clid + ":" + clsecret
baseencoded = base64.urlsafe_b64encode(encoded.encode('UTF-8')).decode('ascii')
return baseencoded
#get access token
def get_access_token(self,url, header):
para = "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
response = requests.post(url, headers=header, data=para, verify=False)
jsonresp = json.loads(response.content)
access_token = jsonresp.get('access_token')
return access_token
#print access token
def printaccesstoken(self):
obj = IAM()
encodedtoken = obj.get_encoded(clientID, clientSecret)
extra = "/oauth2/v1/token"
headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'Authorization': 'Basic %s' % encodedtoken, 'Accept': '*/*'}
accesstoken = obj.get_access_token(idcsURL + extra, headers)
return accesstoken
作業 4:擷取使用者資訊 - 使用者名稱和群組成員
現在我們有存取權杖,我們可以對不同的 OCI IAM 識別網域 REST 端點進行進一步的 REST API 呼叫。下方的程式碼片段顯示我們如何向 /admin/v1/Users
端點提出具有必要標頭和參數的 GET 要求,以擷取結果總數,然後根據結果總數和每一要求計數計算所需的重複次數 (迴圈)。
-
此函數會初始化空白清單以儲存所有使用者資訊。它具有迴圈,可擷取批次中的使用者資訊。
-
在每個重複中,它會傳送具有適當參數的 GET 要求來擷取使用者資訊批次 (使用者名稱和群組成員身分) ,然後將它們新增到空白說明中。
-
如果使用者屬於一或多個群組,則輸入另一個迴圈來擷取每個群組名稱。如果使用者不屬於任何群組,它會將值設為無,然後將字典的副本附加至清單。
-
在所有重複之後,函數會傳回包含所有必要使用者資訊的主要清單。
def searchusers(self):
obj = IAM()
accesstoken = obj.printaccesstoken()
startIndex = 0
count = 50
extra = "/admin/v1/Users"
headers = {'Accept': '*/*', 'Authorization': 'Bearer ' + accesstoken}
param = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
resp = requests.get(idcsURL + extra, headers=headers, verify=False, params=param)
jsonresp = json.loads(resp.content)
total = jsonresp.get("totalResults")
print(total)
tCount = total
loop = int(tCount / count)
print(loop)
mainlist = []
for i in range(loop + 1):
param1 = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
resp1 = requests.get(idcsURL + extra, headers=headers, verify=False, params=param1)
startIndex += count
jsonresp1 = json.loads(resp1.content)
tempjsn = jsonresp1.get("Resources")
for x in tempjsn:
trimjsn ={}
user = trimjsn["Username"] = x.get("userName")
grp = x.get("groups")
if grp is None:
trimjsn["Groups"] = "None"
mainlist.append(trimjsn.copy())
continue
for i in grp:
grpname = trimjsn["Groups"] = i.get("display")
print(trimjsn)
mainlist.append(trimjsn.copy())
print(mainlist)
return mainlist
任務 5:將清單轉換為 CSV 報表
取得使用者資訊之後,下列程式碼片段將有助於從主要清單資料建立 DataFrame ,然後將 DataFrame 儲存至目前工作目錄中名為 mainlist.csv
的 CSV 檔案。
df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')
作業 6:在 Cloud Shell 中使用該命令檔
一旦程序檔就緒,即可在本機機器 (已安裝 Python) 上或任何支援 Python 開發的 IDE 上輕鬆執行該程序檔。在此,我們使用 OCI Cloud Shell 執行命令檔並取得所需的報告。
-
登入 OCI 主控台,從畫面右上角開啟 Cloud Shell,然後上傳 Python 命令檔和
config.json
檔案。 -
執行
pip3 install pandas --user
指令以安裝模組。注意:針對任何模組錯誤執行命令。模組在使用前應先安裝。
-
現在執行
python GroupMembership_Pagination.py
。 -
下載
mainlist.csv
。注意:
mainlist.csv
檔案包含所有使用者群組成員詳細資訊。如果使用者不屬於任何群組,則會將值設為無。
相關連結
確認書
作者 - Gautam Mishra (資深雲端工程師)
其他學習資源
探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。
如需產品文件,請造訪 Oracle Help Center 。
Generate User Group membership report from OCI IAM Identity Domains using Python
F82226-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.