将入站规则添加到安全组 aws cdk

Posted

技术标签:

【中文标题】将入站规则添加到安全组 aws cdk【英文标题】:Add inbound rule to security group aws cdk 【发布时间】:2022-01-22 14:13:50 【问题描述】:

我正在使用 AWS Opensearch (Elasticsearch 6.8) 和一个 AWS lambda。收到事件时,lambda 会将记录插入 Elasticsearch。下面是 elasticsearch 的定义:

this.loggingES = new opensearch.Domain(this, 'LogsES', 
    version: opensearch.EngineVersion.ELASTICSEARCH_6_8,
    domainName: "app-logs-es",
    vpc: this.loggingVPC,
    zoneAwareness: 
        availabilityZoneCount: 3,
    ,
    enforceHttps: true,
    nodeToNodeEncryption: true,
    encryptionAtRest: 
        enabled: true
    ,
    capacity: 
        masterNodes: 3,
        dataNodes: 3,
    
);

现在发生的情况是,在同一个 VPC 下创建了两个安全组,一个用于 ES,另一个用于 lambda。 lambda 无法连接到 Elasticsearch,因为 elasticsearch 安全组没有允许来自 lambda 安全组的流量的入站规则设置。

有没有办法,我可以:

定义一个只有一个安全组且VPC内的所有组件都可以互相访问的VPC? 或者在 CDK 本身中,我可以在 Elasticsearch SG 中设置入站规则以允许来自 lambda SG 的流量。

【问题讨论】:

【参考方案1】:

@gshpychka 的回答很准确而且非常简洁。为寻找TypeScript 变体的任何人添加下面的代码。

import Port from "@aws-cdk/aws-ec2"

// ... other imports and code

MyOpenSearchDomain.connections.allowFrom(myLambda, Port.allTraffic(), "Allows Lambda to connect to Opensearch.")

要允许来自 Lambda 的连接,我们需要指定 Port.allTraffic(),因为 Lambda 没有默认端口。使用 allow_default_port_from 会抛出一个错误声明。

【讨论】:

关于您对默认端口的评论,它指的是域的默认端口,而不是 lambda。来自文档:Allow connections from the peer on our default port..【参考方案2】:

在CDK中可以添加入口规则,如下:

const mySecurityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', 
   vpc,
   description: 'Allow ssh access to ec2 instances',
   allowAllOutbound: true   // Can be set to false
);

mySecurityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 
'allow ssh access from the world');

示例取自官方文档页面: https://docs.aws.amazon.com/cdk/api/v1/docs/@aws-cdk_aws-ec2.SecurityGroup.html#example.

【讨论】:

【参考方案3】:

是的,CDK 使用 Connections 类(Domain exposes)使这变得非常简单。下面是一个 Python 示例:

my_domain.connections.allow_default_port_from(my_lambda)

就是这样。您不必考虑安全组,它们已被抽象出来。

【讨论】:

这个解决方案就像一个魅力。虽然我正在使用TypeScript,但能够移植代码。谢谢你的直觉。我也为其他人添加了一个 TypeScript 变体作为答案。

以上是关于将入站规则添加到安全组 aws cdk的主要内容,如果未能解决你的问题,请参考以下文章

IP 地址(在源列下)在 AWS 安全组的入站和出站规则中代表/或含义是啥?

在 AWS EC2 中,没有入站规则的安全组是啥意思?

AWS考证方向:AWS实例安全组设置

有没有办法为 AWS 安全组规则添加描述

登录失败,虽然我在我的 RDS 实例的安全组中指定了入站规则

您不能为现有 IPv4 CIDR 规则指定引用的组 ID。在 AWS 安全组中编辑入站规则时提示