你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy 入门

本文介绍如何运行 Microsoft Sentinel ML Notebooks 入门指南笔记本,以设置可用于在 Microsoft Sentinel 中运行 Jupyter 笔记本和运行简单数据查询的基本配置。

“Microsoft Sentinel ML Notebook 入门指南”笔记本使用 MSTICPy,这是一个由 Microsoft 构建的网络安全工具 Python 库,可提供威胁搜寻和调查功能。

MSTICPy 减少了客户需要为 Microsoft Sentinel 编写的代码量,并提供以下功能:

  • 数据查询功能,针对 Microsoft Sentinel 表、Microsoft Defender for Endpoint、Splunk 和其他数据源。
  • 使用 TI 提供商(例如 VirusTotal 和 AlienVault OTX)进行威胁情报查找。
  • 扩充功能,如 IP 地址的地理定位、入侵指标 (IoC) 提取和 WhoIs 查找。
  • 使用事件时间线、流程树和地理映射的可视化工具。
  • 高级分析,例如时序分解、异常检测和聚类分析。

本文中的步骤介绍了如何在 Azure ML 工作区中通过 Microsoft Sentinel 运行 Microsoft Sentinel 机器学习 Notebooks 入门指南笔记本。 在其他环境(包括本地)中执行类似步骤以运行笔记本时,也可以使用本文作为指导。

有关更多信息,请参阅使用笔记本进行调查使用 Jupyter 笔记本搜寻安全威胁

某些 Microsoft Sentinel 笔记本不使用 MSTICPy,例如“凭据扫描器”笔记本或 PowerShell 和 C# 示例。 如果笔记本不使用 MSTICpy,则不需要本文中所述的 MSTICPy 配置。

重要

Microsoft Sentinel 已在 Microsoft Defender 门户的 Microsoft 统一安全运营平台中正式发布。 对于预览版,Microsoft Sentinel 在 Defender 门户中提供,无需 Microsoft Defender XDR 或 E5 许可证。 有关详细信息,请参阅 Microsoft Defender 门户中的 Microsoft Sentinel

先决条件

在开始之前,请确保拥有所需的权限和资源。

  • 若要在 Microsoft Sentinel 中使用 notebook,请确保你具有所需的权限。 有关详细信息,请参阅管理对 Microsoft Sentinel 笔记本的访问

  • 要执行本文中的步骤,需要使用 Python 3.6 或更高版本。 在 Azure 机器学习中,可以使用 Python 3.8 内核(推荐)或 Python 3.6 内核。

  • 此笔记本使用 MaxMind GeoLite2 地理定位查找服务来查找 IP 地址。 若要使用 MaxMind GeoLite2 服务,需要帐户密钥。 您可以在 Maxmind 注册页面注册一个免费帐户和密钥。

  • 此笔记本使用 VirusTotal (VT) 作为威胁情报源。 若要使用 VirusTotal 威胁情报查找,需要一个 VirusTotal 帐户和 API 密钥。

    可以在 VirusTotal 入门页上注册一个免费的 VT 帐户。 如果已经是 VirusTotal 用户,可以使用现有密钥。

    警告

    如果使用 VT 企业密钥,请存储在 Azure 密钥保管库,而不是存储在 msticpyconfig.yaml 文件中。 有关详细信息,请参阅 MSTICPY 文档中的将机密指定为密钥保管库机密

    如果不想立即设置 Azure 密钥保管库,请注册并使用免费帐户,直到可以设置密钥保管库存储。

运行并初始化“入门指南”笔记本

此过程介绍如何启动笔记本并初始化 MSTICpy。

  1. 对于 Azure 门户中的 Microsoft Sentinel,请在“威胁管理”下选择“笔记本”
    对于 Defender 门户中的 Microsoft Sentinel,请选择“Microsoft Sentinel”>“威胁管理”>“笔记本”

  2. 在“模板”选项卡中,选择“Microsoft Sentinel ML Notebooks 入门指南”

  3. 选择“通过模板创建”。

  4. 编辑名称,并根据需要选择 Azure 机器学习工作区。

  5. 选择“保存”以将其保存到 Azure 机器学习工作区。

  6. 选择“启动笔记本”以运行笔记本。 该笔记本包含一系列单元:

    • Markdown 单元包含文本和图形以及使用笔记本的说明
    • “代码”单元包含执行笔记本功能的可执行代码
  7. 请按顺序读取并运行代码单元。 跳过单元或乱序运行可能会导致笔记本随后出现错误。

    选择每个单元左侧的播放按钮即可运行每个单元。 根据正在执行的功能,单元中的代码可能运行得很快,或者可能需要几秒钟才能完成。

    单元运行时,播放按钮变为加载微调控件,并且在单元底部显示状态“Executing”以及已用时间。

    如果笔记本似乎没有按照描述的那样工作,请重新启动内核并从头开始运行笔记本。 例如,如果“入门指南”笔记本中的任何单元运行时间超过一分钟,请尝试重新启动内核并重新运行笔记本。

    “入门指南”笔记本包含有关 Jupyter 笔记本基本使用的说明,包括重新启动 Jupyter 内核。

    阅读并运行“Jupyter Notebook 简介”部分中的单元后,便可以开始配置任务,从“设置笔记本环境”部分开始。

  8. 运行笔记本的“设置笔记本环境”部分中的第一个代码单元,其中包括以下代码:

    # import some modules needed in this cell
    from pathlib import Path
    from IPython.display import display, HTML
    
    REQ_PYTHON_VER="3.6"
    REQ_MSTICPY_VER="1.2.3"
    
    display(HTML("Checking upgrade to latest msticpy version"))
    %pip install --upgrade --quiet msticpy[azuresentinel]>=$REQ_MSTICPY_VER
    
    # intialize msticpy
    from msticpy.nbtools import nbinit
    nbinit.init_notebook(
    namespace=globals(),
    extra_imports=["urllib.request, urlretrieve"]
    )
    pd.set_option("display.html.table_schema", False)
    

    初始化状态显示在输出中。 由于并未配置任何内容,应该会出现有关 Missing msticpyconfig.yaml 文件中缺少设置的配置警告。

创建配置文件

基本初始化后,便可以使用基本设置创建配置文件,以便使用 MSTICPy。

许多 Microsoft Sentinel 笔记本连接到 VirusTotal (VT) 等外部服务以收集和扩充数据。 若要连接到这些服务,需要设置和存储配置详细信息,例如身份验证令牌。 请在配置文件中包含此数据,这样便无需在每次使用笔记本时都必须输入身份验证令牌和工作区详细信息。

MSTICPy 使用 msticpyconfig.yaml 存储各种配置详细信息。 默认情况下,一个 msticpyconfig.yaml 文件由笔记本初始化函数生成。 如果从 Microsoft Sentinel 门户克隆此 notebook,Microsoft Sentinel 工作区数据将填充此配置文件。 此数据是从 config.json 文件中读取的,该文件是在启动笔记本时在 Azure 机器学习工作区中创建的。 有关详细信息,请参阅配置 MSTICPy 包配置文档

以下部分介绍了如何向 msticpyconfig.yaml 文件添加更多配置详细信息。

如果再次运行“入门指南”笔记本,并且已经有一个最低配置的 msticpyconfig.yaml 文件,则 init_notebook 函数不会覆盖或修改你现有的文件。

在任何时间点,选择 MSTICPy 配置工具中的 -Help 下拉菜单即可获得更多说明和详细文档的链接。

显示 MSTICPy 设置编辑器

  1. 在代码单元中,运行以下代码以导入 MpConfigEdit 工具并显示 msticpyconfig.yaml 文件的设置编辑器:

    from msticpy.config import MpConfigEdit
    
    mpedit = MpConfigEdit( "msticpyconfig.yaml")
    mpedit.set_tab("AzureSentinel")
    display(mpedit)
    

    例如:

    MSTICPy 设置编辑器的屏幕截图。

    设置编辑器中显示的自动创建的 msticpyconfig.yaml 文件包含 Microsoft Sentinel 部分中的两个条目。 这些都填充了从中克隆笔记本的 Microsoft Sentinel 工作区的详细信息。 一个条目包含你的工作区名称,另一个条目名为 Default。

    MSTICPy 允许存储多个 Microsoft Sentinel 工作区的配置并允许切换配置。 Default 条目可在默认情况下对“主”工作区进行身份验证,而无需明确命名。 如果添加另一个工作区,可以将其中任何一个配置为 Default 条目。

    在 Azure 机器学习环境中,设置编辑器可能需要 10 到 20 秒才会出现。

  2. 验证当前的设置,然后选择“保存设置”。

添加威胁情报提供程序设置

此过程描述了如何将 VirusTotal API 密钥存储在 msticpyconfig.yaml 文件中。 可以选择将 API 密钥上传到 Azure 密钥保管库,但必须先配置密钥保管库设置。 有关详细信息,请参阅配置密钥保管库设置

若要在 MSTICPy 设置编辑器中添加 VirusTotal 详细信息,请完成以下步骤。

  1. 在代码单元中输入以下代码并运行:

    mpedit.set_tab("TI Providers")
    mpedit
    
  2. 在“TI 提供程序”选项卡中,选择“添加提供程序”>“VirusTotal”>“添加”。

  3. 在“身份验证密钥”下,选择“存储”选项旁边的“文本”。

  4. 在“值”字段中,粘贴 API 密钥。

  5. 选择更新,然后选择设置编辑器底部的“保存设置”。

有关其他受支持的威胁情报提供程序的详细信息,请参阅 MSTICPy 文档中的威胁情报提供程序Microsoft Sentinel 中的威胁情报集成

添加 GeoIP 提供程序设置

此过程描述了如何在 msticpyconfig.yaml 文件中存储 MaxMind GeoLite2 帐户密钥,这样你的笔记本便可以使用针对 IP 地址的地理定位查找服务。

若要在 MSTICPy 设置编辑器中添加 GeoIP 提供商设置,请完成以下步骤。

  1. 在一个空白的代码单元中输入以下代码并运行:

    mpedit.set_tab("GeoIP Providers")
    mpedit
    
  2. 在“GeoIP 提供程序”选项卡中,选择“添加提供程序”>“GeoIPLite”>“添加”。

  3. 在“值”字段中,输入 MaxMind 帐户密钥。

  4. 如果需要,更新用于存储下载的 GeoIP 数据库的默认 ~/.msticpy 文件夹。

    • 在 Windows 上,此文件夹映射到 %USERPROFILE%/.msticpy。
    • 在 Linux 或 macOS 上,此路径映射到主文件夹中的 .msticpy 文件夹。

有关其他支持的地理定位查找服务的更多信息,请参阅 MSTICPy GeoIP 提供程序文档

配置 Azure Cloud 设置

如果你的组织不使用 Azure 公有云,则必须在设置中指定此项才能成功进行身份验证并使用来自 Microsoft Sentinel 和 Azure 的数据。 有关详细信息,请参阅指定 Azure 云和默认 Azure 身份验证方法

验证设置

  1. 在设置编辑器中选择“验证设置”。

    应该会出现有关配置缺少的警告消息,但不应收到任何有关威胁情报提供程序或 GeoIP 提供程序设置的警告消息。

  2. 根据你的环境,可能还需要配置密钥保管库设置指定 Azure 云

  3. 如果由于验证而需要进行任何更改,请进行这些更改,然后选择“保存设置”。

  4. 完成后,选择“关闭”按钮以隐藏验证输出。

有关详细信息,请参阅:适用于 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy 的高级配置

加载已保存的 MSTICPy 设置

创建配置文件过程中,你已将设置保存到你的本地 msticpyconfig 文件。

但在重新启动内核或运行另一个笔记本之前,MSTICPy 不会自动重新加载这些设置。 若要强制 MSTICPy 从新配置文件重新加载,请使用以下代码继续下一个代码单元并运行它:

import msticpy
msticpy.settings.refresh_config()

测试笔记本

由于已经初始化了你的环境并为工作区配置了基本设置,因此要使用 MSTICPy QueryProvider 类来测试笔记本。 QueryProvider 查询数据源,在本例中为 Microsoft Sentinel 工作区,并使查询的数据可用于在笔记本中查看和分析。

使用以下过程创建 QueryProvider 类的实例、从笔记本向 Microsoft Sentinel 进行身份验证,以及使用各种不同的参数选项查看和运行查询。

可以加载 QueryProvider 的多个实例以用于多个 Microsoft Sentinel 工作区或其他数据提供程序,例如 Microsoft Defender for Endpoint。

加载 QueryProvider

若要为 AzureSentinel 加载 QueryProvider,请使用以下代码转到单元并运行该单元:

# Initialize a QueryProvider for Microsoft Sentinel
qry_prov = QueryProvider("AzureSentinel")

如果在加载 Microsoft Sentinel 驱动程序时看到警告 Runtime dependency of PyGObject is missing,请参阅错误:缺少 PyGObject 的运行时依赖项。 此警告不会影响笔记本功能。

从笔记本对你的 Microsoft Sentinel 工作区进行身份验证

在 Azure 机器学习笔记本中,身份验证默认使用用于向 Azure 机器学习工作区进行身份验证的凭据。

通过完成以下步骤,使用托管标识进行身份验证。

  1. 运行以下代码,对 Sentinel 工作区进行身份验证。

    # Get the default Microsoft Sentinel workspace details from msticpyconfig.yaml
    
    ws_config = WorkspaceConfig()
    
    # Connect to Microsoft Sentinel with our QueryProvider and config details
    qry_prov.connect(ws_config)
    
  2. 查看输出。 显示的输出类似于下图。

    显示对 Azure 的身份验证并以连接消息结尾的屏幕截图。

使用 Azure CLI 缓存登录令牌

若要避免在重新启动内核或运行其他笔记本的情况下重新进行身份验证,可以使用 Azure CLI 来缓存登录令牌。

计算实例上的 Azure CLI 组件缓存一个刷新令牌,可供重复使用,直到令牌超时。MSTICPy 会自动使用 Azure CLI 凭据(如果可用)。

若要使用进行身份验证 Azure CLI,请在空白单元中输入以下命令并运行:

!az login

如果重启计算实例或切换到其他实例,将需要重新进行身份验证。 有关详细信息,请参阅 Microsoft Sentinel Notebook GitHub 存储库 wiki 中的使用 Azure CLI 缓存凭据部分。

查看 Microsoft Sentinel 工作区数据架构和内置的 MSTICPy 查询

连接到 Microsoft Sentinel QueryProvider 之后,可以通过查询 Microsoft Sentinel 工作区数据架构来理解可查询的数据类型。

Microsoft Sentinel QueryProvider 有一个 schema_tables 属性,可提供架构表的列表,还有一个 schema 属性,这其中还包括每个表的列名和数据类型。

查看 Microsoft Sentinel 架构中的前 10 个表:

转到包含以下代码的下一个单元,并运行该单元。 可以省略 [:10] 以列出工作区中的所有表。

# Get list of tables in the Workspace with the 'schema_tables' property
qry_prov.schema_tables[:10]  # Output only a sample of tables for brevity
                             # Remove the "[:10]" to see the whole list

随即显示以下输出:

Sample of first 10 tables in the schema
    ['AACAudit',
     'AACHttpRequest',
     'AADDomainServicesAccountLogon',
     'AADDomainServicesAccountManagement',
     'AADDomainServicesDirectoryServiceAccess',
     'AADDomainServicesLogonLogoff',
     'AADDomainServicesPolicyChange',
     'AADDomainServicesPrivilegeUse',
     'AADDomainServicesSystemSecurity',
     'AADManagedIdentitySignInLogs']

MSTICPy 还包含许多可供运行的内置查询。 使用 .list_queries() 列出可用查询,如果在调用时包含问号 (?) 作为参数,则可以获取有关查询的特定详细信息。 或者,也可以在查询浏览器中查看查询列表和关联帮助。

查看可用查询的示例:

  1. 转到包含以下代码的下一个单元,并运行该单元。 可以省略 [::5] 以列出所有查询。

    # Get a sample of available queries
    print(qry_prov.list_queries()[::5])  # showing a sample - remove "[::5]" for whole list
    
  2. 查看输出。

    Sample of queries
    =================
    ['Azure.get_vmcomputer_for_host', 'Azure.list_azure_activity_for_account', 'AzureNetwork.az_net_analytics', 'AzureNetwork.get_heartbeat_for_ip', 'AzureSentinel.get_bookmark_by_id', 'Heartbeatget_heartbeat_for_host', 'LinuxSyslog.all_syslog', 'LinuxSyslog.list_logon_failures', 'LinuxSyslog.sudo_activity', 'MultiDataSource.get_timeseries_decompose', 'Network.get_host_for_ip','Office365.list_activity_for_ip', 'SecurityAlert.list_alerts_for_ip', 'ThreatIntelligence.list_indicators_by_filepath', 'WindowsSecurity.get_parent_process', 'WindowsSecurity.list_host_events','WindowsSecurity.list_hosts_matching_commandline', 'WindowsSecurity.list_other_events']
    
  3. 若要通过传递 ? 作为参数来获取有关查询的帮助:

    # Get help about a query by passing "?" as a parameter
    qry_prov.Azure.list_all_signins_geo("?")
    
  4. 查看输出。

    Help for 'list_all_signins_geo' query
    =====================================
    Query:  list_all_signins_geo
    Data source:  AzureSentinel
    Gets Signin data used by morph charts
    
    Parameters
    ----------
    add_query_items: str (optional)
        Additional query clauses
    end: datetime (optional)
        Query end time
    start: datetime (optional)
        Query start time
        (default value is: -5)
    table: str (optional)
        Table name
        (default value is: SigninLogs)
    Query:
         {table} | where TimeGenerated >= datetime({start}) | where TimeGenerated <= datetime({end}) | extend Result = iif(ResultType==0, "Sucess", "Failed") | extend Latitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).latitude) | extend Longitude = tostring(parse_json(tostring(LocationDetails.geoCoordinates)).longitude)
    
  5. 若要在可滚动、可筛选的列表中查看表和查询,请继续进入下一个单元,使用以下代码运行它。

    qry_prov.browse_queries()
    
  6. 对于选定的查询,将显示所有必需的参数和可选参数,以及查询的完整文本。 例如:

    在可滚动、可筛选列表中显示的表和查询的屏幕截图。

虽然无法从浏览器运行查询,但可以在每个查询的末尾复制并粘贴示例,以便在笔记本中的其他位置运行。

有关更多信息,请参阅 MSTICPy 文档中的运行预定义查询

运行带有时间参数的查询

大多数查询都需要时间参数。 日期/时间字符串输入起来很乏味,而且在多个地方修改它们很容易出错。

每个查询提供程序都具有查询的默认开始时间和结束时间参数。 只要调用时间参数,默认情况下都会使用这些时间参数。 可以通过打开 query_time 控件更改默认时间范围。 更改将一直有效,直到再次更改。

  1. 转到包含以下代码的下一个单元,并运行该单元:

    # Open the query time control for your query provider
    qry_prov.query_time
    
  2. 根据需要设置 startend 时间。 例如:

    为查询设置默认时间参数的屏幕截图。

使用内置时间范围运行查询

将以 Pandas DataFrame 形式返回查询结果,这是一种表格数据结构,类似于电子表格或数据库表。 使用 pandas 函数对查询结果执行额外的筛选和分析。

  1. 运行以下代码单元。 它使用查询提供程序的默认时间设置运行查询。 可以更改此范围,并再次运行代码单元以查询新的时间范围。

    # The time parameters are taken from the qry_prov time settings
    # but you can override this by supplying explict "start" and "end" datetimes
    signins_df = qry_prov.Azure.list_all_signins_geo()
    
    # display first 5 rows of any results
    # If there is no data, just the column headings display
    signins_df.head()
    
  2. 查看输出。 它显示结果的前五行。 例如:

    使用内置时间范围进行查询运行的屏幕截图。

    如果没有数据,则只显示列标题。

使用自定义时间范围运行查询

还可以创建新的查询时间对象,并将其作为参数传递给查询。 这样,就可以针对不同的时间范围运行一次性查询,而不会影响查询提供程序的默认值。

# Create and display a QueryTime control.
time_range = nbwidgets.QueryTime()
time_range

设置所需的时间范围后,可以将时间范围传递给查询函数,在与之前代码不同的单元中运行以下代码:

signins_df = qry_prov.Azure.list_all_signins_geo(time_range)
signins_df.head()

还可以使用 startend 参数将日期时间值作为 Python 日期时间或日期时间字符串传递:

from datetime import datetime, timedelta
q_end = datetime.utc.now()
q_start = end – timedelta(5)
signins_df = qry_prov.Azure.list_all_signins_geo(start=q_start, end=q_end)

自定义查询

可以通过添加更多查询逻辑来自定义内置查询,或使用 exec_query 函数来运行完整查询。

例如,大多数内置查询都支持 add_query_items 参数,可以使用该参数将筛选器或其他操作附加到查询中。

  1. 运行以下代码单元以添加按警报名称汇总警报数量的数据框:

    from datetime import datetime, timedelta
    
    qry_prov.SecurityAlert.list_alerts(
       start=datetime.utcnow() - timedelta(28),
        end=datetime.utcnow(),
        add_query_items="| summarize NumAlerts=count() by AlertName"
    )
    
  2. 将完整的 Kusto 查询语言 (KQL) 查询字符串传递给查询提供程序。 查询针对连接的工作区运行,数据以 panda DataFrame 形式返回。 运行:

    # Define your query
    test_query = """
    OfficeActivity
    | where TimeGenerated > ago(1d)
    | take 10
    """
    
    # Pass the query to your QueryProvider
    office_events_df = qry_prov.exec_query(test_query)
    display(office_events_df.head())
    
    

有关详细信息,请参阅:

测试 VirusTotal

  1. 若要使用威胁情报查看某个 IP 地址是否出现在 VirusTotal 数据中,请使用以下代码运行单元:

    # Create your TI provider – note you can re-use the TILookup provider (‘ti’) for
    # subsequent queries - you don’t have to create it for each query
    ti = TILookup()
    
    # Look up an IP address
    ti_resp = ti.lookup_ioc("85.214.149.236")
    
    ti_df = ti.result_to_df(ti_resp)
    ti.browse_results(ti_df, severities="all")
    
  2. 查看输出。 例如:

    VirusTotal 数据中出现的 IP 地址的屏幕截图。

  3. 向下滚动以查看完整结果。

有关更多信息,请参阅 MSTICPy 中的威胁情报查找

测试地理位置 IP 查找

  1. 若要使用 MaxMind 服务获取 IP 地址的地理位置详细信息,请使用以下代码运行单元:

    # create an instance of the GeoLiteLookup provider – this
    # can be re-used for subsequent queries.
    geo_ip = GeoLiteLookup()
    raw_res, ip_entity = geo_ip.lookup_ip("85.214.149.236")
    display(ip_entity[0])
    
  2. 查看输出。 例如:

    ipaddress
    { 'AdditionalData': {},
      'Address': '85.214.149.236',
      'Location': { 'AdditionalData': {},
                    'CountryCode': 'DE',
                    'CountryName': 'Germany',
                    'Latitude': 51.2993,
                    'Longitude': 9.491,
                    'Type': 'geolocation',
                    'edges': set()},
      'ThreatIntelligence': [],
      'Type': 'ipaddress',
      'edges': set()}
    

第一次运行此代码时,应该会看到 GeoLite 驱动程序正在下载其数据库。

有关详细信息,请参阅 MSTICPy GeoIP 提供程序

配置密钥保管库设置

仅当在 Azure 密钥保管库中存储机密时,本节才有意义。

在 Azure 密钥保管库中存储机密时,需要先在 Azure 全局密钥保管库管理门户中创建密钥保管库。

必需的设置是你从 Vault 属性中获得的所有值,尽管有些可能具有不同的名称。 例如:

  • VaultName 显示在 Azure 密钥保管库的“属性”屏幕的左上角
  • TenantId 显示为“目录 ID”
  • AzureRegion 显示为“位置”
  • Authority 表示 Azure 服务的云。

要从 Vault 检索机密,只需要 VaultName 、 TenantId 和 Authority 值。 如果选择从 MSTICPy 创建保管库,则需要其他值。 有关详细信息,请参阅将机密指定为密钥保管库机密

默认情况下选择“使用密钥环”选项,并允许在本地密钥环中缓存密钥保管库凭据。 有关详细信息,请参阅密钥环文档

注意

如果不完全信任运行笔记本的“计算”主机,请勿使用“使用密钥环”选项。

在我们的例子中,“计算”是指运行笔记本内核的 Jupyter 中心服务器,而不一定是运行浏览器的机器。 如果使用的是 Azure ML,则“计算”将是所选的 Azure ML 计算实例。 密钥环在运行笔记本内核的主机上进行缓存。

若要在 MSTICPy 设置编辑器中添加 Key Vault 设置,请完成以下步骤。

  1. 转到包含以下代码的下一个单元,并运行该单元:

    mpedit.set_tab("Key Vault")
    mpedit
    
  2. 输入密钥保管库的保管库详细信息。 例如:

    密钥保管库设置部分的屏幕截图

  3. 选择“保存”,然后“保存设置”。

测试密钥保管库

若要测试密钥保管库,请检查能否连接并查看机密。 如果未添加机密,则看不到任何详细信息。 如果需要,请将测试机密从 Azure Key Vault 门户添加到保管库,并检查该机密是否显示在 Microsoft Sentinel。

例如:

mpconfig = MpConfigFile()
mpconfig.refresh_mp_config()
mpconfig.show_kv_secrets()

注意

不要让输出显示在你保存的笔记本中。 如果输出中有真正的秘密,请在保存笔记本之前使用笔记本的“清除输出”命令。

此外,请删除笔记本的缓存副本。 例如,查看笔记本目录的 .ipynb_checkpoints 子文件夹,并删除此笔记本的所有已发现副本。 保存清除了输出的笔记本应该会覆盖检查点副本。

配置密钥保管库后,可以使用数据提供程序和 TI 提供程序部分中的“上传到 KV”按钮将所选设置移动到保管库。 MSTICPy 将根据设置的路径为秘密生成一个默认名称,例如 TIProviders-VirusTotal-Args-AuthKey

如果值成功上传,则设置编辑器中“值”字段的内容将被删除,底层设置将替换为占位符值。 MSTICPy 将使用此值来指示在尝试检索密钥时应自动生成密钥保管库路径。

如果已将所需的机密存储在密钥保管库中,则可以在“值”字段中输入机密名称。 如果机密未存储在你的默认保管库中(在“密钥保管库”部分中指定的值),则可以指定路径 VaultName/SecretName

当前不支持从不同租户中的保管库获取设置。 有关详细信息,请参阅将机密指定为密钥保管库机密

指定 Azure 云和 Azure 身份验证方法

如果使用的是主权或政府 Azure 云,而不是公共或全球 Azure 云,则必须在你的设置中选择适当的云。 对于大多数组织,全球云是默认云。

还可以使用这些 Azure 设置来定义 Azure 身份验证类型的默认首选项。

若要指定 Azure 云和 Azure 身份验证方法,请完成以下步骤。

  1. 转到包含以下代码的下一个单元,并运行该单元:

    mpedit.set_tab("Azure")
    mpedit
    
  2. 选择你的组织使用的云,或保留默认选择的“全球”选项。

  3. 选择以下一种或多种方法:

    • 选择 env 可将 Azure 凭据存储在环境变量中。
    • 选择 msi 可使用托管服务标识,这是分配给运行 Jupyter 中心的主机或虚拟机的标识。 Azure 机器学习计算实例目前不支持 MSI。
    • 选择 cli 可使用来自经过身份验证的 Azure CLI 会话的凭据。
    • 选择 interactive 可使用采用了一次性设备代码的交互式设备授权流程。

    在大多数情况下,我们建议选择多种方法,例如 cli 和 interactive。 Azure 身份验证会按照列出的顺序尝试每种配置的方法,直到成功为止。

  4. 选择“保存”,然后“保存设置”。

    例如:

    为 Azure 政府云定义的设置的屏幕截图。

后续步骤

本文介绍了在 Microsoft Sentinel 中将 MSTICPy 与 Jupyter 笔记本一起使用的基础知识。 有关详细信息,请参阅适用于 Microsoft Sentinel 中的 Jupyter Notebook 和 MSTICPy 的高级配置

还可以尝试存储在 Microsoft Sentinel Notebook GitHub 存储库中的其他 notebook,例如:

如果在另一个 Jupyter 环境中使用本文所述的笔记本,则可以使用支持 Python 3.6 或更高版本的任何内核。

若要在 Microsoft Sentinel 和 Azure 机器学习 (ML) 之外使用 MSTICPy 笔记本,还需要配置 Python 环境。 使用 Anaconda 发行版安装 Python 3.6 或更高版本,其中包含许多必需的包。

有关 MSTICPy 和笔记本的更多读物

下表列出了有关学习 MSTICPy、Microsoft Sentinel 和 Jupyter 笔记本的更多参考资料。

使用者 更多参考资料
MSTICPy - MSTICPy 包配置
- MSTICPy 设置编辑器
- 配置笔记本环境
- MPSettingsEditor 笔记本

注意:Azure-Sentinel-Notebooks GitHub 存储库还包含 msticpyconfig.yaml 模板文件,其中包含注释掉的部分,可能会对你理解设置有所帮助。
Microsoft Sentinel 和 Jupyter 笔记本 - 创建第一个 Microsoft Sentinel 笔记本(博客系列)
- Jupyter Notebook 简介
- MSTICPy 文档
- Microsoft Sentinel Notebook 文档
- Infosec Jupyter 书籍
- Linux 主机资源管理器 Notebook 演练
- 为什么使用 Jupyter 进行安全调查
- 使用 Microsoft Sentinel 和 Notebook 进行安全调查
- Pandas 文档
- Bokeh 文档