#amazon-web-services #aws-cdk #elastic-network-interface
Вопрос:
В AWS-CDK я пытаюсь создать сеанс зеркального отображения трафика. Машины EC2 создаются в предыдущих стеках и передаются в качестве реквизитов в новый стек. Однако, хотя я могу ссылаться на ENI, который был создан явно (интерфейс обнюхивания), я не могу найти способ ссылаться на основной сетевой интерфейс EC2 в качестве источника зеркального отображения трафика
class TrafficMirringStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope,id,props)
const {
suricataInstance,
sniffingInterface,
targetInstance
} = props;
const mirrorTarget = new ec2.CfnTrafficMirrorTarget(this, 'TrafficMirrorTarget', {
description:' This is the traffic mirror target',
networkInterfaceId: sniffingInterface.ref,
});
const mirrorFilter = new ec2.CfnTrafficMirrorFilter(this, 'TrafficMirrorFilter', {
description: 'This filter allows all traffic from the target machine to be redirected to the sniffing interface',
networkServices:[],
});
const allowAllInboundRule = new ec2.CfnTrafficMirrorFilterRule(this, 'InboundMirrorFilter', {
destinationCidrBlock : '0.0.0.0/0',
sourceCidrBlock:'0.0.0.0/0',
trafficDirection: 'ingress',
ruleAction: 'accept',
ruleNumber:100,
trafficMirrorFilterId: mirrorFilter.ref
});
const allowAllOutboundRule = new ec2.CfnTrafficMirrorFilterRule(this, 'OutboundMirrorFilter', {
destinationCidrBlock : '0.0.0.0/0',
sourceCidrBlock:'0.0.0.0/0',
trafficDirection: 'egress',
ruleAction: 'accept',
ruleNumber:200,
trafficMirrorFilterId: mirrorFilter.ref
});
const mirrorSession = new ec2.CfnTrafficMirrorSession(this, 'TrafficMirrorSession', {
sessionNumber: 1,
networkInterfaceId: targetInstance.instance.networkInterfaceId,
trafficMirrorFilterId: mirrorFilter.ref,
trafficMirrorTargetId: mirrorTarget.ref
})
}
}
и я получаю следующую ошибку
Error: TrafficMirroringStack/TrafficMirrorSession [AWS::EC2::TrafficMirrorSession] is missing required property: networkInterfaceId
Комментарии:
1. вы пытались использовать SDK для извлечения информации? Многие конструкции CDK на самом деле не содержат всей информации, прикрепленной к ним, поскольку многие из этих сведений известны только во время развертывания. CDK всегда предполагает, что это первое развертывание, и вам потребуется найти свои собственные ответы на многие вопросы — использование SDK является приемлемым решением для многих таких случаев. Кроме того, будьте осторожны с передачей конструкций в качестве реквизита в другие стеки. Если все они не являются вложенными стеками, содержащимися в одном и том же общем стеке, изменение одного из них может заблокировать развертывания, поскольку они зависят друг от друга.
Ответ №1:
попробуйте использовать:
instance.networkInterfaces
и найдите нужный вам интерфейс.
см. документы: networkInterfaces — документ aws cdk