附註:

使用 Python 從以 UserStatus 和 LastSuccessfulLoginDate 為基礎的 OCI IAM 識別網域刪除非作用中使用者

簡介

Oracle Cloud Infrastructure (OCI) 是一個能夠提供一系列雲端服務的雲端平台,包括儲存、網路及基礎架構。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 是一項服務,可讓您管理對 OCI 資源的存取。它為使用者和群組提供認證和授權。

根據非作用中使用者在 OCI IAM Identity Domains 的上次成功登入日期刪除非作用中使用者,在 OCI 的每位使用者定價模型內容中特別有幫助,原因如下:

若要有效實作此程序,可以在 python 程式碼片段下方,根據非作用中使用者的上次成功登入日期和作用中 / 非作用中狀態,自動識別和刪除非作用中使用者。透過定期執行這類命令檔,您可以維護精實而安全的 IAM 環境,同時最佳化 OCI 中的成本。

適用對象

IAM 專業人員和管理員。

目標

使用搭配 Python 的 REST API,根據使用者狀態和 OCI IAM 識別網域中的 lastSuccessfulLoginDate 刪除使用者。

必要條件

作業 1:在 OCI IAM 識別網域中建立機密應用程式

請依照 Oracle Identity Cloud Service:第一個 REST API 呼叫建立機密應用程式並擷取從屬端 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:處理一批使用者資訊 (lastSuccessfulLoginDate、userStatus) 以清除使用者

我們可以使用此存取權杖對不同的 OCI IAM 識別網域 REST 端點進行進一步的 REST API 呼叫。下方的程式碼片段顯示我們如何對 /admin/v1/Users 端點提出必要標頭和參數的 GET 要求,以便擷取使用者總數,然後根據結果總數和每個要求的計數計算所需的重複次數。

作業 5:使用 OCI Cloud Shell 中的命令檔

命令檔就緒之後,就可以在本機機器 (已安裝 Python) 或任何支援 Python 開發的 IDE 上輕鬆執行。我們使用 OCI Cloud Shell 執行命令檔並取得想要的報表。

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

    影像 1

    影像 2

    影像 3

  2. 執行 python DeleteUser_PriorCheck_InactivePeriod60days_IsAdmin.py

    注意DeleteUser_PriorCheck_InactivePeriod60days_IsAdmin.py 是使用上述程式碼片段開發的 Python 命令檔。

認可

其他學習資源

瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

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