你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
精细基于角色的访问控制(RBAC)是 Azure Monitor Log Analytics 的一项功能,可实现精细的数据访问控制。
了解如何根据角色、部门和地理位置控制对日志的访问。 这包括将人力资源人员限制为访问员工数据,或按国家/地区或部门限制对日志的访问权限等场景。
在此示例中,已知的 Log Analytics 表和字段用于强制实施行级访问。 数据根据设备类型和用户主体名称(UPN)等属性进行隔离。
有关精细 RBAC 概念的详细信息,请参阅 Azure Monitor 中的基于角色的精细访问控制(RBAC)。
先决条件
完成此方案需要满足以下先决条件:
- 包含表的 Azure Monitor Log Analytics 工作区
- 分配给帐户的角色,授予配置自定义角色的权限,并将其分配给具有 基于角色的访问控制管理员 或 用户访问管理员等条件的用户或组。
定义方案
在此方案中,行级访问控制对 CommonSecurityLog
采用限制性的方式,而对位于 Logs Analytics 工作区中的 SigninLogs
和 DnsEvents
两个表采用宽松的方式进行控制。 为一组运算符设置条件,如下所示:
- 将网络团队的组访问权限设置为仅访问
CommonSecurityLog
DeviceVendor 名称与网络防火墙匹配的表。 此配置使用“不允许访问数据,除非获得许可”策略。 - 为第 1 层安全分析师团队授予对所有表的访问权限,但限制
SigninLogs
和DnsEvents
表以防止他们访问包含 CEO UPN 或计算机名称的记录。 此配置使用除不允许访问的数据外,可访问所有数据的策略。
创建自定义角色
为定义的方案设置自定义角色。 为网络团队创建一个,另一个用于安全团队。 请记住,角色分配是累积的。因此,请删除任何授予读取权限且特权超过精细 RBAC 条件要求的角色。 有关详细信息,请参阅 配置精细的 RBAC 角色创建。
从包含先决条件 Log Analytics 工作区的资源组中,选择“访问控制”(IAM)。
选择“添加自定义角色”。
在资源组级别使用以下操作和数据操作创建常规数据访问角色:
自定义角色定义 详细信息 行动 Microsoft.OperationalInsights/workspaces/read
Microsoft.OperationalInsights/workspaces/query/read
数据操作 Microsoft.OperationalInsights/workspaces/tables/data/read
此图显示了自定义角色动作和数据动作在添加自定义角色页中的显示方式。
输入自定义角色的名称,例如
Log Analytics Network Device team
对
Log Analytics Security Analysts tier 1
自定义角色重复步骤 2-4。 使用 “克隆角色 ”选项并选择该Log Analytics Network Device team
角色作为基础角色。
分配自定义角色
将自定义角色分配给用户或组。 有关详细信息,请参阅 分配精细的 RBAC 角色。
在 Log Analytics 工作区中,选择“访问控制”(IAM)。
选择“添加角色分配”。
Log Analytics Network Device team
选择创建的自定义角色,然后选择“下一步”。选择要向其分配角色的用户或组,然后选择“ 下一步”。 此示例将角色分配给网络团队安全组。
选择条件>添加条件>添加动作。
选择“读取工作区数据”数据操作>“选择”。
生成限制条件
第一个自定义角色使用 “无访问数据权限,除非被允许的内容” 策略。 在此用例中,网络团队仅需要访问CommonSecurityLog
表,并且仅限于 DeviceVendor 与他们防火墙解决方案匹配的记录,无论是Check Point
或SonicWall
。
在 “生成表达式 ”部分中,选择“ 添加表达式”。
从“属性源”下拉列表中选择“资源”。
从“属性”下拉列表中选择“表名称”。
从“运算符”下拉列表中选择 StringEquals。
在值字段中键入
CommonSecurityLog
。选择 “添加表达式”,然后选择“ 添加 ”以添加另一个表达式。
从“属性源”下拉列表中选择“资源”。
从属性下拉列表中选择列值。
为“密钥”输入
DeviceVendor
。从“运算符”下拉列表中选择 ForAnyOfAnyValues:StringLikeIgnoreCase。
在 “值 ”字段中,输入
Check Point
和SonicWall
。选择表达式 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 条件”。
选择“保存”。
请等待最多 15 分钟以使有效权限生效。
生成宽松条件
第二个自定义角色使用 访问所有数据的策略,但不允许访问的内容除外。 在此用例中,第一层安全分析师团队需要访问所有表,但会限制对 SigninLogs
和 DnsEvents
表的访问,以防止访问 CEO 的 UPN 或计算机名称的记录。
添加一个新的角色指派,然后创建一个许可表达式。 在 Log Analytics 工作区中,选择“访问控制”(IAM)。
选择“添加角色分配”。
Log Analytics Security Analysts tier 1
选择创建的自定义角色,然后选择“下一步”。选择要向其分配角色的用户或组,然后选择“ 下一步”。 此示例将角色分配给第 1 层分析师安全组。
选择条件>添加条件>添加动作。
选择“读取工作区数据”数据操作>“选择”。
表达式 1
在 “生成表达式 ”部分中,选择“ 添加表达式”
从“属性源”下拉列表中选择“资源”。
从“属性”下拉列表中选择“表名称”。
从“运算符”下拉列表中选择 ForAnyOfAllValues:StringNotEquals。
在“值”字段中键入
SigninLogs
和DnsEvents
输入。确保在表达式 1 之后选择 Or 运算符。
表达式 2
选择 “添加表达式”
从“属性源”下拉列表中选择“资源”。
从“属性”下拉列表中选择“表名称”。
从“运算符”下拉列表中选择 StringEquals。
在“值”字段中,输入 。
SigninLogs
表达式 3
选择 “添加表达式”
从“属性源”下拉列表中选择“资源”。
从属性下拉列表中选择列值。
为“密钥”输入
UserPrincipalName
。从“运算符”下拉列表中选择 StringNotEquals。
在值字段中键入
CEO@contoso.com
。选择表达式 2 和 3>选择“组”,并选择“And”单选按钮。
表达式 4
选择 “添加表达式”
从“属性源”下拉列表中选择“资源”。
从“属性”下拉列表中选择“表名称”。
从“运算符”下拉列表中选择 StringEquals。
在“值”字段中,输入 。
DnsEvents
表达式 5 - 视觉编辑器中的限制为 5,但可以在代码编辑器中添加更多表达式。
选择 “添加表达式”
从“属性源”下拉列表中选择“资源”。
从属性下拉列表中选择列值。
为“密钥”输入
ComputerName
。从运算符下拉列表中选择StringNotEquals。
在值字段中键入
CEOlaptop
。选择表达式 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' ) ) )
选择“保存”。
请等待最多 15 分钟以使有效权限生效。
故障排除和监视
有关 ABAC 的常规故障排除,请参阅 排查 Azure 角色分配条件的问题。
对角色分配的更改记录在 Azure 活动日志中。
LAQueryLogs 表格记录用户查询是否在
ConditionalDataAccess
列中执行,并使用相应的 ABAC 条件。 有关详细信息,请参阅 LAQueryLogs 表引用。下面是第 1 层安全分析师运行的已审核查询示例,该分析人员触发了为
SigninLogs
表配置的条件:用于表名和列值的值区分大小写。 如果表名或值未正确指定,则条件可能会失败或产生意外行为,并且可能会拒绝对请求的数据的访问。
导致逻辑错误的无效条件为所有受影响的用户触发“400 错误请求”错误消息。 管理员必须修改条件。 例如,在工作区级别设置条件,其中包含不存在于任何表的列。