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

CDK中如何为CloudFront配置IAM权限供Lambda@Edge继承

解决Lambda@Edge访问Secret Manager的权限问题

先明确一个关键误区:Lambda@Edge不会继承CloudFront分发的服务角色,CloudFront本身甚至没有固定的服务角色用来执行Lambda@Edge——Lambda@Edge函数是由CloudFront在边缘节点触发,它的权限完全靠自己的IAM角色控制,和CloudFront的角色没关系。

下面是正确的CDK实现步骤:

  • 给Lambda@Edge单独创建IAM角色
    你得显式创建一个IAM角色,给它加上读取Secret Manager的权限,然后把这个角色绑定到Lambda@Edge函数上。代码示例:

    // 创建Lambda@Edge的执行角色
    const lambdaEdgeRole = new iam.Role(this, 'LambdaEdgeRole', {
      assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
      // 必须添加这个托管权限,满足Lambda基本执行需求
      managedPolicies: [
        iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
      ],
    });
    
    // 授予角色读取Secret的权限
    secret.grantRead(lambdaEdgeRole);
    
    // 创建Lambda@Edge函数时关联这个角色
    const lambdaEdgeFunction = new lambda.Function(this, 'LambdaEdgeFunction', {
      runtime: lambda.Runtime.NODEJS_18_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset('lambda'),
      role: lambdaEdgeRole,
    });
    
  • Lambda@Edge角色的特殊要求

    • 角色的信任策略必须包含lambda.amazonaws.com,因为是Lambda服务承担这个角色运行函数,CloudFront通过Lambda间接调用,不需要添加CloudFront的服务主体。
    • 别尝试给CloudFront分发本身附加权限,CloudFront不会用自己的角色执行Lambda@Edge,边缘环境中是Lambda用你指定的角色运行函数。
  • 关于CloudFrontWebDistribution无grantPrincipal的原因
    CloudFrontWebDistribution确实没有这个属性,因为CloudFront分发本身就不存在可用于授权的服务主体——它的权限模型和其他AWS服务不同,边缘Lambda的权限完全由自身角色决定。

内容的提问来源于stack exchange,提问作者Michael Lorton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:04:53