在 AWS Cognito 预身份验证 Lambda 触发器中获取 IP

问题描述 投票:0回答:2

我正在使用 SAML 作为联合提供商通过 Azure AD 记录我的用户,我想知道此时是否可以接收 IP。如果是这样怎么办。

amazon-web-services ip amazon-cognito
2个回答
3
投票

到目前为止,我还没有找到直接的方法来将 IP 地址发送到 lambda。

我们知道预身份验证 lambda 将从 Cognito 接收此类数据:

{
  version: '1',
  region: '-----------',
  userPoolId: '-----------',
  userName: '--------------',
  callerContext: {
    awsSdkVersion: 'aws-sdk-unknown-unknown',
    clientId: '----------------'
  },
  triggerSource: 'PreAuthentication_Authentication',
  request: {
    userAttributes: {
      sub: '-------------',
      'cognito:email_alias': '----------------,
      'cognito:user_status': 'CONFIRMED',
      email_verified: 'true',
      email: '--------------------'
    },
    validationData: {
      myCustomPropertiesLikeAnIpAddress: 'anIpAddress'
    }
  },
  response: {}
}

我们可以看到,IP 地址不包含在其中。 但是,我们可以利用“validationData”属性,它是可以从客户端设置的其他属性的集合。

IP 地址就是这样的属性之一。

现在我们需要以某种方式获取此 IP 地址并将其发送给 lambda。

我发现在客户端应用程序中获取 IP 地址的一种方法是向 https://geolocation-db.com/json/ 发出 GET 请求(或向任何其他 IP 提供商发出请求)

响应将如下所示

Current IP Address: myIpAddress

只需按照您认为合适的方式清理响应,然后将其添加到您的认知登录请求中即可。

存在更改客户端代码、不发送或发送修改后的 IP 地址的风险,您可以在 lambda 本身上进行验证,具体取决于其重要性。 事实上,你必须看看有人会有多大的动力去做这样的修改。


0
投票

另一种方法是使用 AWS WAF(Web 应用程序防火墙),请参阅此 docs

在 WAF 中,您可以按照以下步骤创建 Web ACL:

  • 在部署 Cognito 的同一区域中创建新的 Web ACL
  • 将此 WEB ACL 关联到您的 Cognito 用户池
  • 添加具有以下匹配条件的规则:
    • 检查:源自
    • 中的 IP 地址
    • IP 集:创建并关联到您想要允许流量的 IP 集
    • 操作:允许
    • 将默认操作设置为阻止
  • 组织优先事项并创建

这样,向 Cognito 发出的每个 HTTP(S) 请求将首先被 WAF 过滤,如果符合您创建的 IP 规则,流量将被允许,否则将被禁止(403 状态代码)

© www.soinside.com 2019 - 2024. All rights reserved.