in lib/constructs/data-lake-enrollment.ts [383:454]
public grantDatabasePermission(principal: iam.IPrincipal, permissionGrant: DataLakeEnrollment.DatabasePermissionGrant, includeSourceDb: boolean = false){
const databaseName = this.DataEnrollment.Dataset_DatalakeDatabaseName;
var grantIdPrefix = ""
var dataLakePrincipal : lakeformation.CfnPermissions.DataLakePrincipalProperty = {
dataLakePrincipalIdentifier: ""
};
var databaseResourceProperty : lakeformation.CfnPermissions.ResourceProperty = {
databaseResource: {name: databaseName}
};
if(principal instanceof iam.Role) {
const resolvedPrincipal = principal as iam.Role;
if(permissionGrant.GrantResourcePrefix){
grantIdPrefix = `${permissionGrant.GrantResourcePrefix}-${this.DataSetName}`
}else{
grantIdPrefix = `${resolvedPrincipal.roleName}-${this.DataSetName}`
}
dataLakePrincipal = { dataLakePrincipalIdentifier: resolvedPrincipal.roleArn };
}
if(principal instanceof iam.User){
const resolvedPrincipal = principal as iam.User;
grantIdPrefix = `${resolvedPrincipal.userName}-${this.DataSetName}`
dataLakePrincipal = { dataLakePrincipalIdentifier: resolvedPrincipal.userArn };
}
if (principal instanceof iam.ArnPrincipal) {
if(principal.arn.includes(":role/")){
const resolvedPrincipal = iam.Role.fromRoleArn(this,'importedRoleTableWithColumnGrant',principal.arn);
if(permissionGrant.GrantResourcePrefix){
grantIdPrefix = `${permissionGrant.GrantResourcePrefix}-${this.DataSetName}`
}else{
grantIdPrefix = `${resolvedPrincipal.roleName}-${this.DataSetName}`
}
dataLakePrincipal = { dataLakePrincipalIdentifier: resolvedPrincipal.roleArn };
}
if(principal.arn.includes(":user/")){
const resolvedPrincipal = iam.User.fromUserArn(this,'importedUserTableWithColumnGrant',principal.arn);
grantIdPrefix = `${resolvedPrincipal.userName}-${this.DataSetName}`
dataLakePrincipal = { dataLakePrincipalIdentifier: resolvedPrincipal.userArn };
}
}
const dataLakeGrant = this.createLakeFormationPermission(`${grantIdPrefix}-databaseGrant`,dataLakePrincipal , databaseResourceProperty, permissionGrant.DatabasePermissions, permissionGrant.GrantableDatabasePermissions)
dataLakeGrant.addDependsOn(this.DataEnrollment.Dataset_Datalake);
if(includeSourceDb){
databaseResourceProperty = {
//dataLocationResource: {resourceArn: this.DataEnrollment.DataLakeBucketName},
databaseResource: {name: databaseName}
};
const sourceGrant = this.createLakeFormationPermission(`${grantIdPrefix}-databaseSrcGrant`,dataLakePrincipal , databaseResourceProperty, permissionGrant.DatabasePermissions, permissionGrant.GrantableDatabasePermissions)
sourceGrant.addDependsOn(this.DataEnrollment.Dataset_Source);
}
}