【问题标题】:Security Around Microsoft Azure AD AD "Application Access"Microsoft Azure AD AD“应用程序访问”的安全性
【发布时间】:2019-03-12 15:41:43
【问题描述】:

我已成功配置 qn Azure AD App Registration,允许基于 client_credentials 的 OAuth 2.0 流程工作。这允许第三方应用程序访问 Microsoft Graph API。该应用程序具有“Calendar.Read”权限。这意味着该应用程序几乎可以读取任何日历(包括 CEO 的)。

我现在正在与安全部门进行对话。在 Microsoft 世界中,我可以使用什么来通过此应用程序权限锁定 API 访问的使用?是否有能力做以下事情:

  • 限制可以访问应用程序的 IP 范围?
  • 限制可以访问应用程序的用户? (但是在 Client_credentials 中,没有用户上下文)
  • 通过应用记录流量/活动?

我现在唯一能想到的就是说应用程序上的重定向 URL 配置意味着,没有其他应用程序可以使用 Client_credentials 获取访问令牌,即使应用程序 id 和密码被泄露

对可以实施的进一步安全控制有何建议?

【问题讨论】:

  • 重定向 URL 在客户端凭据中无关紧要。它不被使用。令牌获取是一个 HTTP 请求,您可以在任何地方进行。

标签: azure-active-directory microsoft-graph-api


【解决方案1】:

限制访问:您需要在应用程序中执行此操作。正如您所指出的,客户端凭据流程不允许限制用户。但是,没有什么可以阻止您向应用程序添加用户身份验证,可能使用委托的图形身份验证流程来确定他们是谁。

IP 范围:目前不可能。

记录流量:目前在图表端这是不可能的,但是您可以/应该在应用程序端记录流量。

重定向 url 对您没有帮助,因为它们没有用于客户端凭据流。

在一般应用中只有auth(客户端凭证流)+广泛的授权范围是非常强大的,但必须正确管理。您不会无意中想在图表顶部构建一个全新的用户/权限模型 :)

【讨论】:

  • 也可以使用每个用户的同意和刷新令牌来做类似的后台工作。它更具限制性,但确实需要每个用户的同意 + 它比客户端凭据更脆弱。
  • @juunas 确实如此,但我很遗憾必须以稳健的方式计算到期时间的人!
  • @ChrisJohnson 到期时间并不是真正的问题(库负责刷新)。问题是不活动(刷新令牌可能过期),更重要的是,服务假设这是一个可以被中断和提示的实际人类用户(例如,满足条件访问策略,更改过期/密码泄露等)。
  • @PhilippeSignoret 是的。刷新令牌过期是一个黑洞。您没有确定的方法可以知道它们持续多久,因此无法主动警告用户登录以刷新它们。太可怕了。
  • 是的,但是刷新令牌可能会因为过时或过期以外的其他原因而失效。所以无论如何它都不是一个完整的解决方案。
【解决方案2】:

目前可用于在令牌颁发(在 Azure AD 中)或 API 访问(在 Microsoft Graph 中)提供这些控制的选项很少。但是,您可以通过仔细管理对应用程序凭据的访问来获得类似的结果。以下是您可以采取的几个步骤(并非详尽无遗):

应用凭据:保密,确保安全

使用密钥保管库。您可以为访问 Key Vault 中的数据配置您提到的许多限制,包括 IP 范围和哪些用户可以访问。 Key Vault 还提供对机密访问的审核。不要忘记注意哪些用户拥有对 Key Vault 的管理访问权限(例如,其他用户有权访问同一 Azure 订阅)。

使用证书(公钥/私钥对)而不是客户端机密(密码)来对应用进行身份验证。人们倾向于比管理共享密码更仔细地管理证书,并且开发人员不太可能将秘密硬编码到脚本/代码中。

谨慎考虑哪些用户可以管理应用的凭据

这经常被忽视。可以访问现有凭据或将新的授权凭据添加到应用程序的用户(或其他应用程序)可以充当应用程序并(错误)使用已授予应用程序的所有权限。这包括:

  • “公司管理员”、“应用程序管理员”和“云应用程序管理员”目录角色中的用户(和应用程序)。
  • 被设置为应用注册(Application 对象)和企业应用(ServicePrincipal 对象)所有者的用户。
  • 有权访问应用程序所在的服务器或服务(将拥有或有权访问凭据)的用户(或系统)。

对于所有这些情况,请确保这是尽可能少的用户数量,并且他们确实有合理的需求。对于确实需要访问权限的用户,尽可能强制实施即时、限时访问(非持久访问),例如使用Azure AD Privileged Identity Management,以实现有时限的即时访问Azure AD 目录角色和 Azure 资源的访问权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2017-10-16
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多