【问题标题】:How to add a security group to an existing RDS with CDK without cyclic-dependency如何在没有循环依赖的情况下使用 CDK 将安全组添加到现有 RDS
【发布时间】:2021-09-21 20:07:02
【问题描述】:

我有一个多堆栈应用程序,我想在一个堆栈中部署 RDS,然后在后面的堆栈中部署连接到 RDS 的 Fargate 集群。

rds 的定义如下:

    this.rdsSG = new ec2.SecurityGroup(this, `ecsSG`, {
      vpc: props.vpc,
      allowAllOutbound: true,
    });

    this.rdsSG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(5432), 'Ingress 5432');

    this.aurora = new rds.ServerlessCluster(this, `rds`, {
      engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
      parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'),
      vpc: props.vpc,
      securityGroups: [this.rdsSG],
      // more properties below
    });

有了这个添加入口规则,一切都很好,因为 RDS 和 Fargate 都在同一个 VPC 中,我可以正常通信。即使它在它自己的 VPC 中,它也会让我感到担心。

    const ecsSG = new ec2.SecurityGroup(this, `ecsSG`, {
      vpc: props.vpc,
      allowAllOutbound: true,
    });

    const service = new ecs.FargateService(this, `service`, {
      cluster,
      desiredCount: 1,
      taskDefinition,
      securityGroups: [ecsSG],
      assignPublicIp: true,
    });

如何删除入口规则并允许从该 ecsSG 到 RDS 的入站连接,因为它稍后会部署?如果我尝试从部署堆栈调用以下命令,则会收到循环依赖错误:

    props.rdsSG.connections.allowFrom(ecsSG, ec2.Port.allTcp(), 'Aurora RDS');

感谢您的帮助!

【问题讨论】:

    标签: amazon-rds aws-cdk aws-security-group


    【解决方案1】:

    事实证明这比我想象的要容易 - 您可以翻转连接,这样您就可以使用allowTo 建立连接,而不是尝试修改 rds 以接受 ecs 的安全组到 rds 实例。

        ecsSG.connections.allowTo(props.rds, ec2.Port.tcp(5432), 'RDS Instance');
    

    【讨论】:

      【解决方案2】:

      另外,也许用 aws_rds 模块而不是 aws_ec2 模块 https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_rds/CfnDBSecurityGroup.html 更好地描述 RDS 安全组(由于代表率低,无法发表评论)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 2016-12-24
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 2020-04-29
        • 1970-01-01
        相关资源
        最近更新 更多