首页 > 编程语言 >通过python读取authing IAM中的admin、user审计日志

通过python读取authing IAM中的admin、user审计日志

时间:2023-07-25 21:15:55浏览次数:60  
标签:IAM authing python text host json print data parsed

 

方式:

通过python-logstash库,将读取的日志传给logstash的udp input地址。

 logstash config:

input {
  udp {
    port => 5959
    codec => json
  }
}

filter {
  json {
    source => "message"
    target => "parsed_data"
  }


  mutate {

        rename => {
              "[parsed_data][clientIp]" => "clientIp"
              "[parsed_data][operationType]" => "operationType"
              "[parsed_data][resourceType]" => "resourceType"
              "[parsed_data][requestId]" => "requestId"
              "[parsed_data][geoip]" => "geoip"
              "[parsed_data][timestamp]" => "timestamp"
              "[parsed_data][originValue]" => "originValue"
              "[parsed_data][targetValue]" => "targetValue"
              "[parsed_data][operationParam]" => "operationParam"
              "[parsed_data][userAgent]" => "userAgent"
            }

        remove_field => ["path", "@version", "logger_name", "@timestamp", "message", "parsed_data", "level", "host"]  
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

 

python读authing审计日志:

import requests
import sys
import logging
import re
import json
import time
from datetime import datetime,timedelta
import logstash

accessKeyId = 'f3'
accessKeySecret = 'c6'

host = "https://console.authing.cn/"
userpool_id = '638'

logstashHost = "127.0.0.1"
logstashPort = 5959

def GetToken(ak=accessKeyId, sk=accessKeySecret, host=host):
    host = host
    header = {"Accept": "application/json, text/plain, */*",
              "Content-Type": "application/json",
              "authorization": "ssss"
              }
    data = {
        "accessKeyId": ak,
        "accessKeySecret": sk
    }
    target = "{u}api/v3/get-management-token".format(u=host)

    try:
        r1 = requests.post(url=target, headers=header, data=json.dumps(data), verify=True, timeout=15)

        if r1.status_code == 200:
            data = json.loads(r1.text)
            access_token = data['data']['access_token']
            return (access_token)
        else:
            print("失败:" + str(r1.status_code) + r1.text + '\n')
    except Exception as e:
        print(e)

def GetTime():
    currentTime = datetime.now()
    #查询前5分钟的日志
    startTime = currentTime - timedelta(seconds=5555510)
    endTime = currentTime - timedelta(seconds=10)

    startTimeStr = startTime.strftime("%Y-%m-%d %H:%M:%S.%f")
    endTimeStr = endTime.strftime("%Y-%m-%d %H:%M:%S.%f")
    # 先转换为时间数组
    startTimeArray = datetime.strptime(startTimeStr, "%Y-%m-%d %H:%M:%S.%f")
    endTimeArray = datetime.strptime(endTimeStr, "%Y-%m-%d %H:%M:%S.%f")

    # 转换为时间戳
    startTimeStamp = int(time.mktime(startTimeArray.timetuple()) * 1000.0 + startTimeArray.microsecond / 1000.0)
    endTimeStamp = int(time.mktime(endTimeArray.timetuple()) * 1000.0 + endTimeArray.microsecond / 1000.0)

    print("startTime:",startTimeStamp)
    print("endTime:",endTimeStamp)
    return(startTimeStamp,endTimeStamp)

def GetAdminPages(access_token, start, end, ak=accessKeyId, sk=accessKeySecret, host=host, pool_id=userpool_id):

    host = host
    header = {
        "Accept": "application/json, text/plain, */*",
        "Content-Type": "application/json",
        "x-authing-userpool-id": pool_id,
        "authorization": access_token
    }

    data = {
        "start": start,
        "end": end
    }
    target = "{u}api/v3/get-admin-audit-logs".format(u=host)

    try:
        r2 = requests.post(url=target, headers=header, data=json.dumps(data), verify=True, timeout=15)
        if r2.status_code == 200:
            data = json.loads(r2.text)
            totalCount = data['data']['totalCount']
            pages = totalCount / 10 + 1
            return (int(pages))
        else:
            print("失败1" + str(r1.status_code) + r1.text + '\n')
    except Exception as e:
        print(e)

def GetAdminLog(access_token, pages, ak=accessKeyId, sk=accessKeySecret, host=host, pool_id=userpool_id):
    #通过python logstash向logstash发送收到的日志
    logstashLogger = logging.getLogger('python-logstash-logger')
    logstashLogger.addHandler(logstash.LogstashHandler(logstashHost, logstashPort, version=1))
    logstashLogger.setLevel(logging.INFO)

    host = host
    header = {
        "Accept": "application/json, text/plain, */*",
        "Content-Type": "application/json",
        "x-authing-userpool-id": pool_id,
        "authorization": access_token
    }
    target = "{u}api/v3/get-admin-audit-logs".format(u=host)

    page = 1
    print("total_page:", str(pages))
    if pages == 1:
        try:
            r2 = requests.post(url=target, headers=header, verify=True, timeout=15)
            print("current_page:", str(page))
            if r2.status_code == 200:
                data = json.loads(r2.text)
                #print("page1 data:",data['data']['list'])
                if len(data['data']['list']) == 0:
                    return 0
                else:
                    for item in data['data']['list']:
                        result = json.dumps(item, ensure_ascii=False)
                        adminLog = result.encode('utf-8')
                        logstashLogger.info(adminLog.decode('utf-8'))
                        print(adminLog.decode('utf-8'))
            else:
                print("失败1" + str(r1.status_code) + r1.text + '\n')
        except Exception as e:
            print(e)

    else:
        for page in range(1,pages):
            data = {
                "pagination": {
                    "page": page,
                    "limit": 10
                }
            }
            try:
                r2 = requests.post(url=target, headers=header, data=json.dumps(data), verify=True, timeout=15)
                print("current_page:", str(page))
                if r2.status_code == 200:
                    data = json.loads(r2.text)
                    for item in data['data']['list']:
                        result = json.dumps(item, ensure_ascii=False)
                        adminLog = result.encode('utf-8')
                        logstashLogger.info(adminLog.decode('utf-8'))
                        print(adminLog.decode('utf-8'))
                else:
                    print("失败1" + str(r1.status_code) + r1.text + '\n')
            except Exception as e:
                print(e)

if __name__ == '__main__':
    token = GetToken()
    start,end = GetTime()
    pages = GetAdminPages(token,start,end)
    GetAdminLog(token, pages)

 

标签:IAM,authing,python,text,host,json,print,data,parsed
From: https://www.cnblogs.com/bonjov1/p/17581014.html

相关文章

  • python读取rds
    Python读取RDSRDS(RelationalDatabaseService)是云计算中提供的一种托管式关系型数据库服务,它能够帮助用户轻松部署、管理和扩展关系型数据库。在Python中,我们可以使用各种库和驱动程序来连接和操作RDS。连接RDS数据库在Python中,我们可以使用第三方库mysql-connector-python来连......
  • python读取py文件
    Python读取py文件Python是一门功能强大的编程语言,可以用于开发各种类型的应用程序。在Python中,我们可以很方便地读取和操作文本文件。本文将介绍如何使用Python读取.py文件,并提供代码示例。为什么需要读取.py文件?在软件开发中,我们通常会将程序的逻辑代码保存在.py文件中。有时候......
  • python读取linux巡检
    Python读取Linux巡检作为一名经验丰富的开发者,我将教会你如何使用Python读取Linux巡检报告。下面是整个流程的步骤:步骤描述1.连接到Linux服务器使用ssh库建立与Linux服务器的连接2.执行巡检命令使用paramiko库执行巡检命令3.保存巡检结果将巡检结果保存到......
  • python读取excel为什么是小数
    Python读取Excel为什么是小数在使用Python读取Excel文件时,经常会遇到一个问题:为什么读取的数据会以小数的形式显示,而不是原始的整数或文本呢?这个问题涉及到Python读取Excel的原理以及Excel中的数据类型的转换。Excel中的数据类型在Excel中,每个单元格都有自己的数据类型。常见的......
  • python读取TXT文件第二行
    Python读取TXT文件第二行引言作为一名经验丰富的开发者,我很高兴能够帮助你解决问题。在本文中,我将向你解释如何使用Python读取TXT文件的第二行。我将提供一条清晰的步骤,以及每一步所需要的代码和对其含义的注释。问题背景在开始之前,让我们先来了解一下你的问题背景。你想要读取......
  • python动态加载py文件
    动态加载py文件的实现对于刚入行的小白来说,实现动态加载py文件可能是一个比较陌生的概念。不过不用担心,我会帮助你逐步了解和掌握这个过程。流程概述动态加载py文件的实现可以分为以下几个步骤:找到要加载的py文件的路径。动态加载py文件。调用加载的py文件中的函数或类。......
  • python动态规划
    Python动态规划(DynamicProgramming)动态规划是一种解决复杂问题的算法思想,其核心思想是将问题分解为子问题,并利用已解决的子问题的解来解决原始问题。动态规划常用于求解具有重叠子问题和最优子结构特性的问题。动态规划的基本思想动态规划的基本思想是分治法,即将问题分解为若干......
  • python定义字符串长度
    Python定义字符串长度在Python中,字符串是一种常见的数据类型,用于存储文本数据。在处理字符串时,有时我们需要知道字符串的长度,即包含字符的个数。本文将介绍如何使用Python定义字符串长度的方法,以及一些常见的应用场景。使用len()函数计算字符串长度Python中的len()函数可以用来......
  • python定义三维数组
    Python定义三维数组在Python中,我们可以使用列表(List)来定义和操作多维数组,包括三维数组。三维数组是指包含多个二维数组的数据结构,它可以用于存储和处理更复杂的数据。什么是三维数组?在计算机科学中,数组是一种数据结构,它由一系列相同类型的元素组成。一维数组是一列元素,二维数组......
  • python定义函数入参为数组
    Python定义函数入参为数组在Python中,我们可以定义函数来接收数组作为参数。数组是一种数据结构,它可以容纳多个值,并通过索引访问这些值。传递数组作为函数参数可以方便地处理大量数据,并提高代码的可重用性。定义函数接收数组参数在Python中,我们可以通过在函数定义时指定参数的类......