限制对 AWS SQL Server 实例的外部访问

Posted

技术标签:

【中文标题】限制对 AWS SQL Server 实例的外部访问【英文标题】:Limiting External Access to AWS SQL Server Instance 【发布时间】:2020-04-15 20:57:10 【问题描述】:

我在 AWS 上有一个 SQL Server 实例,我通过更改我的安全组以允许从“无处不在”进行访问,从而向外部访问开放。

+-------------+----------+------------+--------------------------+
|    Type     | Protocol | Port Range |         Source           |   
+-------------+----------+------------+--------------------------+
|    MSSQL    | TCP      |    1433    | Custom  0.0.0.0/0        |
|    MSSQL    | TCP      |    1433    | Custom  ::/0             | †
+-------------+----------+------------+--------------------------+

我想限制对这个数据库的访问,虽然不是通过 IP 地址,因为我将用来访问它的服务没有静态 IP。

如何收紧对该数据库的入站访问以用于外部服务(例如 Firebase 函数或 NodeJS 应用程序)?

† 在安全组入站规则部分选择“Everywhere”和“MSSQL”时生成的 AWS 安全组规则

【问题讨论】:

云函数没有专用的外部 IP 范围。您应该考虑使用附加加密或在相互验证它们的代码之间传递一些共享秘密。 @DougStevenson 你能重新打开这个吗?我知道 IP 限制;我正在寻找另一种解决方案。干杯。 我建议重新表述这个问题,不要提及云功能或 IP 地址,因为您手头的问题是如何控制对仅授权客户的访问。您想要的是一种执行该授权的方式,无论其来源如何。 @Doug Stevenson 感谢您的重新开放和建议;我已编辑以利用您的建议。干杯。 我对这个问题感到困惑。您用于访问数据库的服务是否不需要提供有效凭据才能完成连接?只要您保持这些连接凭据的安全,其他人就无法连接。你想在多大程度上“收紧入站访问”? 【参考方案1】:

对于您想要限制对可公开访问的数据库的访问的场景,就像其他人所说的那样,我想不出除了普通的旧 *** 解决方案之外的其他方法。您的客户端通过 *** 连接到数据库并将数据库实例移动到私有子网。但我不确定你实施它有多可行。

【讨论】:

我认为您错过了问题的重点。问题是关于从外部服务访问数据库的问题,因为它不是 AWS 资源,所以肯定不能添加到 VPC。所以你的答案在这种情况下是无效的。 @1252748 很高兴听到您找到了前进的道路,就我所知,您能否阐明谷歌云功能如何解决问题?【参考方案2】:

没有直接的限制方式。

AWS 云 - 解决方案(AWS 中的所有服务/实例)

如果您的 NodeJS 应用程序在 AWS 上运行,或者您正在使用 AWS Lambda 服务,您可以允许在同一 VPC 中单独跨安全组进行访问。 (如果使用多个帐户 - 可以进行 VPC 对等)

【讨论】:

【参考方案3】:

AFAIK,如果不知道您需要访问 EC2 实例(托管 SQL Server 的位置)的静态 IP 或 IP 范围,就无法直接实现此目的。

但是...

您可以将您的实例包含在 API 网关后面,然后为 API 网关中的 API 方法启用 IAM 身份验证。然后使用 IAM 策略(连同资源策略)为您的 API 用户指定权限。

更多:https://aws.amazon.com/premiumsupport/knowledge-center/iam-authentication-api-gateway/

【讨论】:

我将不得不调查这一切。老实说,这似乎很多。我的问题是不常见的用例吗? 不,这是一个非常常见的用例,但 AWS 团队似乎决定通过 API Gateway 来支持它,因为在大多数情况下,应用程序都在 API Gateway 下运行。 @1252748 @1252748 您需要解决方案方面的帮助吗? 我不明白这怎么可能,想要通过端口 1433 连接到 mssql 的客户端应用程序(例如 nodejs)。如何通过 api gatway 代理该请求。客户端应用程序如何使用数据库驱动程序访问数据库并通过api网关访问数据库,请您帮我理解 不,感谢您的回答,但我认为最好的解决方案是将我的数据移动到 GCP。这也很麻烦,但那是另一回事。干杯。

以上是关于限制对 AWS SQL Server 实例的外部访问的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS E2 ubuntu 实例上连接时,SQL Server 的 ODBC 驱动程序 13 无法在 pyodbc 上打开 lib

如何将数据从本地 SQL Server 推送到 AWS 上的 Tableau Server

无法从 Docker 容器连接到外部 SQL Server

如何在 aws 中从我的 mac 设置和登录 ***?

通过 AWS Lambda 函数访问 EC2 实例服务

AWS那些需要注意的问题