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

AWS CDK (.NET)如何修改RDS集群安全组允许EC2、Lambda安全组访问

AWS CDK (.NET) 配置Aurora RDS安全组放行流量方案

核心解决思路

不要依赖CDK创建RDS集群时自动生成的安全组,提前显式声明所有安全组,再绑定到RDS集群,即可直接修改安全组规则。如果已经使用自动生成的安全组,也可通过RDS集群对象拿到安全组引用后添加规则。

具体实现步骤

步骤1:提前声明所有需要的安全组

显式创建EC2 RDP安全组、Lambda执行安全组、RDS集群专用安全组:

// 替换为你自己的VPC实例,通常从Stack参数或者Lookup获取
IVpc vpc = Vpc.FromLookup(this, "Vpc", new VpcLookupOptions { IsDefault = true });

// EC2 RDP登录安全组
var ec2RdpSg = new SecurityGroup(this, "EC2RdpSecurityGroup", new SecurityGroupProps
{
    Vpc = vpc,
    SecurityGroupName = "EC2-RDP-SG",
    Description = "Allow RDP access for EC2 instances"
});
// 按需放行RDP端口,测试可放通指定公网IP,生产不要放通0.0.0.0/0
ec2RdpSg.AddIngressRule(Peer.Ipv4("你的公网IP/32"), Port.Tcp(3389), "Allow RDP access from specified IP");

// Lambda执行安全组
var lambdaExecSg = new SecurityGroup(this, "LambdaExecSecurityGroup", new SecurityGroupProps
{
    Vpc = vpc,
    SecurityGroupName = "Lambda-Execution-SG",
    Description = "Security group for VPC-enabled Lambda execution"
});

// RDS集群专用安全组
var rdsClusterSg = new SecurityGroup(this, "AuroraClusterSecurityGroup", new SecurityGroupProps
{
    Vpc = vpc,
    SecurityGroupName = "Aurora-PostgreSQL-SG",
    Description = "Control access to Aurora PostgreSQL cluster"
});

步骤2:给RDS安全组添加放行规则

直接操作提前声明的RDS安全组,添加入站规则放行EC2和Lambda的安全组流量:

// 放行EC2安全组到RDS的访问,生产建议只放通5432端口,不要用AllTraffic
rdsClusterSg.AddIngressRule(
    Peer.SecurityGroupId(ec2RdpSg.SecurityGroupId), 
    Port.Tcp(5432), 
    "Allow PostgreSQL access from EC2 security group");

// 放行Lambda安全组到RDS的访问
rdsClusterSg.AddIngressRule(
    Peer.SecurityGroupId(lambdaExecSg.SecurityGroupId), 
    Port.Tcp(5432), 
    "Allow PostgreSQL access from Lambda execution security group");

注意:测试场景可临时使用Port.AllTraffic()放行所有流量,生产环境必须严格限制到必要端口

步骤3:创建RDS集群时显式绑定安全组

创建Aurora集群时指定提前声明的安全组,不要让CDK自动生成:

var auroraCluster = new DatabaseCluster(this, "AuroraPostgresCluster", new DatabaseClusterProps
{
    Engine = DatabaseClusterEngine.AuroraPostgres(new AuroraPostgresClusterEngineProps
    {
        Version = AuroraPostgresEngineVersion.VER_15_3 // 替换为你需要的版本
    }),
    Vpc = vpc,
    // 关键配置:指定自定义安全组,禁用自动生成安全组
    SecurityGroups = new [] { rdsClusterSg },
    // 其余你原本的RDS配置(实例规格、凭据、存储、数据库名等)保留即可
    Writer = ClusterInstance.Provisioned("WriterInstance", new ProvisionedClusterInstanceProps
    {
        InstanceType = InstanceType.Of(InstanceClass.T3, InstanceSize.MEDIUM)
    }),
    DefaultDatabaseName = "appdb",
    RemovalPolicy = RemovalPolicy.DESTROY // 生产环境替换为RemovalPolicy.RETAIN
});

已使用自动生成RDS安全组的兼容方案

如果不想重建现有RDS集群,可直接从RDS集群对象中拿到CDK自动生成的安全组引用,再添加规则:

// 从已创建的Aurora集群对象获取默认安全组
var autoGeneratedRdsSg = auroraCluster.Connections.SecurityGroups.FirstOrDefault();
if (autoGeneratedRdsSg != null)
{
    autoGeneratedRdsSg.AddIngressRule(Peer.SecurityGroupId(ec2RdpSg.SecurityGroupId), Port.Tcp(5432), "Allow EC2 access");
    autoGeneratedRdsSg.AddIngressRule(Peer.SecurityGroupId(lambdaExecSg.SecurityGroupId), Port.Tcp(5432), "Allow Lambda access");
}

权限报错排查

如果仍然提示操作权限不足,确认你执行CDK部署的IAM身份具备以下权限:

  • ec2:CreateSecurityGroup
  • ec2:AuthorizeSecurityGroupIngress
  • rds:ModifyDBCluster
  • 相关资源的iam:PassRole权限(如果涉及跨角色操作)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:39:03