注意:

使用 Python 从基于 UserStatus 和 LastSuccessfulLoginDate 的 OCI IAM 身份域中删除非活动用户

简介

Oracle Cloud Infrastructure (OCI) 是一个云平台,能够提供存储、网络和基础设施等一系列云服务。Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 是一项支持您管理 OCI 资源访问的服务。它为用户和组提供验证和授权。

基于在 OCI IAM 身份域中上次成功登录日期删除非活动用户在 OCI 每用户定价模型的上下文中尤其有用,原因如下:

为了有效地实现这个过程,下面的 python 代码片段可用于根据非活动用户的上次成功登录日期和活动/非活动状态自动识别和删除非活动用户。通过定期运行此类脚本,您可以在 OCI 中保持精简、安全的 IAM 环境,同时优化成本。

目标读者

IAM 专业人员和管理员。

目标

使用带 Python 的 REST API,基于用户状态和 lastSuccessfulLoginDate 从 OCI IAM 身份域中删除用户。

先决条件

任务 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 帮助中心