Javascript AWS Lambda函数用于创建/删除WAF中的条目

Javascript AWS Lambda函数用于创建/删除WAF中的条目,javascript,node.js,amazon-web-services,aws-lambda,aws-sdk-js,Javascript,Node.js,Amazon Web Services,Aws Lambda,Aws Sdk Js,我正在尝试编写一个基本逻辑来创建WAF条目(这将阻止输入一个ip地址或一组ip地址),然后删除它们 我现在正在做这个 const aws = require('aws-sdk'); const s3 = new aws.S3({ apiVersion: '2006-03-01' }); const waf = new aws.WAF({ apiVersion: '2015-08-24' }); class Police { constructor(maxHit=100, timeGap=

我正在尝试编写一个基本逻辑来创建WAF条目(这将阻止输入一个ip地址或一组ip地址),然后删除它们

我现在正在做这个

const aws = require('aws-sdk');

const s3 = new aws.S3({ apiVersion: '2006-03-01' });
const waf = new aws.WAF({ apiVersion: '2015-08-24' });

class Police {
  constructor(maxHit=100, timeGap=(6*60*60*1000)) {
    this.maxHit = maxHit;
    this.timeGap = timeGap;
    this.lastBailCheck = Date.now();
    this.hitMap = {};
  }
  static bail(ip){
    // TODO bail this ip by removing entry into waf
  }
  static jail(ip){
    // TODO jail this ip by adding entry from waf
  }
  checkBail(){
    var nowDate = Date.now();
    if((nowDate - this.lastBailCheck) > this.timeGap){
      this.lastBailCheck = nowDate;
      this.prevMap = this.hitMap;
      this.hitMap = {};
      this.scanAndBail();
    }
  }
  scanAndBail(){
    Object.keys(this.prevMap).forEach(Police.bail);
    delete this.prevMap;
  }
  watch(ip){
    this.hitMap[ip] = (this.hitMap[ip] || 0) + 1;
    if(this.maxHit < this.hitMap[ip]){
      Police.jail(ip);
    }
    this.checkBail();
  }
}

const police = new Police();

function forOneLogLine(line){
  if(typeof line === 'string') {
    police.watch(line.split(' ')[3]);
  }
}
const aws=require('aws-sdk');
consts3=新的aws.s3({apiVersion:'2006-03-01'});
const waf=新的aws.waf({apiVersion:'2015-08-24'});
班警{
构造函数(maxHit=100,时间间隔=(6*60*60*1000)){
this.maxHit=maxHit;
this.timeGap=timeGap;
this.lastBailCheck=Date.now();
this.hitMap={};
}
静态提环(ip){
//TODO通过移除waf入口来保护该ip
}
静态监狱(ip){
//TODO通过添加来自waf的条目来囚禁此ip
}
支票保证金{
var nowDate=Date.now();
如果((nowDate-this.lastBailCheck)>this.timeGap){
this.lastBailCheck=nowDate;
this.prevMap=this.hitMap;
this.hitMap={};
这个。scanAndBail();
}
}
scanAndBail(){
Object.keys(this.prevMap).forEach(Police.bail);
删除此.prevMap;
}
手表(ip){
this.hitMap[ip]=(this.hitMap[ip]| | 0)+1;
if(this.maxHit
所以这里我想为
监狱
保释
填充代码(阻止/释放一个ip地址或一组地址)

我经历了这一切。但如何实现它却令人困惑。更具体地说,如何最佳地实施它。 我只是在寻找两个API,一个我可以传递ip地址并阻止它,另一个可以释放它

我有几个基本问题,从上述文件

  • 如何传递ip地址?在哪种API中
  • aws.WAF
    是否自动将一组ip地址分组到IPSET中
  • aws.WAF
    是否也保存了命中计数,这与我在《警察》课上做的类似
  • 我是否需要为要添加/删除到阻止列表中的每个
    IPaddress
    获取
    ChangeToken
    ?或者我能拥有它一次并永远使用它吗
  • 我很乐意为这个确切的需求提供一个示例代码(最好是javascript)。
    如果我的
    监狱
    保释
    代码被填满,我会很高兴。

    AWS有一个教程,其中包括编写要调用的等效JavaScript代码(用于插入和删除IP集)。

    好的。。那很好。。但我不想创建云形成堆栈。。没有stack难道不可能吗?我的意思是,我只是更新WAF条目。。stack介于两者之间?我已经读完了教程。。并试图在不使用堆栈(模板)的情况下自行完成所有工作。甚至教程中也提到,lamda函数会进入WAF。。我也在做同样的事。。用简单的逻辑…对,这里不需要云信息。我希望您能够通过JavaScript SDK实现这一点。示例Python Lambda代码没有帮助吗?它确实很有帮助。。了解正在发生的事情。。但仅仅是挣扎在ip集的来源和python的一点点。。对python来说非常陌生