Предоставить Lake Formation разрешение на чтение для всех таблиц в базе данных Glue через CloudFormation
Я работаю над определением роли читателя в озере данных, которое использует Lake Formation для управления доступом. Я хотел бы предоставить эту роль
Select
разрешение на все таблицы в соответствующих базах данных, так что он автоматически выбирает новые таблицы, которые создаются. В документации CloudFormation я вижу, что в настоящее время это помечено как неподдерживаемое,
TableWildcard
похоже на решение, которое я хотел бы использовать.
В настоящее время я ищу либо жесткое кодирование имен таблиц, к которым эта роль должна иметь доступ, либо запись
boto3
скрипт, который будет собирать все таблицы в базе данных и добавлять к ним разрешения через Lake Formation. Это может быть запущено с Lambda по регулярному расписанию, что автоматизирует этот процесс, но, конечно, это будет не самый красивый подход.
3 ответа
В отличие от текущей документации, можно использовать
"TableWildcard": {}
построить, как показано в приведенном ниже примере, для предоставления разрешений роли для всех таблиц в данной базе данных.
"ExamplePermission": {
"Type": "AWS::LakeFormation::Permissions",
"Properties": {
"DataLakePrincipal": {
"DataLakePrincipalIdentifier": {
"Fn::GetAtt": [
"ExampleRole",
"Arn"
]
}
},
"Resource": {
"TableResource": {
"DatabaseName": "example_database",
"TableWildcard": {}
}
},
"Permissions": [
"SELECT"
],
"PermissionsWithGrantOption": []
}
}
Для тех, кто использует CDK, вот вариант свойства ресурса таблицы в Python:
import aws_cdk.aws_lakeformation as lakeformation
table_property = lakeformation.CfnPermissions.TableResourceProperty(
database_name="example_database",
table_wildcard={}
)
Более простой способ — использовать lf-теги.
Назначьте всем базам данных один и тот же lf-тег (таблицы в базе данных будут наследовать lf-теги). Предоставьте пользователям разрешения для lf-тега.
Если вы хотите иметь все таблицы в соответствующих базах данных, почему бы вам не использовать DataBaseResource? Это то, что я использую, и это работает как шарм.