Amazon web services 从VPC内的另一个cloudformation模板引用SecurityGroup

Amazon web services 从VPC内的另一个cloudformation模板引用SecurityGroup,amazon-web-services,amazon-cloudformation,amazon-vpc,Amazon Web Services,Amazon Cloudformation,Amazon Vpc,我有一个VPC(通过cloudformation创建),它为该VPC中创建的所有堆栈创建一些公共共享基础设施,例如ssh jumphost和ssh jumphost的安全组 我有一个单独的cloudformation模板,用于在现有VPC内创建Web+App+DB堆栈 如何允许入站ssh 22从第一个模板中定义的公共ssh jumphost访问堆栈模板中的实例 根据文档,在专有网络中,我需要指定SourceSecurityGroupId,它必须具有实际的专有网络ID,或者使用Ref函数查找此模板

我有一个VPC(通过cloudformation创建),它为该VPC中创建的所有堆栈创建一些公共共享基础设施,例如ssh jumphost和ssh jumphost的安全组

我有一个单独的cloudformation模板,用于在现有VPC内创建Web+App+DB堆栈

如何允许入站ssh 22从第一个模板中定义的公共ssh jumphost访问堆栈模板中的实例

根据文档,在专有网络中,我需要指定
SourceSecurityGroupId
,它必须具有实际的专有网络ID,或者使用
Ref
函数查找模板中定义的安全组的ID

如何引用同一VPC内但来自其他模板的现有SG

编辑:


对于通过NAT实例出站,同样的问题。NAT实例是在VPC级别提供的,但每个堆栈都需要其安全组来允许出站访问NAT实例。

更新:这与我最初的回答不同。另请参见下面Vor的答案,该答案建议使用以允许跨堆栈引用

原始答案

不支持从另一个堆栈引用资源,因此不能使用
Ref()
。您可以使用
SourceSecurityGroupId
(如您所建议的)并将其作为传递,和/或您可以使用。但是Cloudformation不能以编程方式引用另一个堆栈


我喜欢使用Python、boto和来编写Cloudformation模板,以在代码中解决类似的问题。

上一个答案的替代方法是创建一个。您可以在订阅SQS队列的EC2上运行服务。一旦CFN到达
CustomResource
,它将向您提供的主题发送SNS通知。然后,您的服务将收到通知,处理请求并作出响应


还有一个库可以帮助您设置
定制服务

,因此您说我可以做以下一件事:显式输入ID作为参数;硬编码模板中的ID;或者使用
SourceSecurityGroupName
。我甚至可以使用
SourceSecurityGroupName
?文档说,“对于VPC中的实例,请指定SourceSecurityGroupId属性。”在python中这样做如何解决这个问题?您仍然需要生成模板。或者您是否使用boto检索所需的GroupId,然后将其输入模板?我的错误是,您没有错,您不能在专有网络中使用
SourceSecurityGroupName
。是的,我使用boto查找组ID。正如我所说,不支持跨专有网络引用。因此,如果我希望它作为普通云信息模板,最好的选择是在模板(feh)中硬编码ID,或者要求它作为参数?是的,没错。这些都是你的选择,除非你是通过编程实现的。这很酷。那么您是在使用发布/子队列以编程方式传递参数?没错。您还可以设置AWS Lambda函数来处理来自CFN的请求,并避免管理自己的进程/队列,这比在本地使用Python或其他编程语言要好,但我不想在一年后切换所选答案。我会投票的,你可以用Lambda来做吗?很疯狂。有什么例子吗?您是否有要点,或者AWS是否有通过Lambda进行通信的两个CFN模板的示例?