Skip to content

Commit

Permalink
Added drop table and all permissions to pivot role as safety measure …
Browse files Browse the repository at this point in the history
…for actions in revoke share
  • Loading branch information
dlpzx committed Feb 13, 2024
1 parent 3714bd0 commit 114b567
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,21 @@ def grant_pivot_role_all_database_permissions_to_shared_database(self) -> True:
)
return True

def grant_pivot_role_drop_permissions_to_resource_link_table(self, table: DatasetTable) -> True:
"""
Grants 'DROP' Lake Formation permissions to pivot role to the resource link table in target account
:param table: DatasetTable
:return: True if it is successful
"""
self.lf_client_in_target.grant_permissions_to_table(
principals=[SessionHelper.get_delegation_role_arn(self.target_environment.AwsAccountId)],
database_name=self.shared_db_name,
table_name=table.GlueTableName,
catalog_id=self.target_environment.AwsAccountId,
permissions=['DROP']
)
return True

def grant_principals_database_permissions_to_shared_database(self) -> True:
"""
Grants 'DESCRIBE' Lake Formation permissions to share principals to the shared database in target account
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ def process_revoked_shares(self) -> bool:
'##### Starting Revoking tables #######'
)
success = True
self.grant_pivot_role_all_database_permissions_to_shared_database()
for table in self.revoked_tables:
share_item = ShareObjectRepository.find_sharable_item(
self.session, self.share.shareUri, table.tableUri
Expand Down Expand Up @@ -182,6 +183,7 @@ def process_revoked_shares(self) -> bool:

if (self.is_new_share and not other_table_shares_in_env) or not self.is_new_share:
warn('self.is_new_share will be deprecated in v2.6.0', DeprecationWarning, stacklevel=2)
self.grant_pivot_role_drop_permissions_to_resource_link_table(table)
self.delete_resource_link_table_in_shared_database(table)

if not other_table_shares_in_env:
Expand Down
25 changes: 25 additions & 0 deletions tests/modules/datasets/tasks/test_lf_share_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,31 @@ def test_grant_principals_permissions_to_resource_link_table(
permissions=['DESCRIBE']
)


def test_grant_pivot_role_drop_permissions_to_resource_link_table(
processor_with_mocks,
table1: DatasetTable,
target_environment: Environment,
mocker
):
processor, lf_client, glue_client = processor_with_mocks
mocker.patch(
"dataall.base.aws.sts.SessionHelper.get_delegation_role_arn",
return_value="arn:role",
)
# When
processor.grant_pivot_role_drop_permissions_to_resource_link_table(table1)
# Then
lf_client.grant_permissions_to_table.assert_called_once()
lf_client.grant_permissions_to_table.assert_called_with(
principals=["arn:role"],
database_name=processor.shared_db_name,
table_name=table1.GlueTableName,
catalog_id=target_environment.AwsAccountId,
permissions=['DROP']
)


def test_grant_principals_permissions_to_table_in_target(
processor_with_mocks,
table1: DatasetTable,
Expand Down

0 comments on commit 114b567

Please sign in to comment.