IdM API の使用


Red Hat Enterprise Linux 9

Python スクリプトによる IdM API の使用

Red Hat Customer Content Services

概要

IdM API には、さまざまなタイプのリクエストを使用するための例が含まれています。管理者と開発者は、IdM API を使用して Python でカスタムスクリプトを作成し、IdM をサードパーティーアプリケーションと統合できます。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 IdM API の概要

Red Hat Identity Management のサービスには、コマンドラインおよび Web ベースのインターフェイスを使用してアクセスできます。Identity Management API を使用すると、Python で記述されたサードパーティーのアプリケーションやスクリプトを通じて Identity Management サービスと対話できます。

Identity Management API は、JavaScript Object Notation Remote Procedure Call (JSON-RPC) インターフェイスを備えています。さまざまな重要な部分で自動化を使用するには、Python を介して Identity Management API にアクセスします。たとえば、利用可能なすべてのコマンドを使用してサーバーからメタデータを取得できます。

第2章 IdM API の基本

IdM API を使用すると、カスタムスクリプトにより IdM 環境へのアクセスを自動化できます。

2.1. IdM API の初期化

IdM API を使用するには、まず環境内で IdM API を初期化します。

前提条件

  • IdM サーバーまたは IdM クライアントパッケージがインストールされている。
  • 有効な Kerberos チケットが発行されている。

手順

  1. IdM API を初期化するには、スクリプトの先頭に次のコードを含めます。

    from ipalib import api
    
    api.bootstrap(context="server")
    api.finalize()
    Copy to Clipboard Toggle word wrap
  2. LDAP サーバーとの接続を確立するには、API の初期化後に次のロジックをスクリプトに追加します。

    if api.env.in_server:
        api.Backend.ldap2.connect()
    else:
        api.Backend.rpcclient.connect()
    Copy to Clipboard Toggle word wrap
    • IdM サーバーでスクリプトを実行する場合、このロジックにより、スクリプトが LDAP サーバーに直接接続できるようになります。
    • IdM クライアントでスクリプトを実行する場合、スクリプトはリモートプロシージャコール (RPC) クライアントを使用します。

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)
    Copy to Clipboard Toggle word wrap

    この例では、引数とオプションもコマンド user_show に渡しています。

2.3. IdM API コマンドの出力構造

各 IdM API コマンドの出力には、4 つのセクションがあります。これらのセクションには、コマンドの実行に関するさまざまな情報が含まれています。

IdM API の出力構造

result
このセクションには、コマンドの結果が示されます。これには、コマンドに渡されたオプションや引数など、コマンド操作に関するさまざまな詳細が含まれます。
values
このセクションには、コマンドの引数が示されます。
messages
このセクションには、コマンド実行後に ipa ツールが提供するさまざまな情報が示されます。
summary
このセクションには、操作の概要が示されます。

この例では、スクリプトは add_user コマンドを実行します。

api.Command.user_add("test", givenname="a", sn="b")
Copy to Clipboard Toggle word wrap

このコマンドの出力構造は次のとおりです。

{
    "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"],
        "givenname": ["a"],
        "gecos": ["a b"],
        "ipauniqueid": ["9f9c1df8-5073-11ed-9a56-fa163ea98bb3"],
        "mepmanagedentry": [
            ipapython.dn.DN("cn=test,cn=groups,cn=accounts,dc=ipa,dc=test")
        ],
        "has_password": False,
        "has_keytab": False,
        "memberof_group": ["ipausers"],
        "dn": ipapython.dn.DN("uid=test,cn=users,cn=accounts,dc=ipa,dc=test"),
    },
    "value": "test",
    "messages": [
        {
            "type": "warning",
            "name": "VersionMissing",
            "message": "API Version number was not sent, forward compatibility not guaranteed. Assuming server's API version, 2.248",
            "code": 13001,
            "data": {"server_version": "2.248"},
        }
    ],
    "summary": 'Added user "test"',
}
Copy to Clipboard Toggle word wrap

2.4. IdM API コマンドとパラメーターのリスト

コマンド command_show および param_show を使用すると、IdM API コマンドとそのパラメーターに関する情報をリスト表示できます。

前提条件

  • IdM API が初期化されている。詳細は、IdM API の初期化 を参照してください。

手順

  1. user_add コマンドに関する情報を表示するには、次のコードを実行します。

    api.Command.command_show("user_add")
    Copy to Clipboard Toggle word wrap

    このコマンドの結果は次のようになります。

    {
        "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,
    }
    Copy to Clipboard Toggle word wrap
  2. user_add コマンドの givenname パラメーターに関する情報を表示するには、次のコードを実行します。

    api.Command.param_show("user_add", name="givenname")
    Copy to Clipboard Toggle word wrap

    このコマンドの結果は次のようになります。

    {
        "result": {
            "name": "givenname",
            "type": "str",
            "positional": False,
            "cli_name": "first",
            "label": "First name",
        },
        "value": "givenname",
        "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,
    }
    Copy to Clipboard Toggle word wrap

2.5. バッチを使用した IdM API コマンドの実行

batch コマンドを使用すると、複数の IdM API コマンドを 1 回の呼び出しで実行できます。次の例は、複数の IdM ユーザーを作成する方法を示しています。

前提条件

  • IdM API が初期化されている。詳細は、IdM API の初期化 を参照してください。

手順

  • 1 つのバッチで 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)
    Copy to Clipboard Toggle word wrap

2.6. IdM API コンテキスト

IdM API コンテキストは、API が使用するプラグインを決定するものです。コンテキストは API の初期化中に指定します。IdM API コンテキストの使用方法の例は、IdM API の初期化 を参照してください。

IdM API コンテキスト

server
実行のために IdM API コマンドに渡される引数とオプションを検証するプラグインのセット。
client
実行のために IdM サーバーに転送される引数とオプションを検証するプラグインのセット。
installer
インストールプロセスに固有のプラグインのセット。
updates
更新プロセスに固有のプラグインのセット。

第3章 IdM API と IdM CLI コマンドの比較

IdM API コマンドは、Python 対話型コンソールで使用できます。IdM API コマンドは、ipa ツールのコマンドとは異なります。

IdM CLI と IdM API コマンドの違い

コマンドの命名構造
ipa CLI コマンドでは、user-add のようにハイフンが使用されますが、IdM API コマンドでは、user_add のように、代わりにアンダースコアが使用されます。
パラメーターの命名
パラメーターは、IdM CLI コマンドと IdM API コマンドで異なります。たとえば、IdM CLI user-add コマンドには first パラメーターがありますが、IdM API user_add コマンドには givenname パラメーターがあります。
日付書式

IdM CLI では次の日付形式を使用できます。

  • %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 を使用できます。

便利な CLI ツール

  • console は対話型の Python コンソールを起動します。これを使用すると、IdM API コマンドを実行できます。
  • help コマンドは、さまざまな例を含むトピックとコマンドの説明を表示します。
  • show-mapping コマンドは、CLI パラメーター名と LDAP 属性の間のマッピングを表示します。

第4章 IdM API のサンプルシナリオ

次の例では、IdM API コマンドを使用する一般的なシナリオを示します。

4.1. IdM API コマンドを使用したユーザーの管理

以下の例は、IdM API コマンドを使用して IdM ユーザーを管理する方法の一般的なシナリオを示しています。

IdM API コマンドを使用した IdM ユーザーの管理の例

IdM ユーザーの作成

この例では、ユーザー名 exampleuser とサポートされているユーザーの one-time password (OTP) 認証を使用して IdM ユーザーを作成します。

api.Command.user_add("exampleuser", givenname="Example", sn="User", ipauserauthtype="otp")
Copy to Clipboard Toggle word wrap
IdM ユーザー情報の表示

この例では、IdM ユーザー exampleuser に関する入手可能な情報をすべて表示します。

api.Command.user_show("exampleuser", all=True)
Copy to Clipboard Toggle word wrap
IdM ユーザーの変更

この例では、IdM ユーザー exampleuser のメールアドレスを変更します。

api.Command.user_mod("exampleuser", mail="exampleuser@example.org")
Copy to Clipboard Toggle word wrap
IdM ユーザーの検索

この例では、IdM グループ admins 内の exampleuser に一致するすべての IdM ユーザーを検索します。

api.Command.user_find(criteria="exampleuser", in_group="admins")
Copy to Clipboard Toggle word wrap
IdM ユーザーの削除

この例では、IdM ユーザー exampleuser を削除します。

api.Command.user_del("exampleuser")
Copy to Clipboard Toggle word wrap

後でユーザーを復元するには、preserve オプションを使用します。このオプションを使用すると、user_undel コマンドでユーザーを復元できます。

IdM ユーザーの証明書の追加と削除

user_add_cert および user_remove_cert コマンドを使用すると、ユーザーの Base64 encoded 証明書を追加または削除できます。この例では、ユーザー exampleuser の証明書を追加します。

args = ["exampleuser"]
kw = {
    "usercertificate": """
      MIICYzCCAcygAwIBAgIBADANBgkqhkiG9w0BAQUFADAuMQswCQYDVQQGEwJVUzEMMAoGA1UEC
      hMDSUJNMREwDwYDVQQLEwhMb2NhbCBDQTAeFw05OTEyMjIwNTAwMDBaFw0wMDEyMjMwNDU5NT
      laMC4xCzAJBgNVBAYTAlVTMQwwCgYDVQQKEwNJQk0xETAPBgNVBAsTCExvY2FsIENBMIGfMA0
      GCSqGSIb3DQEBATOPA4GNADCBiQKBgQD2bZEo7xGaX2/0GHkrNFZvlxBou9v1Jmt/PDiTMPve
      8r9FeJAQ0QdvFST/0JPQYD20rH0bimdDLgNdNynmyRoS2S/IInfpmf69iyc2G0TPyRvmHIiOZ
      bdCd+YBHQi1adkj17NDcWj6S14tVurFX73zx0sNoMS79q3tuXKrDsxeuwIDAQABo4GQMIGNME
      sGCVUdDwGG+EIBDQQ+EzxHZW5lcmF0ZWQgYnkgdGhlIFNlY3VyZVdheSBTZWN1cml0eSBTZXJ
      2ZXIgZm9yIE9TLzM5MCAoUkFDRikwDgYDVR0PAQH/BAQDAgAGMA8GA1UdEwEB/wQFMAMBAf8w
      HQYDVR0OBBYEFJ3+ocRyCTJw067dLSwr/nalx6YMMA0GCSqGSIb3DQEBBQUAA4GBAMaQzt+za
      j1GU77yzlr8iiMBXgdQrwsZZWJo5exnAucJAEYQZmOfyLiMD6oYq+ZnfvM0n8G/Y79q8nhwvu
      xpYOnRSAXFp6xSkrIOeZtJMY1h00LKp/JX3Ng1svZ2agE126JHsQ0bhzN5TKsYfbwfTwfjdWA
      Gy6Vf1nYi/rO+ryMO
    """
}

api.Command.user_add_cert(*args, **kw)
Copy to Clipboard Toggle word wrap
IdM ユーザーの有効化と無効化

user_enable および user_disable コマンドを使用すると、IdM ユーザーを有効または無効にできます。この例では、IdM ユーザー exampleuser を無効にします。

api.Command.user_disable("exampleuser")
Copy to Clipboard Toggle word wrap

4.2. IdM API コマンドを使用したグループの管理

以下の例は、IdM API コマンドを使用して IdM グループを管理する方法の一般的なシナリオを示しています。

IdM API コマンドを使用した IdM ユーザーの管理の例

IdM グループの作成

この例では、指定のグループ ID 番号を使用して IdM グループ developers を作成します。

api.Command.group_add("developers", gidnumber=500, description="Developers")
Copy to Clipboard Toggle word wrap
ユーザーをメンバーとして IdM グループに追加する

この例では、admin ユーザーを developers グループに追加します。

api.Command.group_add_member("developers", user="admin")
Copy to Clipboard Toggle word wrap
サービスをメンバーとして IdM グループに追加する

この例では、HTTP/server.ipa.test サービスを developers グループに追加します。

api.Command.group_add_member("developers", service="HTTP/server.ipa.test")
Copy to Clipboard Toggle word wrap
グループをサブグループとして IdM グループに追加する

この例では、別のグループ adminsdevelopers グループに追加します。

api.Command.group_add_member("developers", group="admins")
Copy to Clipboard Toggle word wrap
IdM グループマネージャーの追加

この例では、bob ユーザーを developers グループのグループマネージャーとして追加します。

api.Command.group_add_member_manager("developers", user="bob")
Copy to Clipboard Toggle word wrap
IdM グループの検索

さまざまなパラメーターを使用して IdM グループを検索できます。この例では、ユーザー bob が管理しているすべてのグループが検索されます。

api.Command.group_find(membermanager_user="bob")
Copy to Clipboard Toggle word wrap
IdM グループ情報の表示

この例では、メンバーリストを表示せずに、developers グループに関するグループ情報を表示します。

api.Command.group_show("developers", no_members=True)
Copy to Clipboard Toggle word wrap
IdM グループの変更

この例では、非 POSIX グループの testgroup を POSIX グループに変換します。

api.Command.group_mod("testgroup", posix=True)
Copy to Clipboard Toggle word wrap
IdM グループからのメンバーの削除

この例では、admin ユーザーを developers グループから削除します。

api.Command.group_remove_member("developers", user="admin")
Copy to Clipboard Toggle word wrap
IdM グループマネージャーの削除

この例では、マネージャーであるユーザー bobdevelopers グループから削除します。

api.Command.group_remove_member_manager("developers", user="bob")
Copy to Clipboard Toggle word wrap
IdM グループの削除

この例では、developers グループを削除します。

api.Command.group_del("developers")
Copy to Clipboard Toggle word wrap

4.3. IdM API コマンドを使用したアクセス制御の管理

以下の例は、IdM API コマンドを使用して、アクセス制御を管理する方法の一般的なシナリオを示しています。

IdM API コマンドを使用したアクセス制御の管理の例

ユーザー作成用の権限の追加

この例では、ユーザーを作成するための権限を追加します。

api.Command.permission_add("Create users", ipapermright='add', type='user')
Copy to Clipboard Toggle word wrap
グループメンバーシップを管理する権限の追加

この例では、ユーザーをグループに追加するための権限を追加します。

api.Command.permission_add("Manage group membership", ipapermright='write', type='group', attrs="member")
Copy to Clipboard Toggle word wrap
ユーザー作成プロセスでの権限の追加

この例では、ユーザーの作成、グループへの追加、およびユーザー証明書の管理のための権限を追加します。

api.Command.permission_add("Create users", ipapermright='add', type='user')
api.Command.permission_add("Manage group membership", ipapermright='write', type='group', attrs="member")
api.Command.permission_add("Manage User certificates", ipapermright='write', type='user', attrs='usercertificate')

api.Command.privilege_add("User creation")
api.Command.privilege_add_permission("User creation", permission="Create users")
api.Command.privilege_add_permission("User creation", permission="Manage group membership")
api.Command.privilege_add_permission("User creation", permission="Manage User certificates")
Copy to Clipboard Toggle word wrap
権限を使用したロールの追加

この例では、前の例で作成した権限を使用してロールを追加します。

api.Command.role_add("usermanager", description="Users manager")
api.Command.role_add_privilege("usermanager", privilege="User creation")
Copy to Clipboard Toggle word wrap
ユーザーへのロールの割り当て

この例では、usermanager ロールをユーザー bob に割り当てます。

api.Command.role_add_member("usermanager", user="bob")
Copy to Clipboard Toggle word wrap
グループへのロールの割り当て

この例では、usermanager ロールを managers グループに割り当てます。

api.Command.role_add_member("usermanager", group="managers")
Copy to Clipboard Toggle word wrap

4.4. IdM API コマンドを使用した sudo ルールの管理

以下の例は、IdM API コマンドを使用して sudo ルールを管理する方法の一般的なシナリオを示しています。

IdM API コマンドを使用した sudo ルールの管理の例

sudo ルールを作成する

この例では、時間変更コマンドを保持する sudo ルールを作成します。

api.Command.sudorule_add("timechange")
Copy to Clipboard Toggle word wrap
sudo コマンドを作成する

この例では、date sudo コマンドを作成します。

api.Command.sudocmd_add("/usr/bin/date")
Copy to Clipboard Toggle word wrap
sudo コマンドを sudo ルールに割り当てる

この例では、date sudo コマンドを timechange sudo ルールに割り当てます。

api.Command.sudorule_add_allow_command("timechange", sudocmd="/usr/bin/date")
Copy to Clipboard Toggle word wrap
sudo コマンドのグループを作成して割り当てる

この例では、複数の sudo コマンドを作成して、新しく作成した timecmds sudo コマンドグループに追加し、そのグループを timechange sudo ルールに割り当てます。

api.Command.sudocmd_add("/usr/bin/date")
api.Command.sudocmd_add("/usr/bin/timedatectl")
api.Command.sudocmd_add("/usr/sbin/hwclock")
api.Command.sudocmdgroup_add("timecmds")
api.Command.sudocmdgroup_add_member("timecmds", sudocmd="/usr/bin/date")
api.Command.sudocmdgroup_add_member("timecmds", sudocmd="/usr/bin/timedatectl")
api.Command.sudocmdgroup_add_member("timecmds", sudocmd="/usr/sbin/hwclock")
api.Command.sudorule_add_allow_command("timechange", sudocmdgroup="timecmds")
Copy to Clipboard Toggle word wrap
sudo コマンドを拒否する

この例では、rm コマンドが sudo として実行されることを拒否します。

api.Command.sudocmd_add("/usr/bin/rm")
api.Command.sudorule_add_deny_command("timechange", sudocmd="/usr/bin/rm")
Copy to Clipboard Toggle word wrap
sudo ルールにユーザーを追加する

この例では、ユーザー bobtimechange sudo ルールに追加します。

api.Command.sudorule_add_user("timechange", user="bob")
Copy to Clipboard Toggle word wrap
指定したホストでのみ sudo ルールを使用できるようにする

この例では、timechange ルールを client.ipa.test ホストでしか使用できないように制限します。

api.Command.sudorule_add_host("timechange", host="client.ipa.test")
Copy to Clipboard Toggle word wrap
sudo ルールを別のユーザーとして実行するように設定する

デフォルトでは、sudo ルールは root として実行されます。この例では、代わりに alice ユーザーとして実行されるように timechange sudo ルールを設定します。

api.Command.sudorule_add_runasuser("timechange", user="alice")
Copy to Clipboard Toggle word wrap
sudo ルールをグループとして実行するように設定する

この例では、sysadmins グループとして実行されるように timechange sudo ルールを設定します。

api.Command.sudorule_add_runasgroup("timechange", group="sysadmins")
Copy to Clipboard Toggle word wrap
sudo ルールの sudo オプションを設定する

この例では、timechange sudo ルールの sudo オプションを設定します。

api.Command.sudorule_add_option("timechange", ipasudoopt="logfile='/var/log/timechange_log'")
Copy to Clipboard Toggle word wrap
sudo ルールを有効にする

この例では、timechange sudo ルールを有効にします。

api.Command.sudorule_enable("timechange")
Copy to Clipboard Toggle word wrap
sudo ルールを無効にする

この例では、timechange sudo ルールを無効にします。

api.Command.sudorule_disable("timechange")
Copy to Clipboard Toggle word wrap

4.5. IdM API コマンドを使用したホストベースのアクセス制御の管理

以下の例は、IdM API コマンドを使用してホストベースのアクセス制御 (HBAC) を管理する方法の一般的なシナリオを示しています。

IdM API コマンドを使用した HBAC の管理の例

HBAC ルールの作成

この例では、SSH サービスアクセスを処理する基本ルールを作成します。

api.Command.hbacrule_add("sshd_rule")
Copy to Clipboard Toggle word wrap
HBAC ルールへのユーザーの追加

この例では、ユーザー johnsshd_rule HBAC ルールに追加します。

api.Command.hbacrule_add_user("sshd_rule", user="john")
Copy to Clipboard Toggle word wrap
HBAC ルールへのグループの追加

この例では、グループ developerssshd_rule HBAC ルールに追加します。

api.Command.hbacrule_add_user("sshd_rule", group="developers")
Copy to Clipboard Toggle word wrap
HBAC ルールからのユーザーの削除

この例では、ユーザー johnsshd_rule HBAC ルールから削除します。

api.Command.hbacrule_remove_user("sshd_rule", user="john")
Copy to Clipboard Toggle word wrap
新しいターゲット HBAC サービスの登録

ターゲットサービスを HBAC ルールに割り当てる前に、ターゲットサービスを登録する必要があります。この例では、chronyd サービスを登録します。

api.Command.hbacsvc_add("chronyd")
Copy to Clipboard Toggle word wrap
登録済みサービスの HBAC ルールへの割り当て

この例では、sshd サービスを sshd_rule HBAC ルールに割り当てます。このサービスはデフォルトで IPA に登録されているため、事前に hbacsvc_add で登録する必要はありません。

api.Command.hbacrule_add_service("sshd_rule", hbacsvc="sshd")
Copy to Clipboard Toggle word wrap
HBAC ルールへのホストの追加

この例では、workstations ホストグループを sshd_rule HBAC ルールに追加します。

api.Command.hbacrule_add_host("sshd_rule", hostgroup="workstations")
Copy to Clipboard Toggle word wrap
HBAC ルールのテスト

この例では、workstation.ipa.test ホストに対して sshd_rule HBAC ルールを使用します。ユーザー john からのサービス sshd をターゲットとしています。

api.Command.hbactest(user="john", targethost="workstation.ipa.test", service="sshd", rules="sshd_rule")
Copy to Clipboard Toggle word wrap
HBAC ルールの有効化

この例では、sshd_rule HBAC ルールを有効にします。

api.Command.hbacrule_enable("sshd_rule")
Copy to Clipboard Toggle word wrap
HBAC ルールの無効化

この例では、sshd_rule HBAC ルールを無効にします。

api.Command.hbacrule_disable("sshd_rule")
Copy to Clipboard Toggle word wrap

第5章 IdM API 操作の監査

Identity Management (IdM) サーバーは、systemd ジャーナルを使用して、すべての IdM API 操作の監査レコードを作成します。操作を監査し、問題をトラブルシューティングするには、ジャーナルを照会して、誰が、いつ、どのサーバー上でアクションを実行したかを確認できます。

5.1. IdM API 監査の概要

IdM サーバーは、Identity Management (IdM) API の使用をすべて systemd ジャーナルに記録します。これにより、API 操作を監査するためのログを収集する方法が一元化されます。

systemd ジャーナルを使用すると、個々のシステムからのログを一元的に収集できます。その後、ログの照会やフィルタリングを行うことができます。

各ログエントリーには、IPA.API というマーカーでタグ付けされており、構造化された形式で次の詳細が含まれています。

  • アクションを実行した認証済みの Kerberos プリンシパル、または操作が LDAPI を介してサーバー上で直接 root ユーザーによって実行されたかどうか。
  • 実行された API コマンドの名前。
  • 実行の結果。SUCCESS か例外名のどちらかです。
  • LDAP バックエンドインスタンスの識別子。この識別子は、同じリクエストの一部として実行されたすべての操作で共通です。
  • コマンドに渡された引数とオプションのリスト (JSON 形式)。

これらのエントリーは journalctl ユーティリティーを使用して照会できます。journalctl-x オプション付きで使用すると、関連するドキュメントへのリンクを含む、より詳細なログエントリーの説明が人間が読める形式で表示されます。

注記

すべての IdM API 監査エントリーの MESSAGE_ID プロパティーには、アプリケーションの UID 6d70f1b493df36478bc3499257cd3b17 が設定されます。

5.2. IdM API 監査ログの表示

systemd ジャーナルを照会することで、IdM API 監査ログと特定のエントリーの詳細を表示できます。この手順では、IdM API を使用してユーザーの削除のログを特定および表示する方法を示します。

前提条件

  • IdM サーバーへの root アクセス権限がある。
  • IdM サーバーで RHEL 9.5 以降を実行している。

手順

  1. ジャーナルに記録されたすべての 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[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]: [IPA.API] [autobind]: group_add_member: SUCCESS [ldap2_140328582447111] {"cn": "admins", "user": "new_user"}
    Copy to Clipboard Toggle word wrap

    出力には、ユーザー、コマンド、結果、一意の接続 ID、使用されたパラメーターなど、各 API 呼び出しの概要が表示されます。

  2. 調べる必要がある特定エントリーの一意の識別子を特定します。たとえば、user_del 呼び出しの LDAP バックエンドインスタンスの ID が、ldap2_140328582446688 であるとします。
  3. ユーザー削除ログエントリーの詳細な説明を取得するために、-x オプションと一意の識別子の値を指定して journalctl を使用します。

    # 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 extensive API that allows to manage all aspects of IdM deployments.
    
    -- The following information about the API command executed is available:
    
    -- [IPA.API] [autobind]: user_del: SUCCESS [ldap2_140328582446688] {"uid": ["example_user"], "continue": false, "version": "2.253"}
    
    -- The command was executed by '/usr/bin/ipa' utility. If the utility name
    -- is '/mod_wsgi`, then this API command came from a remote source through the IdM
    -- API end-point.
    
    -- The message includes following fields:
    
    --   - executable name and PID ('/mod_wsgi' for HTTP end-point; in this case it
    --     was '/usr/bin/ipa' command)
    
    --   - '[IPA.API]' marker to allow searches with 'journalctl -g IPA.API'
    
    --   - authenticated Kerberos principal or '[autobind]' marker for LDAPI-based
    --     access as root. In this case it was '[autobind]'
    
    --   - name of the command executed, in this case 'user_del'
    
    --   - result of execution: SUCCESS or an exception name. In this case it was
    --     'SUCCESS'
    
    --   - LDAP backend instance identifier. The identifier will be the same for all
    --     operations performed under the same request. This allows to identify operations
    --     which were executed as a part of the same API request instance. For API
    --     operations that didn't result in LDAP access, there will be
    --     '[no_connection_id]' marker.
    
    --   - finally, a list of arguments and options passed to the command is provided
    --     in JSON format.
    
    -- ---------
    -- The following list of arguments and options were passed to the command
    -- 'user_del' by the '[autobind]' actor:
    --
    -- {"uid": ["example_user"], "continue": false, "version": "2.253"}
    -- ---------
    
    -- A detailed information about Identity Management API can be found at upstream documentation API reference:
    -- https://freeipa.readthedocs.io/en/latest/api/index.html
    
    -- For details on the IdM API command 'user_del' see
    -- https://freeipa.readthedocs.io/en/latest/api/user_del.html
    Copy to Clipboard Toggle word wrap

関連情報

  • システム上の journalctl(1) man ページ

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat