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



我正在使用AWS Opensearch (Elasticsearch 6.8)和AWS lambda。当接收到事件时,lambda会将记录插入到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,因为弹性搜索安全组没有允许来自lambda安全组的流量的入站规则设置。

有没有办法,我可以:

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

是的,CDK通过Domain公开的Connections类使这变得非常容易。以下是Python中的一个示例:

my_domain.connections.allow_default_port_from(my_lambda)

就是这样。你不必考虑安全小组,他们被抽象掉了。

在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#示例.

@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会抛出一个错误。

相关内容

  • 没有找到相关文章

最新更新