如何在AWS CFN模板参数中将当前客户端IP设为默认值
CloudFormation自动获取客户端IP作为参数默认值方案
CloudFormation目前没有内置服务端函数可以直接获取部署发起端的公网IP作为参数默认值,因为模板的解析与执行逻辑均在AWS服务端运行,服务端无法直接读取客户端的公网IP信息。你可以通过以下两种常用方案解决手动查询IP的问题:
方案1:控制台部署使用官方快捷填充功能
该方案和手动创建安全组时的「My IP」体验完全一致,你只需要在CFN模板中对IP参数做标准化定义,AWS控制台会自动识别并提供快捷填充按钮:
Parameters: # 允许访问堡垒机SSH的公网IP参数定义示例 AllowedSSHIP: Type: String Description: 允许访问SSH的公网IP,格式为/32 CIDR,控制台部署可直接点击「我的IP」自动填充 # 配置CIDR格式校验规则 AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/32$ ConstraintDescription: 必须为合法的/32 CIDR格式IP地址
按上述规则定义参数后,在控制台部署模板时,对应参数输入框旁会自动出现「我的IP」选项,点击即可自动获取当前浏览器公网IP,格式化为/32 CIDR后自动填充,无需手动查询IP站点复制。
方案2:CLI部署时动态传参
如果通过AWS CLI部署模板,可以直接在命令行中动态获取当前设备公网IP直接传入参数:
# 调用AWS官方IP查询接口自动获取当前公网IP,传入CFN参数 aws cloudformation deploy \ --template-file ./bastion-template.yaml \ --stack-name my-bastion-stack \ --parameter-overrides AllowedSSHIP=$(curl -s https://checkip.amazonaws.com)/32
内容的提问来源于stack exchange,提问作者Fat Monk
相关产品推荐
相关产品推荐

