首页 > 解决方案 > AWS CDK - 安全组创建打字稿

问题描述

我正在尝试使用打字稿将以下 CloudFormation 资源迁移到 CDK:

ALBSecurityGroup:
      Type: AWS::EC2::SecurityGroup
      Properties:
        VpcId: !Ref VPCId
        GroupDescription: !Sub "${Application}-${Environment}-alb-sg"
        SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: !Ref SecurityGroupIngressCidr

我已经尝试过了(我不知道如何创建必要的属性):

const albSecurityGroup = new SecurityGroup(this, "ALBSecurityGroup", {
      vpc: Vpc.fromLookup(this, id, {
        vpcId: props.vpcId.stringValue
      }),
      description: appEnv + "-alb-sg"
    })

并使用这样的 Cfn 构造函数(我不知道如何将 CfnSecurityGroup 与 CfnSecurityGroupIngress 加入):

const x = new CfnSecurityGroupIngress(this, id, {
      ipProtocol: "tcp",
      fromPort: 443,
      toPort: 443,
      cidrIp: props.securityGroupIngressCidr
    }); 

    const albSecurityGroupCfn = new CfnSecurityGroup(this, id, {
      vpcId: props.vpcId.stringValue,
      groupDescription: appEnv + "-alb-sg"
    });

我感谢您的帮助。

标签: typescriptamazon-web-servicesamazon-cloudformationaws-cdk

解决方案


通过使用,您的答案看起来更清晰CfnSecurityGroup,但只是为了完整性并显示使用更高阶构造可以实现相同的方法SecurityGroup如下:

import { SecurityGroup, Peer, Port, Vpc } from '@aws-cdk/aws-ec2';

....

const vpc = Vpc.fromLookup(this, id, {
  vpcId: props.vpcId.stringValue
});

const albSecurityGroup = new SecurityGroup(this, 'MyALBSG', {
  vpc,
  description: appEnv + "-alb-sg",
  allowAllOutbound: true
});

albSecurityGroup.addIngressRule(
  Peer.ipv4(props.securityGroupIngressCidr), 
  Port.tcp(443), 
  "Allow HTTPS traffic from CIDR IPs"
);

....

我强烈建议您阅读您计划在 CDK 中使用的任何服务模块的概述部分。这是aws-ec2显示如何SecurityGroup编写的一个。

您不妨loadBalancer.connections.allowFrom()直接使用,而不是为您的 ALB 显式创建安全组。假设您的 ALB 构造被命名为loadBalancer,这看起来像:

loadBalancer.connections.allowFrom(
  Peer.ipv4(props.securityGroupIngressCidr), 
  Port.tcp(443), 
  'Allow inbound HTTPS from CIDR IPs'
);

推荐阅读