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

Grant Lake Formation read permission to all tables in a Glue database through CloudFormation

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

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

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

与当前文档相反,可以使用 "TableWildcard": {} 构造,如下例所示,将角色权限授予给定数据库中的所有 table。

"ExamplePermission": {
  "Type": "AWS::LakeFormation::Permissions",
  "Properties": {
    "DataLakePrincipal": {
      "DataLakePrincipalIdentifier": {
        "Fn::GetAtt": [
          "ExampleRole",
          "Arn"
        ]
      }
    },
    "Resource": {
      "TableResource": {
        "DatabaseName": "example_database",
        "TableWildcard": {}
      }
    },
    "Permissions": [
      "SELECT"
    ],
    "PermissionsWithGrantOption": []
  }
}

对于任何使用 CDK 的人,这里是 table 资源的 Python 风格 属性:

import aws_cdk.aws_lakeformation as lakeformation

table_property = lakeformation.CfnPermissions.TableResourceProperty(
    database_name="example_database",
    table_wildcard={}
)