如何在 AWS CDK 中指定源安全组 ID?

Posted

技术标签:

【中文标题】如何在 AWS CDK 中指定源安全组 ID?【英文标题】:How to specify source security group Id in AWS CDK? 【发布时间】:2020-03-27 17:20:02 【问题描述】:

您好,我正在研究 AWS CDK。我正在编写安全组模板。我可以用 Cloud Formation 来写它。现在我在 AWS CDK 中编写它。我想得到任何包含源安全组的示例。下面是我之前写的成云模板。

Resources:
  MerchWebServicesSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      Tags:
        - Key: "Name"
          Value: !Ref "AWS::StackName"
      GroupDescription: "EC2 Services Security Group"
      VpcId:
        Fn::ImportValue: "infra-vpc-base::VpcId"
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: "80"
          ToPort: "80"
          SourceSecurityGroupId: !Ref MerchWebServicesLoadBalancerSecurityGroup
        - IpProtocol: tcp
          FromPort: "443"
          ToPort: "443"
          SourceSecurityGroupId: !Ref MerchWebServicesLoadBalancerSecurityGroup
        - IpProtocol: tcp
          FromPort: 31000
          ToPort: 65535
          SourceSecurityGroupId: !Ref MerchWebServicesLoadBalancerSecurityGroup

  MerchWebServicesLoadBalancerSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      Tags:
        -
          Key: "Name"
          Value: !Ref "AWS::StackName"
      GroupDescription: "MerchWebServices ALB Group"
      VpcId:
        Fn::ImportValue: "infra-vpc-base::VpcId"
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: '172.30.1.0/15'

在上面的模板中,我创建了 SG MerchWebServicesSecurityGroup,并将 SourceSecurityGroupId 指定为另一个 SG MerchWebServicesLoadBalancerSecurityGroup。

        #create SG MerchWebServicesLoadBalancerSecurityGroup
        mws_vpc_sg_alb  = ec2.SecurityGroup(self,"MerchWebServicesLoadBalancerSecurityGroup",
        description = "MerchWebServices ALB Group",
        security_group_name = "MerchWebServicesLoadBalancerSecurityGroup",
        vpc= vpc);

        mws_vpc_sg_alb.add_ingress_rule(peer = ec2.Peer.ipv4('172.30.0.0/15'), connection = ec2.Port.tcp(80));

        #create SG MerchWebServicesSecurityGroup
        mws_vpc_sg = ec2.SecurityGroup(self,"MerchWebServicesSecurityGroup",
        description="EC2 Services Security Group",
        security_group_name="MerchWebServicesSecurityGroup",
        vpc = vpc);
        mws_vpc_sg.add_ingress_rule(peer = ec2.Peer.ipv4(mws_vpc_sg_alb), connection = ec2.Port.tcp(80));

在上面的代码中,我正在尝试创建 SG MerchWebServicesSecurityGroup,下面我正在添加入口规则

mws_vpc_sg.add_ingress_rule(peer = ec2.Peer.ipv4(mws_vpc_sg_alb), connection = ec2.Port.tcp(80));

在这里,我想指定 SourceSecurityGroupId,而不是指定 Cidr 块。在 AWS CDK 中,我不确定如何使用 Ref 并包含 SourceSecurityGroupId。有人可以帮我完成这个吗?任何帮助,将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

ec2.SecurityGroup实现IPeer接口,因此安全组本身可以作为对等体。

mws_vpc_sg_alb.add_ingress_rule(
     peer=mws_vpc_sg_alb,
     connection=ec2.Port.tcp(80),
     description='ALB access'
)

【讨论】:

以上是关于如何在 AWS CDK 中指定源安全组 ID?的主要内容,如果未能解决你的问题,请参考以下文章

ADO .Net - 如何在具有多个 IP 地址的系统上的 SqlConnection 中指定源 IP 地址

如何在 AWS CDK 的“CodeBuildAction”中指定区域?

如何将 VPC 和安全组分配给 AWS CDK 中的 Lambda?

登录失败,虽然我在我的 RDS 实例的安全组中指定了入站规则

如何使用 CDK 获取资源的逻辑 ID?

获取 AWS 安全组 Terraform 模块的 ID