You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AWS CloudFormation创建RDS时安全组无效问题?

问题分析与解决方案

错误原因

你遇到的Invalid security group错误,核心原因是数据库安全组与RDS实例所在VPC不匹配。RDS要求关联的安全组必须和其子网组内的子网属于同一个VPC,否则会无法识别该安全组,出现类似groupName=.的异常提示。

具体修复步骤

1. 给安全组指定VPC ID

在InstanceSecurityGroup和DatabaseSecurityGroup的Properties中添加VpcId属性,确保它们与RDS子网组中的子网属于同一个VPC。VPC ID可在AWS控制台的VPC页面查看。

2. 替换子网占位符为真实ID

确保MyDBSubnetGroup中的SubnetIds是实际存在且属于上述指定VPC的子网ID,模板里的subnet-1、subnet-2属于占位符,必须替换为真实值。

修改后的完整模板示例

AWSTemplateFormatVersion: 2010-09-09
Description: template v2
Resources:
  MyEC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ImageId: ami-05d929ac8893c382f
      InstanceType: t2.micro
      SecurityGroupIds:
        - !Ref InstanceSecurityGroup
      # 可选:指定同VPC的子网,确保EC2与RDS内网互通
      # SubnetId: subnet-xxxxxx

  MyDBInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceIdentifier: mydbinstance
      AllocatedStorage: 20
      DBInstanceClass: db.t3.micro
      Engine: mariadb
      MasterUsername: admin
      MasterUserPassword: password
      DBSubnetGroupName: !Ref MyDBSubnetGroup
      VPCSecurityGroups:
        - !Ref DatabaseSecurityGroup
      PubliclyAccessible: false

  InstanceSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Enable access from the public internet."
      VpcId: vpc-xxxxxx # 替换为你的VPC ID
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

  DatabaseSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Enable access from the EC2 instance."
      VpcId: vpc-xxxxxx # 与上面的VPC ID保持一致
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          SourceSecurityGroupId: !GetAtt InstanceSecurityGroup.GroupId

  MyDBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: "Subnet group for RDS instance"
      SubnetIds:
        - subnet-xxxxxx # 替换为属于上述VPC的真实子网ID
        - subnet-yyyyyy # 替换为属于上述VPC的真实子网ID

额外验证点

  • 确保RDS子网组中的子网分布在至少两个不同的可用区(AWS对RDS子网组的强制要求)。
  • 由于你设置了PubliclyAccessible: false,EC2实例必须部署在同一个VPC内才能访问RDS,若EC2在其他VPC需调整网络配置或开启RDS公网访问。

内容的提问来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:32:37