什么是安全且用户友好的方式,可以仅向少数用户提供对 Amazon EC2 上的 Web 应用程序的访问权限?

什么是安全且用户友好的方式,可以仅向少数用户提供对 Amazon EC2 上的 Web 应用程序的访问权限?

情况

我们在 Amazon EC2 上托管了一个 Web 应用程序。它仅供公司中的少数用户使用。

我们如何应对

  • 我们与用户共享实例的(弹性)IP 地址。
  • 我们会根据需要将每个用户的 IP 地址添加到实例的安全组。

当我说当需要时,我的意思是用户发来的电子邮件,抱怨 Web 门户显示错误页面。他们忘记了将 IP 纳入安全组这一步是必需的(我不怪他们;他们是最终用户)。

为了回答这个问题,我们假设公司里总共有 5 个用户需要此访问权限。User-1 和 User-2 的 IP 地址已添加到安全组中。

问题

  1. 用户 3 直接访问该 IP 地址,但无法访问,因为该用户的 IP 地址尚未添加到安全组。
  2. 如果用户 1 或用户 2 重新启动互联网,他们的 IP 地址可能会发生变化(ISP 提供的动态 IP),并且必须将新的 IP 地址添加到安全组(并且必须撤销旧 IP 地址以避免其他人访问)。

我正在考虑的其他选择

  1. 仅提供对其办公室 VPN 的访问权限并要求所有用户通过它进行连接。
  2. (对用户来说非常麻烦)要求用户登录 AWS 管理控制台,转到 EC2 服务,转到安全组部分并手动添加他们的 IP 地址(用户已经拥有 AWS IAM 用户和执行此操作的适当权限)。
  3. 创建一个脚本,将用户的当前 IP 添加到安全组(使用 AWS CLI / SDK) - 听起来非常危险且不合适,因为我们必须在脚本中包含某人的 API 凭证。

答案1

选项 4 - 停止通过安全组控制访问,而是实施一些合适的身份验证机制。

例如应用程序负载均衡器在 Web 应用程序前面,并配置 ALB 以要求Cognito 身份验证。只有经过身份验证的用户才能通过 ALB 进入您的 Web 应用程序 - 问题解决了。Cognito 可以拥有本地用户,也可以与您的 Azure AD 一起使用,或者如果您在组织中使用 Office365。这是一种非常透明的方式,不需要对应用程序进行任何更改。

或者,如果您的 Web 应用程序支持它,您应该将其配置为要求对您的组织正在使用的任何用户目录(Office365、G-Suite 等)进行 SAML 身份验证。

希望有帮助:)

答案2

选项 5 - 停止管理安全组(本质上是基于 IP 的防火墙)并使用 TLS 客户端证书。

如果您使用的是 Azure AD 或 LDAP 等现代用户管理系统,那么您已经拥有了颁发和分发证书的正确工具。您将设置一个私有 CA 并配置 HTTP 服务器(Nginx、Apache2 或 AWS ALB)以通过证书进行身份验证。没有证书或证书无效(包括过期证书)的人将无法通过 HTTP 服务器。这需要更改为 Web 应用程序本身,您甚至可以放弃应用程序中的任何身份验证,因为除了访问控制之外,证书还可以用于该目的。

一个加分点是,这是有效的到处- 无论是 AWS、Azure 还是您的本地基础设施。您甚至可以重复使用完全相同的凭证和配置堆栈(AWS ALB 除外)。

相关内容