Amazon web services 如何在cloudformation内的安全组中使用EC2 ip地址
我对cloudformation有点陌生,我很难在安全组中设置参数或查找有关如何引用EC2IP地址的信息。 这两者在我的堆栈中定义,我的SG依赖于EC2。这是我的SG:Amazon web services 如何在cloudformation内的安全组中使用EC2 ip地址,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,我对cloudformation有点陌生,我很难在安全组中设置参数或查找有关如何引用EC2IP地址的信息。 这两者在我的堆栈中定义,我的SG依赖于EC2。这是我的SG: "3DEXPPLAT": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "3DPLAT SG", "SecurityGroupIngr
"3DEXPPLAT": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "3DPLAT SG",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"CidrIp": {"Ref" : "CFAPA"}
}
],
"Tags": [
{
"Key": "Name",
"Value": "STACK_3DEXPSG"
}
]
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "59898995-0f8d-4cbe-b315-c9c68df319b2"
}
},
"DependsOn": [
"CFAPA"
]
}
那么,我应该在securitygroupingres中的CidrIp中添加什么来让我的SG使用我的EC2的私有IP呢?这是错误的方法 您不应该引用内部节点的显式IP地址,而应该指定另一个安全组作为源()。一种常见的方法是为每个应用程序定义一个安全组,并将这些组连接到构成该应用程序的ELB、EC2和RDS实例 您最多可以将5个安全组连接到网络接口,因此此“内部通信”组可以是您可能使用的任何“外部通信”组的补充(例如,ELB上接受Internet流量的规则)
CloudFormation的一个警告:您将无法内联定义入口规则。相反,您需要一个单独的引用已经定义的安全组的IP。在EC2实例上使用
Fn::Ref
时,您正在检索其实例Id。对于您的安全组,您需要IP(使用Fn::GetAtt
),并且需要将其格式化为CIDR块(添加带有Fn::Sub
的符号). 因此,假设CFAPA
是您的EC2实例,这应该可以工作:
{
“3dexplat”:{
“类型”:“AWS::EC2::SecurityGroup”,
“财产”:{
“组描述”:“3DPLAT SG”,
“SecurityGroupIngress”:[
{
“IpProtocol”:“tcp”,
“FromPort”:80,
“白鼬”:80,
“CidrIp”:{
“Fn::Sub:“${CFAPA.PrivateIp}/32”
}
}
]
}
}
}
注:
- 您不需要指定
属性,因为CloudFormation将根据引用来计算依赖关系。这简化了代码DependsOn
- 要确定要在名为
的PrivateIp
上使用的属性,您必须参考文档的“返回值”部分。这就是您注意到Fn::GetAtt
返回实例Id的地方Fn::Ref
- 请记住,私有IP可能会发生变化。因此,您可能希望将
附加到另一个安全组,并基于安全组成员身份创建权限。但这是一个架构决策CFAPA
Fn::Sub
映射。再看一看,这会使事情简化一点。