如何在一个策略文档 AWS CDK 中指定多个委托人

How to specify multiple principals in a policy document AWS CDK

我正在处理 cdk 脚本,我想指定多个主体,例如

"Principal": {
  "AWS": [
    "arn:aws:iam::AWS-account-ID:user/user-name-1", 
    "arn:aws:iam::AWS-account-ID:user/user-name-2"
  ]
}

这在 JSON 文档中非常简单,但在使用策略文档编写时,我不确定如何指定它。 我目前有

const principals : Array<IPrincipal> = ['arn:aws:iam::AWS-account-ID:user/user-name-1', 'arn:aws:iam::AWS-account-ID:user/user-name-2'] 

const myPolicy = new PolicyDocument({
      statements: [
        new PolicyStatement({
          actions: ['*'],
          effect: Effect.ALLOW,
          principals: principals,
          resources: ['*'],
        }),
      ],
    }); 

怎么,这是错误的

Cannot read property 'principalJson' of undefined

PolicyStatement principals 键接受一个 IPrincipal 的数组,但你给它的是一个字符串数组。 User.fromUserArn 方法返回的 IUser 类型是 IPrincipal 接口的超集,所以这就是你需要的:

const principals: Array<iam.IUser> = [
  'arn:aws:iam::AWS-account-ID:user/user-name-1',
  'arn:aws:iam::AWS-account-ID:user/user-name-2',
].map((p, i) => iam.User.fromUserArn(this, `ImportedUser${i}`, p));