Как настроить свойства VPN «Удаленная сеть IPv4 CIDR» с помощью cloudformation в AWS

#amazon-web-services #amazon-cloudformation #aws-vpn

Вопрос:

Мы используем cloudformation в качестве инфраструктуры в качестве кода для нашего VPN-подключения между локальной сетью и нашим аккаунтом AWS. Нам нужно задать параметр, задокументированный как (полные документы):

Удаленный сетевой CIDR IPv4 (только VPN-подключение IPv4) Диапазон CIDR IPv4 на стороне AWS, который позволяет обмениваться данными по VPN-туннелям. По умолчанию: 0.0.0.0/0

У нас есть поиск в Интернете, но нет реального синтаксиса для cloudformation, как установить эту переменную.

Мы хотели бы установить значение от значения по умолчанию 0.0.0.0/0 до другого более конкретного диапазона /24.

В некоторых программах VPN это называется селектором трафика,идентификатором прокси-сервера или доменом шифрования.

Комментарии:

1. Ваша ссылка на документацию не является конкретной. Где именно определен параметр?

2. @Marcin теперь ссылка стала лучше. Это параметр «CIDR удаленной сети IPv4».

3. Установлены ли они в файле конфигурации vpn? Это не задано на уровне CloudFormation.

4. @Marcin когда мы установим это свойство, мы сможем загрузить конфигурацию с консоли AWS, а затем поместить ее в наше локальное программное обеспечение VPN. То, что я могу сказать, это не наоборот.

5. Это единственный способ сделать это с помощью пользовательского ресурса?

Ответ №1:

CIDR удаленной сети IPv4 можно изменить с помощью пакета sdk. Приведенное ниже формирование облака изменит CIDR удаленной сети IPv4.

     lambdaExecutionRole:
        Type: AWS::IAM::Role
        Properties:
          AssumeRolePolicyDocument:
            Version: '2012-10-17'
            Statement:
            - Effect: Allow
              Principal:
                Service:
                - lambda.amazonaws.com
              Action:
              - sts:AssumeRole
          Path: "/"
          Policies:
          - PolicyName: root
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
              - Effect: Allow
                Action:
                 - logs:*
                Resource: arn:aws:logs:*:*:* // Set appropriate value
              - Effect: Allow
                Action:
                 - ec2:ModifyVpnConnectionOptions
                Resource: !Sub "arn:aws:ec2:*:..." // Refere to your AWS::EC2::VPNConnection

    # A Lambda that changes the remote Ipv4 property of VPN using the aws sdk.
    # Asynchronous, so it will finish before the modification of the VPN is done.
    customResourceSetRemoteIp:
        Type: AWS::Lambda::Function
        Properties:
          Runtime: nodejs14.x
          Role: !GetAtt lambdaExecutionRole.Arn
          Handler: index.handler
          Code:
            ZipFile: |
                var response = require('cfn-response')
                var aws = require('aws-sdk')
                exports.handler = function (event, context) {
                    console.log("REQUEST RECEIVED:n"   JSON.stringify(event))
                    
                    // For Delete requests, immediately send a SUCCESS response.
                    // You need to run this job with the new value if you want a rollback. 
                    if (event.RequestType == "Delete") {
                        response.send(event, context, "SUCCESS")
                        return
                    }
                    var responseStatus = "FAILED"
                    var responseData = {}
                    var vpnConnection = event.ResourceProperties.VpnConnection;
                    var remoteIpv4NetworkCidr = event.ResourceProperties.RemoteIpv4NetworkCidr;
                    
                    console.log("Set remote ipv4 cidr to '"   remoteIpv4NetworkCidr   
                        "' at vpn connection '"   vpnConnection   "'");
                    
                    var ec2 = new aws.EC2();
                    var params = {
                      VpnConnectionId: vpnConnection, /* required */
                      DryRun: false,
                      RemoteIpv4NetworkCidr: remoteIpv4NetworkCidr
                    };
                    ec2.modifyVpnConnectionOptions(params, function(err, data) {
                      if (err) {
                          console.log(err, err.stack); // an error occurred
                          responseData = {Error: err}
                          console.log(responseData.Error   ":n", err)
                      } else {
                          responseStatus = "SUCCESS"
                          console.log(data);           // successful response
                      }
                      response.send(event, context, responseStatus, responseData)
                    });
                }
          Description: Set VPN options in cloudformation
          TracingConfig:
            Mode: PassThrough

    setRemoteIpOnVpnCustomResource:
        Type: AWS::CloudFormation::CustomResource
        Version: "1.0"
        Properties:
          ServiceToken: !GetAtt customResourceSetRemoteIp.Arn
          VpnConnection: !Ref vpcVpnConnection
          RemoteIpv4NetworkCidr: "10.0.0.0/24"
 

Комментарии:

1. Выглядит интересно, и для нас это лучше всего работает с простым встроенным кодом. Я проверю это!

2. Отлично работает, и, как вы прокомментировали в коде, ресурс асинхронен, поэтому вам нужно заглянуть в консоль aws, чтобы увидеть, когда будет выполнена модификация. 👍