如何在VPC上下文中将我的AWS :: EC2 :: DBSecurityGroup连接到我的AWS :: RDS :: DBSecurityGroup?

时间:2014-12-05 11:23:23

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-vpc

我有这个AWS :: EC2 :: SecurityGroup:

    "InstanceSecurityGroup" : {
        "Type" : "AWS::EC2::SecurityGroup",
        "Properties" : {
            "GroupDescription" : "Enable HTTP access on the configured port",
            "VpcId" : { "Ref" : "VpcId" },
            "SecurityGroupIngress" : [ {
                "IpProtocol" : "tcp",
                "FromPort" : { "Ref" : "WebServerPort" },
                "ToPort" : { "Ref" : "WebServerPort" },
                "SourceSecurityGroupId" : { "Ref" : "LoadBalancerSecurityGroup" }
            } ]
        }
    }

我有这个AWS :: RDS :: DBSecurityGroup

    "DBSecurityGroup": {
        "Type": "AWS::RDS::DBSecurityGroup",
        "Properties": {
            "DBSecurityGroupIngress": { "EC2SecurityGroupName": { "Ref": "InstanceSecurityGroup"} },
            "GroupDescription"      : "Frontend Access"
        }
    }

当我尝试调出这个堆栈时,我得到:

Invalid security group , groupId=, groupName= sg-a381fdc6.

编辑1 :阅读更多建议我需要将AWS :: RDS :: DBSecurityGroup与我的VPC相关联,因此我更改为:

    "DBSecurityGroup": {
        "Type": "AWS::RDS::DBSecurityGroup",
        "Properties": {
            "EC2VpcId" : { "Ref" : "VpcId" },
            "DBSecurityGroupIngress": { "EC2SecurityGroupName": { "Ref": "InstanceSecurityGroup"} },
            "GroupDescription"      : "Frontend Access"
        }
    }

当我拿起筹码时,我得到了

请参阅授权DBSecurityGroup ingress的文档。对于VPC,需要EC2SecurityGroupId。要仅授权此请求的源地址(而不是其他地址),请将205.251.233.35/32作为CIDRIP参数传递。

EC2SecurityGroupId是安全组的ID,而不是它的名称,并且该ID是在我的控制之外分配的,所以我不知道要放在这里的值。

如何在VPC上下文中将我的AWS :: EC2 :: DBSecurityGroup连接到我的AWS :: RDS :: DBSecurityGroup?

2 个答案:

答案 0 :(得分:6)

问题是,您的{ "Ref": "InstanceSecurityGroup"}并不仅仅拥有ID名称。要暂停 EC2SecurityGroupId ,请使用Fn::GetAtt

您的DBSecurityGroup模板应如下所示(请注意Ref如何被Fn :: GetAtt取代:

"DBSecurityGroup": {
"Type": "AWS::RDS::DBSecurityGroup",
"Properties": {
   "EC2VpcId"              : { "Ref" : "VpcId" },
   "DBSecurityGroupIngress": { "EC2SecurityGroupId": { "Fn::GetAtt" : [ "InstanceSecurityGroup", "GroupId" ] } },
   "GroupDescription"      : "Frontend Access"
}

答案 1 :(得分:0)

当您在VPC内定义RDS安全组时,您必须按组ID引用其他安全组,而不是按组名引用。

请参阅 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-security-group-rule.html

" 对于VPC数据库安全组,请使用EC2SecurityGroupId。对于EC2安全组,请使用EC2SecurityGroupOwnerId以及EC2SecurityGroupName或EC2SecurityGroupId。"

您可以使用"参考"获取安全组ID。功能如此处所述 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html

因此,您修改后的安全组应该是

"DBSecurityGroup": { "Type": "AWS::RDS::DBSecurityGroup", "Properties": { "EC2VpcId" : { "Ref" : "VpcId" }, "DBSecurityGroupIngress": { "EC2SecurityGroupId": { "Ref": "InstanceSecurityGroup"} }, "GroupDescription" : "Frontend Access" } }