使用 AWS CDK 将入口规则添加到安全组
Add Ingress Rule to Security Groups using AWS CDK
我正在尝试使用 Python 通过 AWS CDK 将入口规则添加到安全组。根据文档 here - Class aws_cdk.aws_ec2 上有一个方法 add_ingress_rule()。
但是 - 当我尝试部署堆栈时,出现以下错误:
AttributeError: 'method' 对象没有属性 'jsii__type' 子进程退出,出现错误 1
下面的安全组代码片段-
sg_elb = ec2.SecurityGroup(
self,
id = "sg_elb",
vpc = vpc,
security_group_name = "sg_elb"
)
sg_elb.add_ingress_rule(
peer = ec2.Peer.any_ipv4,
connection = ec2.Port.tcp(443) # This line seems to be a problem.
)
官方文档中甚至给出了相同的示例(在 TypeScript 中)here 所以我不确定我做错了什么。
谁能指点一下?
提前致谢!
我得到了以下使用 TS 的工作,希望它能帮助一些。
const mySG = new ec2.SecurityGroup(this, `${stack}-security-group`, {
vpc: vpc,
allowAllOutbound: true,
description: 'CDK Security Group'
});
mySG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'SSH frm anywhere');
mySG.addIngressRule(ec2.Peer.ipv4('10.200.0.0/24'), ec2.Port.tcp(5439), 'Redshift Ingress1');
mySG.addIngressRule(ec2.Peer.ipv4('10.0.0.0/24'), ec2.Port.tcp(5439), 'Redshift Ingress2');
顺便说一句,不建议使用显式安全组名称:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.SecurityGroup.html
这对我有用
sg = ec2.SecurityGroup(
self,
id="sg_1",
vpc=vpc,
allow_all_outbound=True,
description="CDK Security Group"
# security_group_name = "sg_elb"
# not recommended https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.SecurityGroup.html
)
sg.add_ingress_rule(
peer=ec2.Peer.any_ipv4(),
connection=ec2.Port.tcp(22),
description="ssh",
)
在 SDK 文档中:“可以通过 addIngressRule 和 addEgressRule 直接操作安全组,但建议通过 .connections 对象进行突变。如果您以这种方式将两个构造与安全组对等,将在中创建适当的规则两者。
所以最好添加这样的规则:
sg.connections.allow_from(
Peer.any_ipv4(),
Port.tcp(22),
"ssh"
)
我正在尝试使用 Python 通过 AWS CDK 将入口规则添加到安全组。根据文档 here - Class aws_cdk.aws_ec2 上有一个方法 add_ingress_rule()。
但是 - 当我尝试部署堆栈时,出现以下错误:
AttributeError: 'method' 对象没有属性 'jsii__type' 子进程退出,出现错误 1
下面的安全组代码片段-
sg_elb = ec2.SecurityGroup(
self,
id = "sg_elb",
vpc = vpc,
security_group_name = "sg_elb"
)
sg_elb.add_ingress_rule(
peer = ec2.Peer.any_ipv4,
connection = ec2.Port.tcp(443) # This line seems to be a problem.
)
官方文档中甚至给出了相同的示例(在 TypeScript 中)here 所以我不确定我做错了什么。
谁能指点一下?
提前致谢!
我得到了以下使用 TS 的工作,希望它能帮助一些。
const mySG = new ec2.SecurityGroup(this, `${stack}-security-group`, {
vpc: vpc,
allowAllOutbound: true,
description: 'CDK Security Group'
});
mySG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'SSH frm anywhere');
mySG.addIngressRule(ec2.Peer.ipv4('10.200.0.0/24'), ec2.Port.tcp(5439), 'Redshift Ingress1');
mySG.addIngressRule(ec2.Peer.ipv4('10.0.0.0/24'), ec2.Port.tcp(5439), 'Redshift Ingress2');
顺便说一句,不建议使用显式安全组名称:https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.SecurityGroup.html
这对我有用
sg = ec2.SecurityGroup(
self,
id="sg_1",
vpc=vpc,
allow_all_outbound=True,
description="CDK Security Group"
# security_group_name = "sg_elb"
# not recommended https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-ec2.SecurityGroup.html
)
sg.add_ingress_rule(
peer=ec2.Peer.any_ipv4(),
connection=ec2.Port.tcp(22),
description="ssh",
)
在 SDK 文档中:“可以通过 addIngressRule 和 addEgressRule 直接操作安全组,但建议通过 .connections 对象进行突变。如果您以这种方式将两个构造与安全组对等,将在中创建适当的规则两者。
所以最好添加这样的规则:
sg.connections.allow_from(
Peer.any_ipv4(),
Port.tcp(22),
"ssh"
)