2016-10-03 135 views
1

时,我有这是CFN模板使用此类创建EC2实例:更新现有的安全组创建新的EC2 CloudFormation

参数:

"VPCId": { 
    "Type": "AWS::EC2::VPC::Id" 
    "Description": "The VPC Id to where this instance is being created" 
} 
"Subnet": { 
    "Description": "Subnet to put Instance", 
    "Type": "AWS::EC2::Subnet::Id", 
}, 

有以下安全组:

"InstanceSecurityGroup": { 
     "Type": "AWS::EC2::SecurityGroup", 
     "Properties": { 
     "GroupDescription": "Enables access to instance by port 80", 
     "VPCId": { 
      "Ref": "VPCId" 
     }, 
     "SecurityGroupIngress": [ 
      { 
      "IpProtocol": "tcp", 
      "FromPort": "80", 
      "ToPort": "80", 
      "CidrIp": { 
       "Ref": "ClientCIDR" 
      } 
      } 
     ] 
     }, 

并且实例资源的一部分:

"WebServer": { 
    "Type": "AWS::EC2::Instance", 
    "Properties": { 
    "IamInstanceProfile": "access-profile", 
    "SecurityGroupIds": [ 
     { "Fn::GetAtt": [ 
      "InstanceSecurityGroup", 
      "GroupId" 
     ] 
     } 
    ], 
    "SubnetId": { 
     "Ref": "Subnet" 
    }, 

我想使用另一个模板创建另外几个实例。这个实例应该可以通过端口22访问上面的实例,并在UserData中连接到它。

我不知道它是如何组织的,我看到的一种方法是在建立到第一个实例的ssh连接之前,通过UserData使用aws cli更新安全组。如何使用资源进行组织?我没有找到任何有关这方面的信息或例子。请帮忙!谢谢!

+1

您是否可以为需要打开端口22的实例创建第二个安全组? – jbird

+0

当我使用第二个模板创建实例时,它们每次都有随机的公用IP。所以,我应该能够以某种方式更新WebServer实例的规则 – BigBoss

+0

啊,我明白了。西蒙 - 皮埃尔的回答如下。安全组可以引用其他安全组。 – jbird

回答

2

您可以修改InstanceSecurityGroup允许从其它实例访问:

"InstanceSecurityGroup": { 
    "Type": "AWS::EC2::SecurityGroup", 
    "Properties": { 
    "GroupDescription": "Enables access to instance by port 80", 
    "VPCId": { 
     "Ref": "VPCId" 
    }, 
    "SecurityGroupIngress": [ 
     { 
     "IpProtocol": "tcp", 
     "FromPort": "80", 
     "ToPort": "80", 
     "CidrIp": { 
      "Ref": "ClientCIDR" 
     } 
     }, 
     { 
     "IpProtocol": "tcp", 
     "FromPort": "22", 
     "ToPort": "22", 
     "SourceSecurityGroupId": { 
      "Ref": "OtherInstancesSecurityGroup" 
     } 
     } 
    ] 
    }, 

其中OtherInstancesSecurityGroup是一个新的安全组,你会指定的其他实例。

+0

让我们试着再次解释.... 我已经使用我提供的模板创建了带有InstanceSecurityGroup的WebServer实例。这台服务器是永久的。并应允许通过特定的IP连接。 然后,我采取另一个模板,并希望创建另一个实例。在设置期间,需要自动更新InstanceSecurityGroup以允许通过端口22从IP分配给该第二实例的该实例连接。 – BigBoss

+1

使用我的答案中的策略,您不需要指定允许在端口22上与服务器通信的IP地址。SourceSecurityGroupId将允许具有此安全组的任何实例在端口22上访问您的服务器,无论其IP地址如何。请参阅http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group-ingress.html#cfn-ec2-security-group-ingress-sourcesecuritygroupid – spg

+0

我应该指定什么另一个模板,因为他们有自己的SecurityGroups?感谢您的帮助 – BigBoss

相关问题