使用AWS CDK创建S3桶lambda访问的VPC端点



我正在使用Python风格的AWS CDK构建一个系统。

我有一个带有附加EFS的lambda函数。要使用EFS,我需要将lambda函数放在VPC内。问题是,我还希望这个lambda函数从特定的S3桶(在同一区域)检索文件。在进行检索时,我得到超时错误,并且根据一些研究,似乎我需要NAT Gateway(太昂贵)或VPC端点来允许访问。

我如何在CDK中构建VPC endpoint以允许我的lambda函数与我的S3桶交谈?

export class YourStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpc = ec2.Vpc.fromLookup(this, 'vpc', { isDefault: true });
const s3BucketAcessPoint = vpc.addGatewayEndpoint('s3Endpoint', {
service: ec2.GatewayVpcEndpointAwsService.S3,
});
s3BucketAcessPoint.addToPolicy(
new iam.PolicyStatement({
principals: [new iam.AnyPrincipal()],
actions: ['s3:*'],
resources: ['*'],
}),
);
}
}

编辑:@gshpychka下面的评论是正确的-只有vpc定义中的gateway_endpoint是必需的。

以下是我在遵循本指南的想法后想到的似乎有效的方法。

您需要创建S3 access pointVPC Endpoint

创建VPC时制作VPC Endpoint。这使得S3桶可以被VPC访问。您可以稍后添加一个策略来限制此访问。

self.vpc = ec2.Vpc(
scope=self,
id="VPC",
vpc_name="my_VPC",
gateway_endpoints={
"s3": ec2.GatewayVpcEndpointOptions(
service=ec2.GatewayVpcEndpointAwsService.S3
)
},
nat_gateways=0,
)

在创建S3桶之后创建S3 access point。这允许访问桶。

self.bucket_access = s3.CfnAccessPoint(
scope=self,
id="s3_access",
bucket=self.my_bucket.bucket_name,
name="bucket-access-point",
vpc_configuration=s3.CfnAccessPoint.VpcConfigurationProperty(
vpc_id=self.vpc.vpc_id
),
)

最新更新