Предоставить 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? Это то, что я использую, и это работает как шарм.

Другие вопросы по тегам