#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, чтобы увидеть, когда будет выполнена модификация.
![]()