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

0

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

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

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

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

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

profile picture
專家
已提問 6 個月前檢視次數 59 次
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
專家
已回答 6 個月前

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

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

回答問題指南