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

在 Azure Monitor 中配置精细 RBAC(预览版)

精细基于角色的访问控制(RBAC)是 Azure Monitor Log Analytics 的一项功能,可实现精细的数据访问控制。

了解如何根据角色、部门和地理位置控制对日志的访问。 这包括将人力资源人员限制为访问员工数据,或按国家/地区或部门限制对日志的访问权限等场景。

在此示例中,已知的 Log Analytics 表和字段用于强制实施行级访问。 数据根据设备类型和用户主体名称(UPN)等属性进行隔离。

有关精细 RBAC 概念的详细信息,请参阅 Azure Monitor 中的基于角色的精细访问控制(RBAC)。

先决条件

完成此方案需要满足以下先决条件:

定义方案

在此方案中,行级访问控制对 CommonSecurityLog 采用限制性的方式,而对位于 Logs Analytics 工作区中的 SigninLogsDnsEvents 两个表采用宽松的方式进行控制。 为一组运算符设置条件,如下所示:

  1. 将网络团队的组访问权限设置为仅访问 CommonSecurityLog DeviceVendor 名称与网络防火墙匹配的表。 此配置使用“不允许访问数据,除非获得许可”策略。
  2. 为第 1 层安全分析师团队授予对所有表的访问权限,但限制 SigninLogsDnsEvents 表以防止他们访问包含 CEO UPN 或计算机名称的记录。 此配置使用除不允许访问的数据外,可访问所有数据的策略。

创建自定义角色

为定义的方案设置自定义角色。 为网络团队创建一个,另一个用于安全团队。 请记住,角色分配是累积的。因此,请删除任何授予读取权限且特权超过精细 RBAC 条件要求的角色。 有关详细信息,请参阅 配置精细的 RBAC 角色创建

  1. 从包含先决条件 Log Analytics 工作区的资源组中,选择“访问控制”(IAM)。

  2. 选择“添加自定义角色”。

  3. 在资源组级别使用以下操作和数据操作创建常规数据访问角色:

    自定义角色定义 详细信息
    行动 Microsoft.OperationalInsights/workspaces/read
    Microsoft.OperationalInsights/workspaces/query/read
    数据操作 Microsoft.OperationalInsights/workspaces/tables/data/read

    此图显示了自定义角色动作和数据动作在添加自定义角色页中的显示方式。

    显示自定义角色操作和数据操作显示方法的屏幕截图。

  4. 输入自定义角色的名称,例如 Log Analytics Network Device team

  5. Log Analytics Security Analysts tier 1 自定义角色重复步骤 2-4。 使用 “克隆角色 ”选项并选择该 Log Analytics Network Device team 角色作为基础角色。

分配自定义角色

将自定义角色分配给用户或组。 有关详细信息,请参阅 分配精细的 RBAC 角色

  1. 在 Log Analytics 工作区中,选择“访问控制”(IAM)。

  2. 选择“添加角色分配”。

  3. Log Analytics Network Device team选择创建的自定义角色,然后选择“下一步”。

  4. 选择要向其分配角色的用户或组,然后选择“ 下一步”。 此示例将角色分配给网络团队安全组。

  5. 选择条件>添加条件>添加动作

  6. 选择“读取工作区数据”数据操作>“选择”

    操作部分完成后的外观如下:显示添加条件页面的“添加操作”部分的屏幕截图。

生成限制条件

第一个自定义角色使用 “无访问数据权限,除非被允许的内容” 策略。 在此用例中,网络团队仅需要访问CommonSecurityLog表,并且仅限于 DeviceVendor 与他们防火墙解决方案匹配的记录,无论是Check PointSonicWall

  1. “生成表达式 ”部分中,选择“ 添加表达式”。

  2. “属性源”下拉列表中选择“资源”。

  3. “属性”下拉列表中选择“表名称”。

  4. 从“运算符”下拉列表中选择 StringEquals

  5. 字段中键入CommonSecurityLog

  6. 选择 “添加表达式”,然后选择“ 添加 ”以添加另一个表达式。

  7. “属性源”下拉列表中选择“资源”。

  8. 属性下拉列表中选择列值

  9. 为“密钥”输入 DeviceVendor

  10. 从“运算符”下拉列表中选择 ForAnyOfAnyValues:StringLikeIgnoreCase

  11. “值 ”字段中,输入 Check PointSonicWall

  12. 选择表达式 1 和 2>选择“组”,并选中“And”单选按钮。

    下面是限制性条件在完成时的外观:

    显示限制条件的表达式的屏幕截图。

    下面是限制性条件以代码形式显示的方式:

    (
     (
      !(ActionMatches{'Microsoft.OperationalInsights/workspaces/tables/data/read'})
     )
     OR 
     (
      (
       @Resource[Microsoft.OperationalInsights/workspaces/tables:name] StringEquals 'CommonSecurityLog'
       AND
       @Resource[Microsoft.OperationalInsights/workspaces/tables/record:DeviceVendor<$key_case_sensitive$>] ForAnyOfAnyValues:StringLikeIgnoreCase {'Check Point', 'SonicWall'}
      )
     )
    )
    

    有关使用条件分配角色的编程方式的详细信息,请参阅 “添加或编辑 ABAC 条件”。

  13. 选择“保存”

    请等待最多 15 分钟以使有效权限生效。

生成宽松条件

第二个自定义角色使用 访问所有数据的策略,但不允许访问的内容除外。 在此用例中,第一层安全分析师团队需要访问所有表,但会限制对 SigninLogsDnsEvents 表的访问,以防止访问 CEO 的 UPN 或计算机名称的记录。

  1. 添加一个新的角色指派,然后创建一个许可表达式。 在 Log Analytics 工作区中,选择“访问控制”(IAM)。

  2. 选择“添加角色分配”。

  3. Log Analytics Security Analysts tier 1选择创建的自定义角色,然后选择“下一步”。

  4. 选择要向其分配角色的用户或组,然后选择“ 下一步”。 此示例将角色分配给第 1 层分析师安全组。

  5. 选择条件>添加条件>添加动作

  6. 选择“读取工作区数据”数据操作>“选择”

    表达式 1

  7. “生成表达式 ”部分中,选择“ 添加表达式”

  8. “属性源”下拉列表中选择“资源”。

  9. “属性”下拉列表中选择“表名称”。

  10. 从“运算符”下拉列表中选择 ForAnyOfAllValues:StringNotEquals

  11. “值”字段中键入SigninLogsDnsEvents输入。

  12. 确保在表达式 1 之后选择 Or 运算符。

    表达式 2

  13. 选择 “添加表达式”

  14. “属性源”下拉列表中选择“资源”。

  15. “属性”下拉列表中选择“表名称”。

  16. 从“运算符”下拉列表中选择 StringEquals

  17. 在“值”字段中,输入 SigninLogs

    表达式 3

  18. 选择 “添加表达式”

  19. “属性源”下拉列表中选择“资源”。

  20. 属性下拉列表中选择列值

  21. 为“密钥”输入 UserPrincipalName

  22. 从“运算符”下拉列表中选择 StringNotEquals

  23. 字段中键入CEO@contoso.com

  24. 选择表达式 2 和 3>选择“组”,并选择“And”单选按钮。

    表达式 4

  25. 选择 “添加表达式”

  26. “属性源”下拉列表中选择“资源”。

  27. “属性”下拉列表中选择“表名称”。

  28. 从“运算符”下拉列表中选择 StringEquals

  29. 在“值”字段中,输入 DnsEvents

    表达式 5 - 视觉编辑器中的限制为 5,但可以在代码编辑器中添加更多表达式。

  30. 选择 “添加表达式”

  31. “属性源”下拉列表中选择“资源”。

  32. 属性下拉列表中选择列值

  33. 为“密钥”输入 ComputerName

  34. 运算符下拉列表中选择StringNotEquals

  35. 字段中键入CEOlaptop

  36. 选择表达式 4 和 5>选择“组”,并选择“And”单选按钮。

    下面是完成时允许条件的外观 - 请注意“ 添加表达式 ”按钮已禁用。 此行为是由于达到最大表达式数量的限制。

    显示宽松的第二个表达式的屏幕截图。

    下面是允许条件以代码形式显示的方式:

    (
     (
      !(ActionMatches{'Microsoft.OperationalInsights/workspaces/tables/data/read'})
     )
     OR 
     (
      @Resource[Microsoft.OperationalInsights/workspaces/tables:name] ForAnyOfAllValues:StringNotEquals {'SigninLogs', 'DnsEvents'}
      OR
      (
       @Resource[Microsoft.OperationalInsights/workspaces/tables:name] StringEquals 'SigninLogs'
       AND
       @Resource[Microsoft.OperationalInsights/workspaces/tables/record:UserPrincipalName<$key_case_sensitive$>] StringNotEquals 'CEO@contoso.com'
      )
      OR
      (
       @Resource[Microsoft.OperationalInsights/workspaces/tables:name] StringEquals 'DnsEvents'
       AND
       @Resource[Microsoft.OperationalInsights/workspaces/tables/record:Computer<$key_case_sensitive$>] StringNotEquals 'CEOlaptop1'
      )
     )
    )
    
    
  37. 选择“保存”

    请等待最多 15 分钟以使有效权限生效。

故障排除和监视

有关 ABAC 的常规故障排除,请参阅 排查 Azure 角色分配条件的问题

  • 对角色分配的更改记录在 Azure 活动日志中。

  • LAQueryLogs 表格记录用户查询是否在 ConditionalDataAccess 列中执行,并使用相应的 ABAC 条件。 有关详细信息,请参阅 LAQueryLogs 表引用

    下面是第 1 层安全分析师运行的已审核查询示例,该分析人员触发了为 SigninLogs 表配置的条件:

    屏幕截图显示应用于已审核查询的条件。

  • 用于表名和列值的值区分大小写。 如果表名或值未正确指定,则条件可能会失败或产生意外行为,并且可能会拒绝对请求的数据的访问。

  • 导致逻辑错误的无效条件为所有受影响的用户触发“400 错误请求”错误消息。 管理员必须修改条件。 例如,在工作区级别设置条件,其中包含不存在于任何表的列。