NodeJS Lambda Регион WAF IPSetID

Я новичок в NodeJS и пытаюсь изменить этот образец, предоставленный AWS для обновления списка репутации, однако он относится только к глобальному региону CloudFront.

https://github.com/awslabs/aws-waf-sample/tree/master/waf-reputation-lists

Я внес изменения в CloudFormation, чтобы создать региональный IPSetID, однако функция завершается из-за того, что IPSetID не существует. Я предполагаю, что это связано с тем, что SDK просматривает глобальный, а не региональный, то есть eu-west-1, поэтому я установил регион в конфигурации, но он по-прежнему не может найти IPSet.

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

// configure API retries
aws.config.update({
    region:'eu-west-1',
    maxRetries: 3,
    retryDelayOptions: {
        base: 1000
    }
});
var waf = new aws.WAF();

Я видел недавний вопрос (AWS WAF обновляет наборы IP-адресов и правила, специфичные для региона из лямбда), который показывает различия URL-адресов, однако я не знаю, с чего начать, чтобы обновить URL-адрес?

Error getting IP sets { [WAFNonexistentItemException: The referenced item does not exist.]
          message: 'The referenced item does not exist.',
          code: 'WAFNonexistentItemException',
          statusCode: 400,
          retryable: false,
          retryDelay: 162.11187234148383 }

    Error getting ranges and/or IP sets { [WAFNonexistentItemException: The referenced item does not exist.]
          message: 'The referenced item does not exist.',
          code: 'WAFNonexistentItemException',
          statusCode: 400,
          retryable: false,
          retryDelay: 162.11187234148383 }


        {
          "errorMessage": "The referenced item does not exist.",
          "errorType": "WAFNonexistentItemException",
          "stackTrace": [
            "Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:48:27)",
            "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:105:20)",
            "Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:77:10)",
            "Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:682:14)",
            "Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)",
            "AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)",
            "/var/task/node_modules/aws-sdk/lib/state_machine.js:26:10",
            "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)",
            "Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:684:12)",
            "Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:115:18)"
          ]
        }

person Sphinx's    schedule 05.06.2017    source источник


Ответы (1)


Вы должны убедиться, что у вас есть обновленная версия aws-sdk, которая поддерживает региональный WAF. Измените строку var waf = new aws.WAF(); с кодом, подобным следующему.

var readline = require('readline');
var aws = require('aws-sdk');
var https = require('https');
var async = require('async');

    // configure API retries
    aws.config.update({
        region:'eu-west-1',
        maxRetries: 3,
        retryDelayOptions: {
            base: 1000
        }
    });
    var waf = new aws.WAFRegional();
    var cloudwatch = new aws.CloudWatch();
    var cloudformation = new aws.CloudFormation();

Я использовал следующие версии, и это заработало. (из файла конфигурации узла package.json)

{
  "name": "reputation-lists-parser",
  "version": "1.0.0",
  "description": "",
  "main": "reputation-lists-parser.js",
  "dependencies": {
    "aws-sdk": "^2.76.0",
    "async": "^2.4.1",
    "xml2js": "^0.4.17"
  }
}

Возможно, вам потребуется загрузить весь zip-файл, содержащий код, в AWS Lambda.

Я использовал код, содержащийся в https://github.com/itopiacloud/aws-waf-regional-security-automations, чтобы помочь мне заставить это работать.

person Austin Dimmer    schedule 23.06.2017
comment
Я не понимаю, почему у них не будет одного класса, но если вы выставите регион в конфиге, он будет региональным. - person Neo; 16.09.2017