Neb*_*tic 5 acl rbac azure terraform azure-data-lake
我目前正在 Azure 中构建数据湖(Gen2)。我使用 Terraform 来配置所有资源。但是,我遇到了一些权限不一致的情况。根据文档,可以使用 RBAC 和 ACL 设置数据湖的权限。
我的选择是使用 ACL,因为它允许对数据湖内的目录进行细粒度的权限。在数据湖中,我raw在其他目录中创建了一个目录,其中某个目录group具有r--(只读)默认权限。意味着default该目录下的所有对象都被赋予与该目录相同的权限。当该组中的用户尝试使用存储资源管理器访问数据湖时,他们看不到存储帐户,也看不到目录所在的实际文件系统/容器。因此他们无法访问他们具有只读权限的目录。
因此,我正在考虑分配至少列出存储帐户和文件系统(容器)所需的权限。评估现有角色后,我获得了以下权限:
Microsoft.Storage/storageAccounts/listKeys/actionMicrosoft.Storage/storageAccounts/read申请许可1后,没有任何变化。同样应用权限 2 后,组中的用户突然可以在数据湖中执行所有操作,就好像没有指定 ACL 一样。
我现在的问题是:如何使用 ACL(和 RBAC)创建一个数据湖,其中的目录对不同的组具有不同的权限,以便组实际上只能读取或写入 ACL 中的那些目录?此外,他们应该能够列出他们有权访问某些目录的存储帐户和文件系统(容器)。
我相信您还需要在整个文件夹层次结构上创建访问 ACL,直至您尝试读取的文件或文件夹,包括根容器。
因此,如果您的文件夹“raw”是在顶层创建的,那么您需要为该组创建以下 ACL...
"/" --x (access)
"/raw" r-x (access)
"/raw" r-x (default)
Run Code Online (Sandbox Code Playgroud)
...然后,默认 ACL 将为该组提供对创建的所有子文件夹和文件的读取和执行 ACL。
您还需要至少向该组授予对该资源的 Reader RBAC 权限 - 这可以是在存储帐户上,如果您想限制对其他容器的访问,则可以仅在容器上。
可以使用azurerm_storage_data_lake_gen2_filesystemace Terraform 资源的属性在容器上设置 ACL,然后使用azurerm_storage_data_lake_gen2_path Terraform 资源在文件夹上设置 ACL 。
下面是一个示例,其中我将 Azure Active Directory 的 object_id 存储在名为 aad_group_object_id 的变量中。
# create the data lake
resource "azurerm_storage_account" "data_lake" {
....
}
# create a container named "acltest" with execute ACL for the group
resource "azurerm_storage_data_lake_gen2_filesystem" "data_lake_acl_test" {
name = "acltest"
storage_account_id = azurerm_storage_account.data_lake.id
ace {
type = "group"
scope = "access"
id = var.aad_group_object_id
permissions = "--x"
}
}
# create the folder "raw" and give read and execute access and default permissions to group
resource "azurerm_storage_data_lake_gen2_path" "folder_raw" {
path = "raw"
filesystem_name = azurerm_storage_data_lake_gen2_filesystem.data_lake_acl_test.name
storage_account_id = azurerm_storage_account.data_lake.id
resource = "directory"
ace {
type = "group"
scope = "access"
id = var.aad_group_object_id
permissions = "r-x"
}
ace {
type = "group"
scope = "default"
id = var.aad_group_object_id
permissions = "r-x"
}
}
Run Code Online (Sandbox Code Playgroud)
我没有将其包含在代码示例中,但您还必须添加所属组、所有者、掩码以及添加到根容器和子文件夹的其他身份的 ACL。否则,您会在 Terraform 计划中不断看到它每次都尝试删除并重新创建它们。
您可以直接添加它 - 不幸的是,您需要将其添加到您创建的每个文件夹中,除非有人知道解决此问题的方法。
ace {
permissions = "---"
scope = "access"
type = "other"
}
ace {
permissions = "r-x"
scope = "access"
type = "group"
}
ace {
permissions = "r-x"
scope = "access"
type = "mask"
}
ace {
permissions = "rwx"
scope = "access"
type = "user"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |