CDK - 从先前堆栈导入和修改安全组

0

【以下的问题经过翻译处理】 我们有一个CDK堆栈,可以部署一组资源以供多个应用程序服务(例如数据库)共享。自然而然,这些资源的安全组在同一堆栈中定义。

我们想要在它们自己的堆栈中定义应用程序服务-这是无法提前知道的。它们当然将定义自己的特定于应用程序的安全组,上述数据库需要允许传入连接。

如果应用程序堆栈在同一个CDK应用程序项目中声明,那么将上述依赖(数据)堆栈传递给应用程序堆栈构造函数似乎是一个简单的情况,让它引用其公开的属性(即安全组)。

但是,虽然逻辑上似乎应用程序堆栈依赖于数据堆栈,但现实情况是数据堆栈依赖于应用程序堆栈,因为AddIngressRule()方法设置了那个方向。这很棘手,因为应用程序堆栈中可以有其他资源依赖于数据堆栈资源,从而导致循环引用。

如何使应用程序堆栈安全地引用数据堆栈安全组并修改规则,同时保持正确的依赖关系方向?

profile picture
专家
已提问 5 个月前51 查看次数
1 回答
0

【以下的回答经过翻译处理】 看起来需要将基础安全组ID作为输出进行导出。

//将安全组ID导出, 以便相关的堆栈可以通过CDK From方法引用并检索原始安全组。 var outputName = StackHelper.SharedExports.DbSecurityGroupId(this.StackName); new CfnOutput(this, outputName, new CfnOutputProps { ExportName = outputName, Value = this.DbSecurityGroup.SecurityGroupId, Description = dbSgName + " 安全组ID."

});

然后, 依赖的应用程序堆栈导入安全组ID并自行检索安全组,而不是直接引用代码。

var dbSecurityGroupId = Fn.ImportValue(StackHelper.SharedExports.DbSecurityGroupId(this._dataStack.StackName)); var dbSecurityGroup = SecurityGroup.FromSecurityGroupId(this, "dbSg", dbSecurityGroupId); dbSecurityGroup.AddIngressRule(this.AppSecurityGroup, Port.Tcp(3306), "允许来自app1的连接。");

这样,依赖的堆栈仅拥有(并添加)完整性规则到基础安全组,而基础堆栈不会知道或依赖于应用程序堆栈。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则