Estoy tratando de migrar el siguiente recurso de CloudFormation a CDK usando mecanografiado:
ALBSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: !Ref VPCId GroupDescription: !Sub "${Application}-${Environment}-alb-sg" SecurityGroupIngress: - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: !Ref SecurityGroupIngressCidrHe intentado con esto (no sé cómo crear las propiedades necesarias):
const albSecurityGroup = new SecurityGroup(this, "ALBSecurityGroup", { vpc: Vpc.fromLookup(this, id, { vpcId: props.vpcId.stringValue }), description: appEnv + "-alb-sg" })Y usando un constructor de Cfn como este (no sé cómo unirme a CfnSecurityGroup con CfnSecurityGroupIngress):
const x = new CfnSecurityGroupIngress(this, id, { ipProtocol: "tcp", fromPort: 443, toPort: 443, cidrIp: props.securityGroupIngressCidr }); const albSecurityGroupCfn = new CfnSecurityGroup(this, id, { vpcId: props.vpcId.stringValue, groupDescription: appEnv + "-alb-sg" });Aprecio tu ayuda.
Su respuesta parece más clara al usar CfnSecurityGroup , pero solo para completar y para mostrar el enfoque que se puede tomar para lograr lo mismo usando una construcción de orden superior SecurityGroup sería la siguiente:
import { SecurityGroup, Peer, Port, Vpc } from '@aws-cdk/aws-ec2'; .... const vpc = Vpc.fromLookup(this, id, { vpcId: props.vpcId.stringValue }); const albSecurityGroup = new SecurityGroup(this, 'MyALBSG', { vpc, description: appEnv + "-alb-sg", allowAllOutbound: true }); albSecurityGroup.addIngressRule( Peer.ipv4(props.securityGroupIngressCidr), Port.tcp(443), "Allow HTTPS traffic from CIDR IPs" ); .... Sugeriría encarecidamente que revise la sección de descripción general de cualquier módulo de servicio que planee usar en CDK. Aquí está el de aws-ec2 que muestra cómo se puede escribir SecurityGroup .
También podría usar loadBalancer.connections.allowFrom() directamente en lugar de crear explícitamente un grupo de seguridad para su ALB. Suponiendo que su construcción ALB se llame loadBalancer , se vería así:
loadBalancer.connections.allowFrom( Peer.ipv4(props.securityGroupIngressCidr), Port.tcp(443), 'Allow inbound HTTPS from CIDR IPs' );Hoy me di cuenta de que era una solución fácil.
const albSecurityGroupCfn = new CfnSecurityGroup(this, id, { vpcId: props.vpcId.stringValue, groupDescription: appEnv + "-alb-sg", securityGroupIngress: [ new CfnSecurityGroupIngress(this, id, { ipProtocol: "tcp", fromPort: 443, toPort: 443, cidrIp: props.securityGroupIngressCidr }) ] });¡Gracias!
ACTUALIZACIÓN : (dmahapatro)
Con el enfoque anterior, recibiría un error de tiempo de compilación que muestra que necesita un tipo apropiado. Aquí hay un ajuste menor a la solución anterior:
const albSecurityGroupCfn = new CfnSecurityGroup(this, id, { vpcId: props.vpcId.stringValue, groupDescription: appEnv + "-alb-sg", securityGroupIngress: [{ ipProtocol: "tcp", fromPort: 443, toPort: 443, cidrIp: props.securityGroupIngressCidr }] }); securityGroupIngress espera los siguientes tipos:
Type: Array<CfnSecurityGroup.IngressProperty | cdk.IResolvable> | cdk.IResolvable Cuando proporciona una matriz de CfnSecurityGroupIngress , no se resuelve en ninguno de esos tipos. Una mejor manera de manejarlo es usar una matriz de objetos que coaccionarán a Array<CfnSecurityGroup.IngressProperty> de forma predeterminada. La última respuesta muestra que no necesita crear una instancia de CfnSecurityGroupIngress para securityGroupIngress .
En una nota al margen, si VS Code se usa como IDE para CDK, detecta esos errores de tiempo de compilación de antemano.