You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:44:54