#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
)