特定用户的 IP 地址限制 - AWS / Cognito / IAM / API Gateway

rhy*_*thm 2 amazon-iam amazon-cognito aws-lambda aws-api-gateway

我正在使用 API Gateway 和 Lambda 构建一个无服务器 Web 应用程序,它限制 Cognito 和 IAM 对注册用户的 API 调用。我们有个人/企业用户,希望对特定企业用户设置额外的访问限制。

所以就有了如下的用户组。

  • 个人用户可以从任何地方访问
  • A公司用户只能从A网络访问
  • B公司用户只能从B网络访问
  • C 公司用户可以从任何地方访问

控制这种访问限制的有效方法是什么?

Ash*_*han 5

做这件事有很多种方法。

方法一

一种方法是为每个用户创建多个具有 IP 限制的 IAM 策略,并允许他们使用 AWS Cognito 联合身份来假设这些用户并在 API Gateway 上使用 IAM 授权者。您可以将公司设置为属性,并在映射 IAM 策略的 Cognito 联合身份中创建规则。例如,检查以下 IAM 策略。

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "*",
    "Resource": "*",
    "Condition": {"NotIpAddress": {"aws:SourceIp": [
      "192.0.2.0/24",
      "203.0.113.0/24"
    ]}}
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:您需要使用 IAM 策略授予对 API 网关终端节点的访问权限。

方法2

另一种方法是为每个公司保留多个用户池,并与不同的 Cognito 联合身份池链接,这些联合身份池与具有 IP 过滤的 IAM 策略链接。在 API 网关上,您可以类似地使用 IAM 授权方。

方法3

另一种方法是使用 AWS 自定义授权程序,并在查看 Cognito ID 令牌并与公司匹配后根据传入请求的 IP 地址过滤请求(如果公司作为属性存储在 UserPool 中)。

注意:您需要使用增强型请求授权器来访问包含 IP 信息的标头。