0%

利用Azure AD实现Homelab环境中应用的统一认证和授权

在我的Homelab中搭建了很多服务,比如NAS, Jenkins, Gitlab, SonarQube, Grafana等,如果每一个应用都使用独立的认证授权,我将面对如下问题:

  • 需要设置多个密码。
  • 如果设置定期更改策略,就意味着需要定期更改多个应用的用户密码。
  • 当添加一个用户到我的homelab环境的时候,需要在多个应用中添加用户,过程比较繁琐。
  • 当一个用户的角色发生改变时。需要在多个应用中进行更改。

我采用的解决方案是:Azure AD + Windows Server AD

Azure Active Directory

Azure Active Directory,简称Azure AD或者AAD,是一种基于云的标识和访问管理服务。 此服务可帮助员工访问外部资源,例如 Microsoft 365、Azure 门户和数以千计的其他 SaaS 应用程序。

功能

  • Azure Active Directory Free。跨 Azure、Microsoft 365 和许多常用 SaaS 应用程序提供用户和组管理、本地目录同步、基本报告、云用户的自助密码更改以及单一登录。
  • Azure Active Directory Premium P1。 除了免费版功能,P1 还允许混合用户访问本地资源和云资源。 它还支持高级管理,例如动态组、自助服务组管理、Microsoft Identity Manager 以及允许本地用户进行自助密码重置的云写回功能。
  • Azure Active Directory Premium P2 除了免费版和 P1 版功能,P2 还提供 Azure Active Directory 标识保护,可帮助对应用和重要的公司数据提供基于风险的条件访问,以及提供 Privileged Identity Management以便发现、限制和监视管理员及其对资源的访问,并在需要时提供实时访问。

该部分内容来自其技术文档,更多内容请访问什么是 Azure Active Directory?

如何获取

获取Azure Active Directory的方法有两种:

方法一:注册Azure账号即可使用Azure Active Directory Free版本。该方法是最简单,也是长期可用的。但是部分功能无法使用,比如使用本地写回进行自助式密码重置/更改/解锁。

方法二:通过Microsoft 365 Developer Program获取Azure AD Premium P2。该方式可以解锁所有Azure AD功能,但是通过该方式申请到Microsoft 365 E5订阅有效期只有120天,之后微软会根据规则决定是否自动续期。目前,可以在网上找到如何自动续期的方案。

Active Directory Domain Service

Active Directory 存储有关网络上对象的信息,并使管理员和用户可以轻松查找和使用这些信息。 Active Directory 使用结构化数据存储作为目录信息的逻辑分层组织的基础。

如何获取AD

获取AD有两种方式:

方法一,使用Azure Active Directory Domain Services。对于个人用户而言,价格有点高,比如在East Asia一个月至少需要109美元。其好处也是不言而喻的,可靠性是有保障的。

方法二,在本地Windows Server上安装AD。与我而言,我会选择这种方案,因为其成本相对而言会低很多,可靠性的优先级并不是很高。

Windows AD 和Azure AD之间的同步

Azure 提供了现成的工具,只需要在Windows Server上安装Azure AD Connect sync。详细内容可以参考:https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sync-whatis

如果AAD的license是P1或者P2,可以开启密码回写,这样就可以通过微软提供的服务进行密码修改。可以参考: https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-password-hash-synchronization

如果只是free license,还想通过web页面修改密码,需要借助Remote Desktop Services来实现,可以参考:https://www.devopsage.com/how-to-setup-web-page-to-change-users-password/

如何管理用户和用户组

我采用的方案如下:

  • 在Windows Server AD上维护用户组,之后用户组会自动同步到AAD上。
  • 在Windows Server AD上维护用户,之后用户组会自动同步到AAD上。
  • 根据使用场景创建用户组。以Jenkins为例,我将用户分为两类:Admin和User,Admin可以管理Jenkins的系统配置,User只能使用Jenkins,因此我会建立两个用户组:JenkinsAdmin 和 JenkinsUser。使用AAD实现SSO,最终根据用户组分配权限。

利用Azure AD实现应用SSO

Azure AD可以与很多种身份验证和同步协议集成。通过身份验证集成,只需对使用旧式身份验证方法的应用程序进行少量更改(或无需更改),即可使用 Azure AD 及其安全和管理功能。 利用同步集成,可以将用户和组数据同步到 Azure AD,然后使用用户 Azure AD 管理功能。 某些同步模式还支持自动预配。

支持的旧式身份验证方式:

  • 基于标头的身份验证(Header-based authentication)
  • LDAP身份验证(LDAP authentication)
  • OAuth 2.0身份验证(OAuth 2.0 authentication)
  • OIDC身份验证(OIDC authentication)
  • 基于密码的SSO身份验证(Password based SSO authentication)
  • RADIUS 身份验证(RADIUS authentication)
  • 远程桌面网关服务(Remote Desktop Gateway services)
  • Secure Shell (SSH)
  • SAML 身份认证(SAML authentication)
  • Windows身份认证(Windows Authentication - Kerberos Constrained Delegation)

支持的同步模式

  • 目录同步:从本地 Active Directory 环境同步到 Azure AD
  • LDAP同步
  • SCIM同步

更多详细的内容可以看Azure Active Directory 身份验证和同步协议概述 - Microsoft Entra | Microsoft Docs,毕竟是官方文档。

总结

用一张图总结一下。在我的Homelab环境中,AD之间的同步,以及用户如何使用Azure AD登录到Jenkins上。

接下来我会分享几篇实践性的博客,讲讲Azure AD与Synology NAS, Jenkins, Gitlab等的集成。