Как вы можете ссылаться на основной сетевой интерфейс экземпляра EC2 в AWS CDK?

#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