基于身份的策略中使用的 PolicyStatement 无法指定任何 IAM 委托人错误

wal*_*ter 9 amazon-web-services amazon-iam aws-lambda aws-cdk

    let servicePrincipal: any = new iam.ServicePrincipal("lambda.amazonaws.com");

    let policyDoc = new iam.PolicyDocument({
      statements: [
        new iam.PolicyStatement({
          actions: ["sts:AssumeRole"],
          principals: [servicePrincipal],
          effect: iam.Effect.ALLOW,
          resources: ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
          sid: ""
        })
      ],
    });

    let accessRole: any = new iam.Role(this, 'git-access-role', {
      assumedBy: servicePrincipal,
      inlinePolicies: { policyDoc }
    });
Run Code Online (Sandbox Code Playgroud)

我正在创建一个 cdk lambda,其角色具有 AWSLambdaBasicExecutionRole,但收到一条错误消息

A PolicyStatement used in an identity-based policy cannot specify any IAM principals
Run Code Online (Sandbox Code Playgroud)

不太确定...这是什么意思以及我应该做什么?

Max*_*erg 2

看起来您正在尝试使用 生成假设角色策略policyDoc。该assumedBy: servicePrincipal线路将自动生成信任策略。如果您只想将 lambda 基本执行策略分配给角色,那么它应该如下所示:

const accessRole = new iam.Role(this, 'git-access-role', {
  assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
  managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole')]
});
Run Code Online (Sandbox Code Playgroud)

如果 lambda 需要访问 git,因为角色的构造 ID 似乎表明了这一点,那么您可以将这些权限添加为内联策略。但是这段代码将创建一个可由 lambda 承担的角色,并且它将具有 lambda 运行所需的最基本的权限。