5. Utilisation de l'API du GCENTER

Elle peut être utilisée de trois manières différentes:

5.1. Utilisation via swagger

En vous connectant à votre GCenter, accédez à l’URL https://hostnameGCENTER/docs/swagger/ Vous aurez accès à la documentation de l’ensemble de nos endpoints API.

En cliquant sur le bouton « try it out », vous pourrez directement tester des requêtes, et l’outil vous générera aussi des requêtes à utiliser avec curl.

Note

Un known bug affecte le endpoint /api/alerts (voir la release note du GCenter). Il est recommandé de privilégier le requêtage des données par l'API elasticsearch sur le endpoint /api/data/es/search.

5.2. Utilisation via CURL

Pour un utilisateur appelé username et disposant des droits opérateurs.

Récupération du token d’API :


curl -X POST "https://<hostname>/api/auth/login" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"username\": \"username\", \"password\": \"password\"}" -k

Réponse :


{"token":"urxn5hlezbk3vnlgq1t45rifhg0vi951","expiration_date":"2021-04-13T16:26:45.743826"}

La date d’expiration est définie par la durée définie dans Administrators > Configuration > Session age settings dans la webui du GCenter

Envoi d’une requête :


curl -X POST "https://<hostname>/api/<endpoint> -H "accept: application/json" -H "Content-Type: application/json" -H "API-KEY: x0zc5py1e2lrppe6ws0kgc8le0oxm9hg" -d "{\"test\": \"test\"}" -k

Exemple d’une requête qui interrogera elasticsearch sur ses index suricata* et récupérera 100 logs sur les 24 dernières heures :


curl -X POST "https://<hostname>/api/<endpoint> -H "accept: application/json" -H "Content-Type: application/json" -H "API-KEY: x0zc5py1e2lrppe6ws0kgc8le0oxm9hg" -d "{ \"size\" : 100, \"query\" : { \"bool\": { \"must\": [], \"filter\": [ { \"match_all\": {} }, { \"range\": { \"@timestamp\": { \"gte\": \"now-24h\", \"lte\": \"now\" } } } ], \"should\": [], \"must_not\": [] } } }" -k

5.3. Utilisation via Package python

Ce package est une bibliothèque python qui implémente une grande partie des endpoints de l'API du GCenter.

Package API GCenter: gwapi-master.tar.gz

5.3.1. Installation

Les prérequis:

  • python>=3.5

  • requests==2.25.1

  • urllib3==1.26.6

  • packaging==20.9

L'installation du package se fait avec l'utilitaire pip:

pip3 install gwapi.tar.gz

5.3.2. Utilisation

5.3.2.1. Import

Pour utiliser la bibliothèque il suffit d'importer le package gwapi:

>>> import gwapi

5.3.2.2. Documentation

Pour afficher la documentation de n'importe quelle fonction:

>>> help(gwapi.GcenterApi.auth)
Help on function auth in module gwapi.api:

auth(self, user: 'str', password: 'str') -> 'bool'
    Authentication through the Gcenter API.

    Returns:
        Return true if authenticated.

    Raises:
        RequestException: If status_code != 200.

5.3.2.3. Lister les fonctions de la bibliothèque

Pour lister toutes les fonctions de la bibliothèque:

>>> for func in [func for func in dir(gwapi.GcenterApi) if callable(getattr(gwapi.GcenterApi, func)) and not func.startswith("__") and not func.startswith("_")]:
...   print(func)
apply_gcap
auth
...

5.3.2.4. Authentification

L'ensemble des endpoints de l'API nécessite d'être authentifié.

S'authentifier via l'API du GCenter:

>>> api = gwapi.GcenterApi(ip="X.X.X.X", version="2.5.3.101")
>>> api.auth(user="username", password="password")
True

5.3.2.5. Requête Elasticsearch

Seule l'API search d'elasticsearch est implémentée via l'API du GCenter.

Exemple de requêtes elasticsearch via l'API:

  • Nombre/liste des fichiers reconstruits par le gcap sur une période de 24H:

query = {
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
         "fileinfo.stored": "true"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
          }
        }
      }
    }
  }
}
api.get_es_query(index="suricata", query=query)['hits']['hits']
api.get_es_count(index="suricata", query=query)
  • Nombre/liste des alertes malcore par ordre de gravité sur une période de 24H:

query = {
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
         "event_type": "malware"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
          }
        }
      }
    }
  },
  "sort" : {
    "severity": "desc"
  }
}
api.get_es_query(index="malware", query=query)['hits']['hits']
api.get_es_count(index="malware", query=query)
  • Nombre/liste des alertes shellcode par ordre de gravité sur une période de 24H:

query = {
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
         "event_type": "shellcode"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
          }
        }
      }
    }
  },
  "sort" : {
    "severity": "desc"
  }
}
api.get_es_query(index="codebreaker", query=query)['hits']['hits']
api.get_es_count(index="codebreaker", query=query)
  • Nombre/liste des alertes powershell par ordre de gravité sur une période de 24H:

query = {
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
         "event_type": "powershell"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
          }
        }
      }
    }
  },
  "sort" : {
    "scores.analysis": "desc"
  }
}
api.get_es_query(index="codebreaker", query=query)['hits']['hits']
api.get_es_count(index="codebreaker", query=query)
  • Nombre/liste d'alerte sigflow par ordre de gravité sur une période de 24H:

query = {
  "size": 10,
  "query": {
    "bool": {
      "must": {
        "match": {
         "event_type": "alert"
        }
      },
      "filter": {
        "range": {
          "@timestamp": {
              "gte": "now-24h",
              "lte": "now"
          }
        }
      }
    }
  },
  "sort" : {
    "alert.severity": "desc"
  }
}
api.get_es_query(index="suricata", query=query)['hits']['hits']
api.get_es_count(index="suricata", query=query)
  • TOP 10 des signatures des alertes Sigflow:

query = {
  "size": 0,
  "query": {
    "match": {
     "event_type": "alert"
    }
  },
  "aggs": {
    "signature": {
      "terms": {
        "field": "alert.signature",
        "order" : { "_count" : "desc"},
        "size": 10
      }
    }
  }
}
api.get_es_query(index="suricata", query=query)['aggregations']['signature']['buckets']
  • TOP 10 des adresses IP sources des alertes Sigflow:

query = {
  "size": 0,
  "query": {
    "match": {
     "event_type": "alert"
    }
  },
  "aggs": {
    "src_ip": {
      "terms": {
        "field": "src_ip",
        "order" : { "_count" : "desc"},
        "size": 10
      }
    }
  }
}
api.get_es_query(index="suricata", query=query)['aggregations']['src_ip']['buckets']
  • TOP 10 des types de shellcode:

query = {
  "size": 0,
  "query": {
    "match": {
     "event_type": "shellcode"
    }
  },
  "aggs": {
    "sub_type": {
      "terms": {
        "field": "sub_type",
        "order" : { "_count" : "desc"},
        "size": 10
      }
    }
  }
}
api.get_es_query(index="codebreaker", query=query)['aggregations']['sub_type']['buckets']
  • TOP 10 des types de malware:

query = {
  "size": 0,
  "query": {
    "match": {
     "event_type": "malware"
    }
  },
  "aggs": {
    "detail_threat_found": {
      "terms": {
        "field": "detail_threat_found",
        "order" : { "_count" : "desc"},
        "size": 10
      }
    }
  }
}
api.get_es_query(index="malware", query=query)['aggregations']['detail_threat_found']['buckets']
  • Classement décroissant des couples adresses IP sources/IP destinations des alertes Sigflow:

query = {
  "size": 0,
  "query": {
    "match": {
     "event_type": "alert"
    }
  },
  "aggs": {
    "couple": {
      "composite": {
        "sources":[
          {
            "src_ip":{
              "terms":{
                "field": "src_ip",
                "order": "desc"
              }
            }
          },
          {
            "dest_ip":{
              "terms":{
                "field": "dest_ip",
                "order": "desc"
              }
            }
          }
        ],
        "size": 65535
      }
    }
  }
}
api.get_es_query(index="suricata", query=query)['aggregations']['couple']['buckets']
  • Compter/Lister les 10 dernières alertes avec le statut Infected dans malcore:

>>> query = {
...   "size": 10,
...   "query": {
...     "match": {
...       "state": "Infected"
...     }
...   }
... }
>>> api.get_es_query(index="malware", query=query)
[{'_index': 'malware-2021.06.29-000007', '_type': '_doc', '_id': 'uGn0VnoBfk3pKEfjbjFz', '_score': 0.00024064493, '_source': {'timestamp_detected': '2021-06-29T08:37:09.043Z'...}]
>>> api.get_es_count(index="malware", query=query)
4189

5.3.2.6. Alertes

L'API permet d'afficher les alertes du GCenter sous 2 formes:

  • Les dernières alertes envoyées par les Gcaps (sigflow, malcore, codebreaker).

  • Les dernières alertes envoyées par les Gcaps sous forme de cluster: des alertes survenues dans le même laps de temps (la dernière heure ou le dernier jour par exemple), et qui sont toutes liées à la même adresse IP.

Récupérer les alertes du GCenter:

# Afficher les alertes au format RAW
>>> from datetime import datetime, timedelta
>>> import json
>>> delta = datetime.utcnow() - timedelta(days=5)
>>> alerts = api.get_gcenter_alerts(date_from=delta.isoformat(),
...                                date_to=datetime.utcnow().isoformat(),
...                                gcap_id="all",
...                                ip="1.1.1.1",
...                                sort_by="date_asc",
...                                risk_min=0,
...                                risk_max=10)
>>> print(json.dumps(alerts, indent=4))
[
    {
        "id": "2021-06-29T08:28:21.932Z",
        "name": "ASCII text, with very long lines",
        "date": "2021-06-29T08:27:21",
        "gcap": {
            "id": 1,
            "fqdn": "gcap.example.com",
            "is_paired": true
        },
        "description": "Infected : JS/Downloader.S200, JS:Trojan.JS.Downloader.AZ, JS/Downldr.CZ!Eldorado, JS/Kryptik.AYN trojan, JS:Trojan.JS.Downloader.AZ (B)",
        "src_ip": "1.1.1.1",
        "dest_ip": "2.2.2.2",
        "risk": 13,
        "type": "malcore"
    },
    {
        "id": "2021-06-29T08:31:22.816Z",
        "name": "ASCII text, with very long lines",
        "date": "2021-06-29T08:30:53",
        "gcap": {
            "id": 1,
            "fqdn": "gcap.example.com",
            "is_paired": true
        },
        "description": "Infected : JS/Downloader.S200, JS:Trojan.JS.Downloader.AZ, JS/Downldr.CZ!Eldorado, JS/Kryptik.AYN trojan, JS:Trojan.JS.Downloader.AZ (B)",
        "src_ip": "1.1.1.1",
        "dest_ip": "2.2.2.2",
        "risk": 13,
        "type": "malcore"
    }
]
# Afficher les alertes au format Cluster
>>> alerts = api.get_gcenter_clusters_alerts(date_from=delta.isoformat(),
...                                 date_to=datetime.utcnow().isoformat(),
...                                 gcap_id="all",
...                                 ip="1.1.1.1",
...                                 sort_by="src",
...                                 frequency="hour")
>>> print(json.dumps(alerts, indent=4))
[
    {
        "id": "1.1.1.1-2021-06-29T08:00:00.000Z",
        "ip": "1.1.1.1",
        "number_alerts": 1,
        "average_risk": 1.0,
        "risk_score": 1,
        "date": "2021-06-29T08:00:00",
        "description": "The cluster 1.1.1.1 has 1 alerts registered the 2021-06-29 08:00:00 (malcore and codebreaker : 1)",
        "malcore_codebreaker": 1,
        "type_ip": "src",
        "gcap": {
            "id": 1,
            "fqdn": "gcap.example.com",
            "is_paired": true
        }
    }
]

5.3.2.7. Export des données

L'Export des données comprend les fonctionnalités netdata et syslog.

Configuration de l'export netdata:

# Configuration de l'export Netdata
>>> api.set_netdata(enabled=True, ip="10.10.10.10", port=80, iface="mgmt0", key="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
# Désactivation de l'export Netdata
>>> api.set_netdata(enabled=False)

Configuration de l'export syslog 1:

# Configuration de l'onglet général de l'export syslog.
>>> api.set_syslog_general(id=1, hostname="10.10.10.10", port=514)
# Configuration des filtres pour l'export syslog 1.
>>> api.clear_syslog_filters(id=1)
>>> api.set_syslog_filters(id=1, ips=["10.10.10.10"], gcap=[gcap_choice], protocols=["dns", "http"])
# Configuration des certificats pour l'export syslog 1. Les certificats doivent être au format PEM.
>>> api.set_syslog_certificate(id=1, cert="-----BEGIN CERTIFICATE-----...", cert_key="-----BEGIN RSA PRIVATE KEY-----", ca="-----BEGIN CERTIFICATE-----...")
# Désactivation de l'export syslog 1.
>>> api.disable_syslog(id=1)

5.3.2.8. Gcap Profiles

La section Gcap Profiles du menu Operators est en partie configurable via l'API. Les sections "Detection Ruletsets" et "Base Variables" sont configurables.

Pour appliquer les modifications sur le gcap:

>>> api.apply_gcap(gcap_id=1)
{'detail': 'Gcap config file updated with success'}

Fonctions qui ne nécessitent pas d'appliquer de modification:

# Lister les Gcaps associés au GCenter
>>> api.get_gcaps()
[{'id': 1, 'fqdn': 'gcap.example.com', 'is_paired': True, 'last_rule_update': '2021-07-01T13:42:03.709091', 'status': 'online'}]
# Afficher les données d'un Gcap associé au GCenter
>>> api.get_gcap_by_id(gcap_id=1)
{'id': 1, 'fqdn': 'gcap.example.com', 'is_paired': True, 'last_rule_update': '2021-07-01T13:42:03.709091', 'status': 'online'}
# Afficher le template associé aux Gcaps
>>> api.get_gcap_template()
{'profile': 'intuitio'}
# Modifier le template associé aux Gcaps parmi les valeurs: ["minimal", "balanced", "lpm", "paranoid", "intuitio"]
>>> api.set_gcap_template(template="balanced")
{'profile': 'balanced'}
# Afficher les interfaces d'un Gcap
>>> api.get_gcap_interfaces(gcap_id=1)
[
    {
        "enabled": true,
        "name": "mon0",
        "mtu": 1500,
        "is_cluster": false,
        "cluster_interfaces": [
            "mon0"
        ]
    }
]
# Afficher la configuration single-tenant
>>> api.get_gcap_single_tenant(gcap_id=1)
{'enabled': False, 'enable_shellcode': True, 'enable_powershell': True}
# Afficher la configuration multi-tenant
>>> api.get_gcap_multi_tenant(gcap_id=1)
{'enabled': True, 'ruleset': [{'id': 502, 'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': 'mon1'}], 'is_by_interface': True}
>>> api.get_gcap_profile(gcap_id=1)
{'files_hash': ['md5'], 'max_pending_packets': 4096, 'file_store_stream_depth_enable': True, 'file_store_stream_depth_mb': 10, 'stream_memcap_b': 32000000000, 'stream_prealloc_sessions': 1000000, 'stream_reassembly_memcap_b': 16000000000, 'stream_reassembly_depth_mb': 10, 'stream_reassembly_toserver_chunk_size_b': 2560, 'stream_reassembly_toclient_chunk_size_b': 2560, 'flow_memcap': 17179869184, 'flow_prealloc': 1048576, 'stream_reassembly_randomize_chunk_size': True, 'xff_enable': True, 'xff_mode': 'extra-data', 'xff_deployment': 'reverse', 'xff_header': 'X-Forwarded-For', 'payload': True, 'payload_buffer_size': 4096, 'payload_printable': True, 'packet': True, 'file_resend_interval': 600, 'http_body': False, 'http_body_printable': False, 'ftp_memcap': 10485760, 'smb_stream_depth': 10485760, 'http_enable': True, 'dns_udp_enable': True, 'dns_tcp_enable': True, 'tls_enable': True, 'smtp_enable': True, 'smb_enable': True, 'ssh_enable': True, 'netflow_enable': True, 'dnp3_enable': True, 'ftp_enable': True, 'dhcp_enable': True, 'ikev2_enable': True, 'krb5_enable': True, 'nfs_enable': True, 'tftp_enable': True, 'parsing_dcerpc_enabled': 1, 'parsing_dnp3_enabled': 1, 'parsing_dns_udp_enabled': 1, 'parsing_dns_tcp_enabled': 1, 'parsing_ftp_enabled': 1, 'parsing_http_enabled': 1, 'parsing_modbus_enabled': 1, 'parsing_smb_enabled': 1, 'parsing_smtp_enabled': 1, 'parsing_ssh_enabled': 1, 'parsing_tls_enabled': 1, 'parsing_dhcp_enabled': 1, 'parsing_ikev2_enabled': 1, 'parsing_krb5_enabled': 1, 'parsing_nfs_enabled': 1, 'parsing_ntp_enabled': 1, 'parsing_tftp_enabled': 1}
# Afficher la configuration les vlans
>>> api.get_gcap_vlans(gcap_id=1)
[{'id': 496, 'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': 'default'}, {'id': 497, 'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': '120'}, {'id': 498, 'ruleset': 3, 'codebreaker_shellcode': False, 'codebreaker_powershell': False, 'name': '110'}]

Fonctions qui nécessitent d'appliquer les modifications:

# Configurer le single-tenant
>>> api.set_gcap_single_tenant(
...     gcap_id=1,
...     enabled=True,
...     ruleset_id=3,
...     shellcode=True,
...     powershell=True
... )
{'enabled': True, 'ruleset': 3, 'enable_shellcode': True, 'enable_powershell': True}
# Configurer le multi-tenant par interface. Il doit être fait pour chaque interface.
>>> api.set_gcap_multi_tenant_interface(
...     gcap_id=1,
...     interface="mon0",
...     ruleset_id=3,
...     shellcode=True,
...     powershell=True
... )
{'enabled': True, 'ruleset': [{'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': 'mon0'}], 'is_by_interface': True}
# Supprimer la configuration multi-tenant (vlans + interfaces)
>>> api.reset_gcap_tenant(gcap_id=1)
True
# Configurer les variables du gcap. Pour l'instant seule la configuration du logging et du parsing des protocoles est implémentée.
>>> PARSING_PROTOS = [
...     "dcerpc", "dhcp", "dnp3", "dns_udp", "dns_tcp", "ftp",
...     "http", "ikev2", "krb5", "modbus", "nfs", "ntp", "smb",
...     "smtp", "ssh", "tftp", "tls"
... ]
>>> LOGGING_PROTOS = [
...     "dhcp", "dnp3", "dns_udp", "dns_tcp", "ftp", "http", "ikev2",
...     "krb5", "netflow", "nfs", "smb", "smtp", "ssh", "tftp", "tls"
... ]
>>> for proto in PARSING_PROTOS:
...     api.set_gcap_profile(gcap_id=1, proto=proto, parsing=True, logging=None)
>>> for proto in LOGGING_PROTOS:
...     api.set_gcap_profile(gcap_id=1, proto=proto, parsing=None, logging=True)
# Ajouter un vlan.
>>> api.set_gcap_vlan(
...     gcap_id=1,
...     vlan="110",
...     ruleset_id=3,
...     shellcode=False,
...     powershell=False
... )
{'id': 495, 'ruleset': 3, 'codebreaker_shellcode': False, 'codebreaker_powershell': False, 'name': '110'}
# Configurer le multi-tenant par vlan
>>> api.set_gcap_multi_tenant_vlan(
...     gcap_id=1,
...     vlan="110",
...     ruleset_id=3,
...     shellcode=False,
...     powershell=False
... )
{'enabled': True, 'ruleset': [{'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': 'default'}, {'ruleset': 3, 'codebreaker_shellcode': True, 'codebreaker_powershell': True, 'name': '120'}, {'ruleset': 3, 'codebreaker_shellcode': False, 'codebreaker_powershell': False, 'name': '110'}], 'is_by_interface': False}
# Supprimer un vlan
>>> api.delete_gcap_vlan(
...     gcap_id=1,
...     vlan="110"
... )
True
# Modifier la configuration d'un vlan. Il faut supprimer le vlan et le recréer.
>>> api.delete_gcap_vlan(
...     gcap_id=1,
...     vlan="110"
... )
True
>>> api.set_gcap_vlan(
...     gcap_id=1,
...     vlan="110",
...     ruleset_id=3,
...     shellcode=False,
...     powershell=False
... )
{'id': 495, 'ruleset': 3, 'codebreaker_shellcode': False, 'codebreaker_powershell': False, 'name': '110'}

5.3.2.9. Licence

Il est possible de configurer et de visualiser la licence du GCenter via l'API.

Configurer la licence du GCenter:

>>> api.get_serial_number()
'XXXXXXX'
>>> api.get_licence()
{'key': 'XXX...', 'license_expiry_alert': 90, 'details': {'antimalware_engines': 16, 'cie': False, 'codebreaker': True, 'days_left': 7, 'end_date': '2021-07-08', 'expired': False, 'full': True, 'license_expiry_alert': 90, 'machine_learning': True, 'malcore': True, 'max_gcaps': 100, 'model': '', 'nozomi': False, 'registered_mail': 'trial@gatewatcher.com', 'registered_owner': 'Trial', 'retroact': True, 'serial_number': 'XXX', 'sigflow': True, 'start_date': '2021-07-01', 'valid': True}}
>>> api.set_licence(key="XXX", expiry_alert=90)

5.3.2.10. Network

Il est possible et de visualiser la configuration réseau du GCenter via l'API.

# Afficher la configuration de toutes les interfaces réseau du GCenter
>>> api.get_gcenter_interfaces()
[{'name': 'mgmt0', 'fullname': 'mgmt0 - 3.3.3.3', 'hostname': '3.3.3.3'}, {'name': 'vpn0', 'fullname': 'vpn0 - 4.4.4.4', 'hostname': '4.4.4.4'}, {'name': 'icap0', 'fullname': 'icap0 - 5.5.5.5', 'hostname': '5.5.5.5'}, {'name': 'sup0', 'fullname': 'sup0 - 6.6.6.6', 'hostname': '6.6.6.6'}]
# Afficher la configuration d'une interface réseau du GCenter
>>> api.get_gcenter_interface_by_name("mgmt0")
{'name': 'mgmt0', 'fullname': 'mgmt0 - 3.3.3.3', 'hostname': '3.3.3.3'}

5.3.2.11. Malcore

Il est possible de configurer et de visualiser les paramètres de Malcore via l'API.

>>> api.set_malcore_settings(days=10, rescan=3, gbox=False)
>>> api.get_malcore_settings()
{'retroact_number_of_days_between_rescans': 10, 'retroact_number_of_rescan': 3, 'gbox_analysis': False}

5.3.2.12. Sigflow

Il est possible de visualiser les rulesets Sigflow via l'API.

# Lister les rulesets associés au GCenter
>>> api.get_sigflow_rulesets()
[{'id': 3, 'name': 'ALL', 'descr': '', 'created_date': '2021-06-24T13:45:35.627132Z', 'has_files': True}]
# Lister seulement les rulesets dont les fichiers ont été générés
>>> api.get_sigflow_rulesets(with_files=True)
[{'id': 3, 'name': 'ALL', 'descr': '', 'created_date': '2021-06-24T13:45:35.627132Z', 'has_files': True}]
# Afficher la configuration d'un ruleset associé au GCenter
>>> api.get_sigflow_ruleset_by_id(ruleset_id=3)
{'id': 3, 'name': 'ALL', 'descr': '', 'created_date': '2021-06-24T13:45:35.627132Z', 'has_files': True}

5.3.2.13. Status

Il est possible de visualiser le statut des composants du GCenter via l'API.

Afficher le statut des composants du GCenter:

# Vérifier que l'API fonctionne: ne nécessite pas d'authentication
>>> api.get_api_status()
True
# Afficher le statut du GCenter
>>> api.get_gcenter_status()
{'version': '2.5.3.101-XXXX', 'serial_number': 'XXXXXXX'}
# Afficher le statut global du GCenter et des erreurs associées
>>> api.get_healthchecks_status()
{'healthy': 'Bad', 'errors': ['Malware Analysis Engine has one or more issues: Last known good state: 2021-06-25T12:58:46.336013']}
# Afficher le statut des mises à jour
>>> api.get_updates_status()
{'status': 'Good', 'errors': []}
# Afficher les statuts d'authentification de l'utilisateur
>>> api.get_user_status()
{'message': 'success', 'authenticated': False}

5.3.2.14. User

Il est possible de visualiser les données des utilisateurs du GCenter via l'API.

Afficher les données des utilisateurs du GCenter:

# Afficher les données de tous les utilisateurs
>>> api.get_users()
[{'id': 1, 'username': 'admin', 'roles': [{'name': 'gwrights.gcap_mgmt'}, {'name': 'gwrights.sigflow_mgmt'}, {'name': 'gwrights.user_mgmt'}, {'name': 'gwrights.gcenter_mgmt'}, {'name': 'gwrights.common'}, {'name': 'gwrights.dashboards'}, {'name': 'gwrights.samples'}], 'groups': []}, {'id': 2, 'username': 'operator', 'roles': [{'name': 'gwrights.dashboards'}, {'name': 'gwrights.sigflow_mgmt'}, {'name': 'gwrights.common'}, {'name': 'gwrights.samples'}], 'groups': [{'id': 2, 'name': 'operators'}]}, {'id': 3, 'username': 'administrator', 'roles': [{'name': 'gwrights.user_mgmt'}, {'name': 'gwrights.common'}, {'name': 'gwrights.gcenter_mgmt'}, {'name': 'gwrights.gcap_mgmt'}], 'groups': [{'id': 1, 'name': 'administrators'}]}]
# Afficher les données d'un utilisateur
>>> api.get_user_by_id(user_id=1)
{'id': 1, 'username': 'admin', 'roles': [{'name': 'gwrights.gcap_mgmt'}, {'name': 'gwrights.sigflow_mgmt'}, {'name': 'gwrights.user_mgmt'}, {'name': 'gwrights.gcenter_mgmt'}, {'name': 'gwrights.common'}, {'name': 'gwrights.dashboards'}, {'name': 'gwrights.samples'}], 'groups': []}