使用 IdM API
大约 10 分钟
使用 IdM API
来源:官方文档 原始多页入口:使用 IdM API 内容规模:约 20,218 字符,20 个章节标题,58 个命令/代码块,1 条提示框
阅读提要
- 副标题:通过 Python 脚本使用 IdM API
- 摘要:IdM API 包含使用各种类型请求的示例。管理员和开发人员可以使用 IdM API 用 Python 编写自定义脚本,来将 IdM 与第三方应用程序集成。
- 主要章节:通过 Python 脚本使用 IdM API;对红帽文档提供反馈;第 1 章 IdM API 简介;第 2 章 IdM API 的基础知识;第 3 章 IdM API 和 IdM CLI 命令比较;第 4 章 IdM API 示例场景;第 5 章 审计 IdM API 操作
- 推荐阅读顺序:先看“阅读提要”和目录,再按章节查看“关键点/命令/注意”;需要原文细节时点击来源链接。
章节笔记
概览
- 该章节主要为下一级主题的入口。
通过 Python 脚本使用 IdM API
- 要点:摘要
对红帽文档提供反馈
- 要点:我们感谢您对我们文档的反馈。让我们了解如何改进它。
- 要点:通过 Jira 提交反馈(需要帐户)
- 列表:登录到 Jira 网站。
- 列表:在顶部导航栏中点 Create
- 列表:在 Summary 字段中输入描述性标题。
- 列表:在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 列表:点对话框底部的 Create。
第 1 章 IdM API 简介
- 要点:您可以使用命令行和基于 Web 的界面访问红帽身份管理的服务。使用身份管理 API,您可以通过第三方应用程序和用 Python 编写的脚本来与身份管理服务进行交互。
- 要点:身份管理 API 具有 JavaScript Object Notation Remote Procedure Call (JSON-RPC)接口。要对各种重要部分使用自动化,请通过 Python 访问身份管理 API。例如,您可以使用所有可用的命令从服务器检索元数据。
第 2 章 IdM API 的基础知识
- 要点:您可以使用 IdM API ,使用自定义脚本自动访问 IdM 环境。
2.1. 初始化 IdM API
- 要点:要使用 IdM API,首先在您的环境中初始化它。
- 要点:先决条件
- 列表:IdM 服务器或 IdM 客户端软件包已安装。
- 列表:一个有效的 Kerberos 票据已发布。
- 列表:要初始化 IdM API,请在脚本的开头包含以下代码: from ipalib import api api.bootstrap(context="server") api.finalize()
- 列表:要与 LDAP 服务器建立连接,请在 API 初始化后在脚本中添加以下逻辑: if api.env.in_server: api.Backend.ldap2.connect() else: api.Backend.rpcclient.connect() 如果您在 IdM 服务器上运行脚本,则此逻辑允许您的脚本直接连接到 LDAP 服务器。 如果您在 IdM 客户端上运行脚本,则脚本将使用远程过程调用(RPC)客户端。
- 列表:如果您在 IdM 服务器上运行脚本,则此逻辑允许您的脚本直接连接到 LDAP 服务器。
- 列表:如果您在 IdM 客户端上运行脚本,则脚本将使用远程过程调用(RPC)客户端。
- 命令/配置摘录:
from ipalib import api api.bootstrap(context="server") api.finalize()
if api.env.in_server: api.Backend.ldap2.connect() else: api.Backend.rpcclient.connect()2.2. 运行 IdM API 命令
- 要点:您可以在脚本中运行 IdM API 命令。要运行 IdM API 命令,请在脚本中使用 api.Command 结构。
- 要点:先决条件
- 列表:IdM API 已初始化。如需更多信息,请参阅 初始化 IdM API。
- 列表:例如,要列出有关用户的信息,请在脚本中包含以下代码: api.Command.user_show("user_name", no_members=True, all=True) 在本例中,您还将参数和选项传给命令 user_show。
- 列表:IPA API 命令
- 命令/配置摘录:
api.Command.user_show("user_name", no_members=True, all=True)2.3. IdM API 命令输出结构
- 要点:每个 IdM API 命令的输出都有四个部分。这些部分包含有关命令执行的各种信息。
- 要点:IdM API 输出结构
- 命令/配置摘录:
api.Command.user_add("test", givenname="a", sn="b")
{ "result": { "displayname": ["a b"], "objectclass": [ "top", "person", "organizationalperson", "inetorgperson", "inetuser", "posixaccount", "krbprincipalaux", "krbticketpolicyaux", "ipaobject", "ipasshuser", "ipaSshGroupOfPubKeys", "mepOriginEntry", "ipantuserattrs", ], "cn": ["a b"], "gidnumber": ["1445000004"], "mail": ["test@ipa.test"], "krbprincipalname": [ipapython.kerberos.Principal("test@IPA.TEST")], "loginshell": ["/bin/sh"], "initials": ["ab"], "uid": ["test"], "uidnumber": ["1445000004"], "sn": ["b"], "krbcanonicalname": [ipapython.kerberos.Principal("test@IPA.TEST")], "homedirectory": ["/home/test"], …2.4. 列出 IdM API 命令和参数
- 要点:您可以使用 command_show 和 param_show 来列出 IdM API 命令及其参数的信息。
- 要点:先决条件
- 列表:IdM API 已初始化。如需更多信息,请参阅 初始化 IdM API。
- 列表:要显示 user_add 命令的信息,请执行以下代码: api.Command.command_show("user_add") 这个命令的结果如下: { "result": { "name": "user_add", "version": "1", "full_name": "user_add/1", "doc": "Add a new user.", "topic_topic": "user/1", "obj_class": "user/1", "attr_name": "add", }, "value": "user_add", "messages": [ { "type": "warning", …
- 列表:要显示 user_add 命令的 givenname 参数的信息,请执行以下代码: api.Command.param_show("user_add", name="givenname") 这个命令的结果如下: { "result": { "name": "givenname", "type": "str", "positional": False, "cli_name": "first", "label": "First name", }, "value": "givenname", "messages": [ { "type": "warning", "name": "VersionMissing", …
- 命令/配置摘录:
api.Command.command_show("user_add")
{ "result": { "name": "user_add", "version": "1", "full_name": "user_add/1", "doc": "Add a new user.", "topic_topic": "user/1", "obj_class": "user/1", "attr_name": "add", }, "value": "user_add", "messages": [ { "type": "warning", "name": "VersionMissing", "message": "API Version number was not sent, forward compatibility not guaranteed. Assuming server's API version, 2.251", "code": 13001, "data": {"server_version": "2.251"}, } ], "summary": None, }2.5. 使用批处理执行 IdM API 命令
- 要点:您可以使用 batch 命令,通过一个调用执行多个 IdM API 命令。以下示例演示了如何创建多个 IdM 用户。
- 要点:先决条件
- 列表:IdM API 已初始化。如需更多信息,请参阅 初始化 IdM API。
- 列表:要在一个批处理中创建 100 个 IdM 用户,请在脚本中包含以下代码: batch_args = [] for i in range(100): user_id = "user%i" % i args = [user_id] kw = { 'givenname' : user_id, 'sn' : user_id } batch_args.append({ 'method' : 'user_add', 'params' : [args, kw] }) ret = api.Command.batch(*batch_args)
- 命令/配置摘录:
batch_args = [] for i in range(100): user_id = "user%i" % i args = [user_id] kw = { 'givenname' : user_id, 'sn' : user_id } batch_args.append({ 'method' : 'user_add', 'params' : [args, kw] }) ret = api.Command.batch(*batch_args)2.6. IdM API 上下文
- 要点:IdM API 上下文决定了 API 使用哪个插件。在 API 初始化期间指定上下文。有关如何使用 IdM API 上下文的示例,请参阅 初始化 IdM API。
- 要点:IdM API 上下文
第 3 章 IdM API 和 IdM CLI 命令比较
- 要点:您可以在 Python 交互控制台中使用 IdM API 命令。
- 要点:IdM API 命令与 ipa 工具命令不同:
- 列表:%Y%m%d%H%M%SZ
- 列表:%Y-%m-%dT%H:%M:%SZ
- 列表:%Y-%m-%dT%H:%MZ
- 列表:%Y-%m-%dZ
- 列表:%Y-%m-%d %H:%M:%SZ
- 列表:%Y-%m-%d %H:%MZ 另外,IdM API 可以使用 Python 内置类 datetime。
第 4 章 IdM API 示例场景
- 要点:以下示例为您提供了使用 IdM API 命令的常见场景。
4.1. 使用 IdM API 命令管理用户
- 要点:以下示例显示了如何使用 IdM API 命令管理 IdM 用户的常见场景。
- 要点:在本例中,您可以使用用户名 exampleuser 和支持的用户 一次性密码(OTP) 身份验证创建一个 IdM 用户。
- 命令/配置摘录:
api.Command.user_add("exampleuser", givenname="Example", sn="User", ipauserauthtype="otp")
api.Command.user_show("exampleuser", all=True)4.2. 使用 IdM API 命令管理组
- 要点:以下示例显示了如何使用 IdM API 命令管理 IdM 组的常见场景。
- 要点:在本例中,您可以创建一个具有指定组 ID 号 的 IdM 组 developers。
- 命令/配置摘录:
api.Command.group_add("developers", gidnumber=500, description="Developers")
api.Command.group_add_member("developers", user="admin")4.3. 使用 IdM API 命令管理访问控制
- 要点:以下示例显示了如何使用 IdM API 命令管理访问控制的常见场景。
- 要点:在本例中,添加创建用户的权限。
- 命令/配置摘录:
api.Command.permission_add("Create users", ipapermright='add', type='user')
api.Command.permission_add("Manage group membership", ipapermright='write', type='group', attrs="member")4.4. 使用 IdM API 命令管理 sudo 规则
- 要点:以下示例显示了如何使用 IdM API 命令管理 sudo 规则的常见场景。
- 要点:在本例中,您可以创建一个保持时间更改命令的 sudo 规则。
- 命令/配置摘录:
api.Command.sudorule_add("timechange")
api.Command.sudocmd_add("/usr/bin/date")4.5. 使用 IdM API 命令管理基于主机的访问控制
- 要点:以下示例显示了如何使用 IdM API 命令管理基于主机的访问控制(HBAC)的常见场景。
- 要点:在本例中,您创建一个将处理 SSH 服务访问的基本规则。
- 命令/配置摘录:
api.Command.hbacrule_add("sshd_rule")
api.Command.hbacrule_add_user("sshd_rule", user="john")第 5 章 审计 IdM API 操作
- 要点:身份管理(IdM)服务器使用 systemd 日志创建所有 IdM API 操作的审计记录。要审核操作并对问题进行故障排除,您可以查询日志来查看谁执行了操作,何时,以及在哪个服务器上。
5.1. IdM API 审计的概述
- 要点:IdM 服务器在 systemd 日志中记录了任何身份管理(IdM) API 的使用。这提供了一个统一的方法,来为审计 API 操作收集日志。
- 要点:systemd 日志允许从单个系统集中收集日志,然后可对其查询和过滤。
- 列表:执行操作的经过身份验证的 Kerberos 主体,或 `如果操作是由 'root 用户直接通过 LDAPI 在服务器上执行的。
- 列表:执行的 API 命令的名称。
- 列表:执行的结果是 SUCCESS 或一个例外名称。
- 列表:LDAP 后端实例标识符,对于作为同一请求的一部分执行的所有操作都是相同的。
- 列表:JSON 格式的传递给命令的参数和选项的列表。
- 注意:注意 所有 IdM API 审计条目都有一个设置为应用程序 UID 6d70f1b493df36478bc3499257cd3b17 的 MESSAGE_ID 属性。
5.2. 查看 IdM API 审计日志
- 要点:您可以通过查询 systemd 日志来查看 IdM API 审计日志和特定条目的详情。此流程演示了如何使用 IdM API 识别和显示删除用户的日志。
- 要点:先决条件
- 列表:有到 IdM 服务器的 root 访问权限。
- 列表:要查看日志中记录的所有 IdM API 操作的列表,请使用 IPA.API 标记过滤日志: # journalctl -g IPA.API May 23 10:30:15 idmserver.idm.example.com /usr/bin/ipa[247422]: [IPA.API] [autobind]: user_del: SUCCESS [ldap2_140328582446688] {"uid": ["example_user"], "continue": false, "version": "2.253"} May 23 10:32:01 idmserver.idm.example.com /usr/bin/ipa[2…
- 列表:识别您要检查的特定条目的唯一标识符。例如,user_del 调用有 LDAP 后端实例标识符 ldap2_140328582446688。
- 列表:使用 journalctl 和 -x 选项以及唯一标识符值,来获得用户删除日志条目的详细解释: # journalctl -x -g ldap2_140328582446688 May 23 10:30:15 idmserver.idm.example.com /usr/bin/ipa[255232]: [IPA.API] [autobind]: user_del: SUCCESS [ldap2_140328582446688] {"uid": ["example_user"], "continue": false, "version": "2.253"} -- Subject: IdM API command was execu…
- 命令/配置摘录:
# journalctl -g IPA.API May 23 10:30:15 idmserver.idm.example.com /usr/bin/ipa[247422]: [IPA.API] [autobind]: user_del: SUCCESS [ldap2_140328582446688] {"uid": ["example_user"], "continue": false, "version": "2.253"} May 23 10:32:01 idmserver.idm.example.com /usr/bin/ipa[247555]: [IPA.API] admin@IDM.EXAMPLE.COM: user_add: SUCCESS [ldap2_140328582446999] {"uid": ["new_user"], "givenname": "New", "sn": "User", "cn": "New User"} May 23 10:33:10 idmserver.idm.example.com /mod_wsgi[247035]: [IPA.API] admin@IDM.EXAMPLE.COM: ping: SUCCESS [ldap2_139910420944784] {"version": "2.253"} May 23 10:34:05 idmserver.idm.example.com /usr/bin/ipa[247888]: [I…
# journalctl -x -g ldap2_140328582446688 May 23 10:30:15 idmserver.idm.example.com /usr/bin/ipa[255232]: [IPA.API] [autobind]: user_del: SUCCESS [ldap2_140328582446688] {"uid": ["example_user"], "continue": false, "version": "2.253"} -- Subject: IdM API command was executed and result of its execution was audited -- Defined-by: FreeIPA -- Support: https://lists.fedorahosted.org/archives/list/freeipa-users@lists.fedorahosted.org/ -- Documentation: man:ipa(1) -- Documentation: https://freeipa.readthedocs.io/en/latest/api/index.html -- Documentation: https://freeipa.readthedocs.io/en/latest/api/user_del.html -- Identity Management provides an e…完整目录
- 通过 Python 脚本使用 IdM API
- 对红帽文档提供反馈
- 第 1 章 IdM API 简介
- 第 2 章 IdM API 的基础知识
- 2.1. 初始化 IdM API
- 2.2. 运行 IdM API 命令
- 2.3. IdM API 命令输出结构
- 2.4. 列出 IdM API 命令和参数
- 2.5. 使用批处理执行 IdM API 命令
- 2.6. IdM API 上下文
- 第 3 章 IdM API 和 IdM CLI 命令比较
- 第 4 章 IdM API 示例场景
- 4.1. 使用 IdM API 命令管理用户
- 4.2. 使用 IdM API 命令管理组
- 4.3. 使用 IdM API 命令管理访问控制
- 4.4. 使用 IdM API 命令管理 sudo 规则
- 4.5. 使用 IdM API 命令管理基于主机的访问控制
- 第 5 章 审计 IdM API 操作
- 5.1. IdM API 审计的概述
- 5.2. 查看 IdM API 审计日志
