CDK V1中如何为EFS添加强制传输加密的文件系统策略?
问题描述
我们有一个基于CDK的代码仓库用于生成AWS资源,已为AWS Lambda创建了EFS,代码采用CDK V1(使用aws-cdk/aws-efs库)开发。需要为弹性文件系统(EFS)添加文件系统策略,强制实现传输加密。
在CDK V2中可通过fileSystemPolicy参数直接配置该策略,但CDK V1的FileSystem L2构造未暴露此参数,查阅lambda.FileSystem文档时发现FileSystemConfig包含policies字段,但无法直接设置。
CDK V1 实现方案
在CDK V1中可以通过两种方式实现EFS传输加密的策略配置:
方法一:使用L1构造 CfnFileSystem
直接使用CloudFormation层级的构造,手动指定文件系统策略及其他必要参数:
import * as efs from '@aws-cdk/aws-efs'; import * as iam from '@aws-cdk/aws-iam'; import * as ec2 from '@aws-cdk/aws-ec2'; // 替换为你的VPC实例或通过lookup获取现有VPC const vpc = ec2.Vpc.fromLookup(this, 'ExistingVpc', { vpcId: 'your-vpc-id' }); // 定义强制传输加密的文件系统策略 const fileSystemPolicy = new iam.PolicyDocument({ statements: [ new iam.PolicyStatement({ effect: iam.Effect.ALLOW, principals: [new iam.AnyPrincipal()], actions: [ 'elasticfilesystem:ClientRootAccess', 'elasticfilesystem:ClientMount', 'elasticfilesystem:ClientWrite' ], conditions: { Bool: { 'aws:SecureTransport': 'true' } } }) ] }); // 创建EFS文件系统并绑定策略 const cfnFs = new efs.CfnFileSystem(this, 'MyLambdaFilesystem', { fileSystemPolicy: fileSystemPolicy.toJson(), // 可选:添加性能模式、吞吐量模式等配置 }); // 为EFS添加挂载目标(需关联VPC子网和安全组) new efs.CfnMountTarget(this, 'EfsMountTarget', { fileSystemId: cfnFs.ref, subnetId: vpc.privateSubnets[0].subnetId, securityGroups: ['your-security-group-id'] // 替换为你的安全组ID });
方法二:为L2 FileSystem 添加属性覆盖
基于L2构造的便利性,通过覆盖底层CloudFormation资源的属性来设置文件系统策略:
import * as efs from '@aws-cdk/aws-efs'; import * as iam from '@aws-cdk/aws-iam'; import * as ec2 from '@aws-cdk/aws-ec2'; // 替换为你的VPC实例 const vpc = ec2.Vpc.fromLookup(this, 'ExistingVpc', { vpcId: 'your-vpc-id' }); // 创建L2层级的EFS文件系统 const fs = new efs.FileSystem(this, 'MyLambdaFilesystem', { vpc: vpc, // 其他原有配置参数,比如安全组、性能模式等 }); // 定义强制传输加密的文件系统策略 const fileSystemPolicy = new iam.PolicyDocument({ statements: [ new iam.PolicyStatement({ effect: iam.Effect.ALLOW, principals: [new iam.AnyPrincipal()], actions: [ 'elasticfilesystem:ClientRootAccess', 'elasticfilesystem:ClientMount', 'elasticfilesystem:ClientWrite' ], conditions: { Bool: { 'aws:SecureTransport': 'true' } } }) ] }); // 覆盖底层CfnFileSystem的FileSystemPolicy属性 fs.node.defaultChild.addPropertyOverride('FileSystemPolicy', fileSystemPolicy.toJson());
两种方法说明
- 方法一:直接操作L1构造,配置更灵活,但需要手动管理挂载目标等细节,适合需要完全自定义CloudFormation属性的场景。
- 方法二:保留L2构造的封装优势(自动处理挂载目标、安全组关联等),仅通过属性覆盖添加策略,更贴合原有CDK V1代码结构。
内容的提问来源于stack exchange,提问作者Kuldeep Jain
相关产品推荐
相关产品推荐

