CDK Реализует возможность предоставления нескольких ресурсов

#amazon-iam #aws-cdk

Вопрос:

Можно ли создать конструкцию, которая реализуется IGrantable путем создания нескольких IGrantable ресурсов?

Допустим, у меня есть конструкция:

 export class MyLambdas extends Construct {
  private readonly firstLambda: Function;
  private readonly secondLambda: Function;

  constructor(scope: Construct, id: string) {
    this.firstLambda = new Function(this, ...);
    this.secondLambda = new Function(this, ...);
  }
}
 

Я хотел бы реализовать IGrantable для этой конструкции, чтобы и тем firstLambda , и secondLambda другим были предоставлены разрешения.

Я бы предположил , что это будет достигнуто с помощью CompositePrincipal , например:

 export class MyLambdas extends Construct implements IGrantable {
  private readonly firstLambda: Function;
  private readonly secondLambda: Function;

  public grantPrincipal: IPrincipal;

  constructor(scope: Construct, id: string) {
    this.firstLambda = new Function(this, ...);
    this.secondLambda = new Function(this, ...);

    this.grantPrincipal = new CompositePrincipal(
      this.firstLambda.grantPrincipal,
      this.secondLambda.grantPrincipal);
  }
}
 

Однако, во-первых, типы не работают ( CompositePrincipal принимает PrincipalBase , а не IPrincipal ), а во-вторых, похоже, что он не предоставляет разрешения даже при некотором приведении.

Кому-нибудь удалось этого добиться? 🙂

Комментарии:

1. Вы могли бы попробовать: this.grantPrinciple = new CompositePrincipal(new ArnPrincipal(firstLambda.role.roleArn), new ArnPrincipal(secondLambda.role.roleArn)

2. Спасибо за предложение! К сожалению, это, похоже, не работает (по крайней мере, я проверил это на заданиях по клею с a CompositePrincipal для ролей заданий по клею, и задания по клею не смогли получить доступ к ведру, которое я вызвал grantRead )