注意:

使用 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 識別網域產生使用者群組成員報表的方法。

必要條件

作業 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 要求,以擷取結果總數,然後根據結果總數和每一要求計數計算所需的重複次數 (迴圈)。

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 執行命令檔並取得所需的報告。

  1. 登入 OCI 主控台,從畫面右上角開啟 Cloud Shell,然後上傳 Python 命令檔和 config.json 檔案。

    影像 1

    影像 2

    圖像 3

  2. 執行 pip3 install pandas --user 指令以安裝模組。

    圖像 4

    注意:針對任何模組錯誤執行命令。模組在使用前應先安裝。

  3. 現在執行 python GroupMembership_Pagination.py

  4. 下載 mainlist.csv

    影像 5

    影像 6

    注意mainlist.csv 檔案包含所有使用者群組成員詳細資訊。如果使用者不屬於任何群組,則會將值設為

確認書

作者 - Gautam Mishra (資深雲端工程師)

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center