首先推荐一个AWS CDK比较好用的一个文档,东西比较全,参考价值也比较高
Security Group
使用cdk创建Security Group,class选择 “CfnSecurityGroup”、“CfnSecurityGroupIngress”、“CfnSecurityGroupEgress”。如果Inbound Outbound规则需要依赖其他SG的话,使用“getAttrGroupId” method来获取Security Group ID。
创建Security Group:
在创建Security Group的时候可以定义Inbound和Outbound Rules,如果不需要依赖于其他的SG,可以在这一步直接定义,所使用的是IngressProperty和EgressProperty这两个class,与下文中单独创建Ingress和Egress使用的class不同。
@Bean
@ConditionalOnBean(value = VpcConfig.class)
public CfnSecurityGroup defaultSG(final ApplicationStack stack, final IVpc defaultVpc){
return CfnSecurityGroup.Builder.create(stack,"default-security-group")
.vpcId(defaultVpc.getVpcId())
.groupName("default-security-group")
.groupDescription("a security group for demo")
.build();
}
创建Security Group Rules:
这里要注意,如果Inbound Outbound规则存在循环依赖其他的Security Groups,必须要加“addDependsOn” method,以保证所有的Rules一定在创建Security Groups后创建。
@Bean
@ConditionalOnBean(value = {AuroraProps.class, SecurityGroupConfig.class})
public CfnSecurityGroup setSGRules(final AuroraProps props, final ApplicationStack stack, CfnSecurityGroup databaseSG, final CfnSecurityGroup proxySG){
CfnSecurityGroupIngress defaultRule = CfnSecurityGroupIngress.Builder
.create(stack,"databaseSG-inbound-proxySG")
.groupId(databaseSG.getAttrGroupId())
.ipProtocol("tcp")
.fromPort(props.getPort())
.toPort(props.getPort())
.sourceSecurityGroupId(proxySG.getAttrGroupId())
.build();
defaultRule.addDependsOn(databaseSG);
defaultRule.addDependsOn(proxySG);
return databaseSG;
}
转换Security Group格式:
在其他地方调用Security Group的时候通常不支持CfnSecurityGroup的class,只支持ISecurityGroup、SecurityGroup这两种格式。
ISecurityGroup databaseSecurityGroup = SecurityGroup
.fromSecurityGroupId(stack,"trans-database-security-group", databaseSG.getAttrGroupId());
// databaseSG 字段类型为 CfnSecurityGroup