amazon-web-services - 如何在 cloudformation 内的安全组中使用 EC2 ip 地址
问题描述
我对 cloudformation 有点陌生,我无法参数化或查找有关如何在我的安全组中引用 ec2 IP 地址的信息。两者在我的堆栈中定义,我的 SG 依赖于 EC2。这是我的SG:
"3DEXPPLAT": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "3DPLAT SG",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"CidrIp": {"Ref" : "CFAPA"}
}
],
"Tags": [
{
"Key": "Name",
"Value": "STACK_3DEXPSG"
}
]
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "59898995-0f8d-4cbe-b315-c9c68df319b2"
}
},
"DependsOn": [
"CFAPA"
]
}
那么,我应该在 SecurityGroupIngress 中放入我的 CidrIp 以使我的 SG 使用我的 EC2 的私有 IP?
解决方案
当您Fn::Ref
在 EC2 实例上使用时,您正在检索其实例 ID。对于您的安全组,您需要 IP(使用Fn::GetAtt
),并且需要将其格式化为 CIDR 块(添加带有 的符号Fn::Sub
)。因此,假设CFAPA
是您的 EC2 实例,这应该可以工作:
{
"3DEXPPLAT": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "3DPLAT SG",
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"CidrIp": {
"Fn::Sub": "${CFAPA.PrivateIp}/32"
}
}
]
}
}
}
笔记:
您不需要指定
DependsOn
属性,因为 CloudFormation 会因为引用而找出依赖关系。这简化了代码。要确定要使用的属性
Fn::GetAtt
被调用PrivateIp
,您必须参考AWS::EC2::Instance文档的“返回值”部分。这是您注意到Fn::Ref
返回实例 ID 的地方。请记住,私有 IP 可能会更改。因此,您可能希望将 附加
CFAPA
到另一个安全组并根据安全组成员身份创建权限。这是一个架构决定。
推荐阅读
- python - 使用输入文件在 python 中使用 matplotlib 创建直方图
- python - 如何保存熊猫数据框的python字典以在R中作为数据框列表打开
- python - 从可变长度列表格式化字符串
- php - 我收到此错误:解析错误:语法错误,C:\wamp\www 中出现意外的 'else' (T_ELSE)。我很难找到来源
- idris - 字符列表与 Idris 中的字符串不同吗?
- c++ - 如何将用户定义的程序集文件应用于“make”过程
- ios - 在 Spritekit 中创建暂停菜单
- networking - 如何将击键/交互式 gui 发送到另一台 Win10 机器?
- reactjs - 布局表反应原生
- python - 查找数组中最大负元素和最小正元素的索引