如何通过.ebextension为Elastic Beanstalk配置多条SSHSourceRestriction规则
问题根因
aws:autoscaling:launchconfiguration命名空间下的SSHSourceRestriction配置项仅支持传入单个CIDR网段,所有多网段配置尝试不生效的核心原因都是在操作这个单值配置项,必然出现覆盖问题:
- 逗号拼接多个CIDR不符合该配置项的参数格式,EB解析时无法识别多段值,最终只会生效0或1条规则
- 同配置项下重复写
value违反YAML语法,后写入的键值会直接覆盖前值 - 拆分到多个.ebextension文件修改同一个
option_name时,EB会按文件名字典序加载配置,最后加载的配置会覆盖之前所有同项配置,最终只会保留1条规则。
正确配置方法
不要使用内置的SSHSourceRestriction配置项,直接通过.ebextensions的资源定义段,向EB环境关联的安全组添加多条入站规则即可,步骤如下:
- 删除所有现有配置中涉及
SSHSourceRestriction的内容,避免配置冲突 - 在项目的
.ebextensions目录下新建配置文件(例如命名为ssh-multi-cidr.config),写入以下内容:
Resources: SSHIngressRule1: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: Fn::GetAtt: [AWSEBSecurityGroup, GroupId] IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: xx.xxx.8.0/21 # 替换为第一个需要放行的CIDR网段 SSHIngressRule2: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: Fn::GetAtt: [AWSEBSecurityGroup, GroupId] IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 1xx.xxx.0.0/16 # 替换为第二个需要放行的CIDR网段
注意事项
- 如需放行更多CIDR段,按照相同格式新增规则块即可,每个规则块的逻辑ID(比如示例中的
SSHIngressRule1、SSHIngressRule2)保持全局唯一即可,无数量限制 - 如果为环境指定了自定义安全组而非EB自动创建的默认安全组,只需要将
GroupId字段的值替换为目标安全组ID即可 - 配置完成后正常执行
eb deploy部署环境,部署完成后即可在EC2安全组控制台看到多条生效的22端口入站规则
内容的提问来源于stack exchange,提问作者Andy P
相关产品推荐
相关产品推荐

