You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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/mask
  • id:用户/组/服务主体的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中的服务主体,授权步骤如下:

  1. 获取托管身份的对象ID:
    • 用户分配托管身份:az identity show --name <身份名称> --resource-group <资源组> --query principalId -o tsv
    • 系统分配托管身份:在Azure门户对应资源的「身份」页面查看「对象ID」
  2. 将该对象ID加入ACL规则,例如:
    ["user:aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:rwx"]
    

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:55:14