An unexpected security group rule

0

Hi,

An inbound HTTPS(443) TCP rule is added to my SG when I add a VPC Interface Endpoint using the ec2.Vpc L1 construct method addInterfaceEndpoint. If I use CfnVPCEndpoint (commented out below) instead. all is good.

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { aws_ec2 as ec2 } from 'aws-cdk-lib';

export class ScratchStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const vpc = new ec2.Vpc(this, 'vpc', {
    });

    const vpcEndpointSg = new ec2.SecurityGroup(this, 'vpc-endpoint-sg', {
      vpc: vpc,
      allowAllOutbound: true
    });

    vpc.addInterfaceEndpoint('vpc-endpoint', {
      service: ec2.InterfaceVpcEndpointAwsService.IOT_CORE,
      privateDnsEnabled: false,
      securityGroups: [vpcEndpointSg]
    });

    // new ec2.CfnVPCEndpoint(this, 'cfn-vpc-endpoint', {
    //   serviceName: `com.amazonaws.${process.env.CDK_DEFAULT_REGION}.iot.data`,
    //   vpcId: `${vpc.vpcId}`,
    //   vpcEndpointType: 'Interface',
    //   securityGroupIds: [vpcEndpointSg.securityGroupId]
    // });

  }
}

Thoughts/help welcome.

Thanks, Gary

1 個回答
1
已接受的答案

Compared to cloudformation CDK is opinionated and includes settings to shortcut creating a resource. In your example a IOT vpc endpoint must allow 443 inbound for it to be at all useful so this rule is automatically added by default. You can override this be setting the parameter "open" to false (it is default true). See in docs

AWS
專家
Peter_G
已回答 1 年前
  • Thanks Peter, I didn't spot the 'open' prop! (And I think using the InterfaceVpcEndpoint construct is more appropriate in my context than the Vpc construct method). In my real code, I have other SG rules, so it's useful without 443 i/b :-)

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南