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

使用Pulumi Python为现有Security Group添加规则失败求助

问题描述

我希望通过Pulumi Python代码获取现有AWS安全组并为其添加规则,通过AWS控制台可以完成该操作,但使用以下代码无法实现:

db_sg = ec2.get_security_group(id="sg-number")
ec2.SecurityGroupRule(
    "db-ingress",
    type="ingress",
    description= "allow tcp to db",
    protocol="tcp",
    to_port= 5432,
    from_port= 5432,
    security_group_id = db_sg.id,
)

ec2.SecurityGroupRule(
    "allow-db-egress",
    type="egress",
    description= "allow tcp out of db",
    protocol="tcp",
    to_port= 0,
    from_port= 0,
    security_group_id = db_sg.id,
)
解决方法

针对这个问题,核心问题和修正方案如下:

  • 补充规则的源/目标必填参数:Pulumi的SecurityGroupRule资源要求:
    • 入口(ingress)规则必须指定cidr_blocks、source_security_group_id等源参数
    • 出口(egress)规则必须指定cidr_blocks、destination_security_group_id等目标参数
      原示例代码缺少这些必填项,这是无法创建规则的核心原因。
  • 确认安全组ID正确性:将代码中的"sg-number"替换为实际的安全组ID,确保ID无拼写错误。
  • 修正出口规则的端口配置:TCP协议的有效端口范围是1-65535,原代码中from_port和to_port设为0不符合要求。若要允许所有TCP端口出口,应改为from_port=1和to_port=65535;若需允许所有协议的所有端口,可将protocol设为"-1",端口范围保持0-0。
  • 检查AWS权限配置:确保Pulumi使用的AWS凭证拥有ec2:AuthorizeSecurityGroupIngress和ec2:AuthorizeSecurityGroupEgress权限,否则无法修改安全组规则。
  • 避免重复规则:如果目标安全组已存在相同规则,Pulumi会执行失败。可通过AWS控制台或aws ec2 describe-security-group-rules命令提前确认。
  • 更新Pulumi AWS Provider:确保使用最新版本的Pulumi AWS Provider,旧版本可能存在兼容性问题,执行pip install --upgrade pulumi-aws更新依赖。

修正后的完整示例代码:

import pulumi
import pulumi_aws as aws

# 获取现有安全组,替换为实际的安全组ID
db_sg = aws.ec2.get_security_group(id="sg-xxxxxxxxx")

# 添加数据库入口规则(允许指定IP段访问5432端口)
aws.ec2.SecurityGroupRule(
    "db-ingress",
    type="ingress",
    description="allow tcp to db",
    protocol="tcp",
    from_port=5432,
    to_port=5432,
    security_group_id=db_sg.id,
    # 根据实际需求调整源IP段,示例为允许所有IP
    cidr_blocks=["0.0.0.0/0"]
)

# 添加修正后的出口规则(允许所有TCP端口访问外部)
aws.ec2.SecurityGroupRule(
    "allow-db-egress",
    type="egress",
    description="allow tcp out of db",
    protocol="tcp",
    from_port=1,
    to_port=65535,
    security_group_id=db_sg.id,
    # 根据实际需求调整目标IP段,示例为允许所有IP
    cidr_blocks=["0.0.0.0/0"]
)

# 输出安全组ID,方便验证
pulumi.export("security_group_id", db_sg.id)

内容的提问来源于stack exchange,提问作者A H Bensiali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:50:41