关于azurerm_storage_data_lake_gen2_filesystem模板的配置与权限问题
关于Azure Data Lake Gen2 Filesystem Terraform模板的疑问解答
1. id = lookup(item.value, "id", null) 中的用户/组ID来源
这里的id是Azure AD中用户、组或服务主体的对象ID,不是显示名称。获取方式如下:
- Azure门户:进入Azure AD的用户/组/企业应用页面,查看对应对象的「对象ID」
- Azure CLI命令:
- 用户:
az ad user show --id <用户邮箱> --query id -o tsv - 组:
az ad group show --group <组名称> --query id -o tsv - 服务主体:
az ad sp show --id <应用ID> --query id -o tsv
- 用户:
2. jsondecode(each.value.acl_access) 和 jsondecode(each.value.acl_default) 应传入的值
需要传入JSON格式字符串,内容是Data Lake Gen2的ACL规则列表,每条规则遵循[scope]:[type]:[id]:[permissions]格式:
scope:access(访问ACL)或default(默认ACL,仅目录生效)type:user/group/other/maskid:用户/组/服务主体的Azure AD对象ID(other类型留空)permissions:读(r)、写(w)、执行(x)的组合,比如rwx/rw-
示例(tfvars中可用多行字符串避免转义):
acl_access = <<EOF [ "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:rwx", "group:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:rw-" ] EOF
3. 对应的tfvars变量格式
假设模板使用映射类型变量,典型格式如下:
storage_data_lake_filesystems = { prod_filesystem = { name = "prod-datalake-fs" storage_account_id = "/subscriptions/xxx/resourceGroups/rg-prod/providers/Microsoft.Storage/storageAccounts/prodstorageacc" acl_access = <<EOF [ "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:rwx", "group:yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:rw-" ] EOF acl_default = <<EOF [ "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:rwx" ] EOF tags = { Environment = "Production" Owner = "DataTeam" } } }
若模板用列表类型变量,格式如下:
storage_data_lake_filesystems = [ { name = "dev-datalake-fs" storage_account_id = "/subscriptions/xxx/resourceGroups/rg-dev/providers/Microsoft.Storage/storageAccounts/devstorageacc" acl_access = <<EOF [ "user:zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz:rw-" ] EOF } ]
4. 模板是同时创建容器和ACL,还是仅创建ACL?
通过检查模板中的资源类型判断:
- 若包含
resource "azurerm_storage_data_lake_gen2_filesystem" "...":同时创建Filesystem(即容器)并配置ACL - 若仅包含
resource "azurerm_storage_data_lake_gen2_filesystem_acl" "...":仅对已存在的Filesystem配置ACL
额外问题:是否可以添加用户或组分配的托管身份并为其授权?
可以。托管身份本质是Azure AD中的服务主体,授权步骤如下:
- 获取托管身份的对象ID:
- 用户分配托管身份:
az identity show --name <身份名称> --resource-group <资源组> --query principalId -o tsv - 系统分配托管身份:在Azure门户对应资源的「身份」页面查看「对象ID」
- 用户分配托管身份:
- 将该对象ID加入ACL规则,例如:
["user:aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:rwx"]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

