通过 CloudFormation 授予 Lake Formation 对 Glue 数据库中所有表的读取权限

问题描述

我正致力于在使用 Lake Formation 进行访问控制的数据湖中定义读者角色。我想授予此角色 Select 对相关数据库中所有表的权限,以便它自动选择创建的新表。在 documentation of CloudFormation 中,我可以看到当前标记不支持TableWildcard 看起来像是我想要使用的解决方案。

我目前正在考虑对该角色应该有权访问的表名称进行硬编码,或者编写一个 boto3 脚本来获取数据库中的所有表并通过 Lake Formation 向它们添加权限。这可以定期与 Lambda 一起运行,这会自动执行此过程,但这当然不是最漂亮的方法

解决方法

如果您想拥有相关数据库中的所有表,为什么不使用 DataBaseResource?这就是我正在使用的,它就像一个魅力。

,

与当前文档相反,可以使用 "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={}
)