in lib/constructs/data-lake-enrollment.ts [255:327]
public grantDataLocationPermissions(principal: iam.IPrincipal, permissionGrant: DataLakeEnrollment.DataLocationGrant , sourceLakeFormationLocation?: lakeformation.CfnResource ){
var grantIdPrefix = ""
var dataLakePrincipal : lakeformation.CfnPermissions.DataLakePrincipalProperty = {
dataLakePrincipalIdentifier: ""
};
var s3Arn = `arn:aws:s3:::${permissionGrant.Location}${permissionGrant.LocationPrefix}` ;
var dataLocationProperty : lakeformation.CfnPermissions.ResourceProperty = {
dataLocationResource: {
s3Resource: s3Arn
}
};
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,'importedRoleLFLocationGrant',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,'importedUserLFLocationGrant',principal.arn);
grantIdPrefix = `${resolvedPrincipal.userName}-${this.DataSetName}`
dataLakePrincipal = { dataLakePrincipalIdentifier: resolvedPrincipal.userArn };
}
}
if(permissionGrant.Grantable){
const locationPermission = this.createLakeFormationPermission(`${grantIdPrefix}-locationGrant`,dataLakePrincipal , dataLocationProperty, ['DATA_LOCATION_ACCESS'], ['DATA_LOCATION_ACCESS']);
if (sourceLakeFormationLocation != null ) {
locationPermission.addDependsOn(sourceLakeFormationLocation);
}
}else {
const locationPermission = this.createLakeFormationPermission(`${grantIdPrefix}-locationGrant`,dataLakePrincipal , dataLocationProperty, ['DATA_LOCATION_ACCESS'], ['']);
if (sourceLakeFormationLocation != null ) {
locationPermission.addDependsOn(sourceLakeFormationLocation);
}
}
}