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

通过Terraform配置Azure PIM所有者角色设置(含MFA、激活时长等)

用Terraform配置Azure PIM所有者角色的MFA、激活时长与通知

原代码存在的问题

  • 角色定义ID错误:所有者角色的固定ID是8e3af657-a8ff-443c-a75c-2fe8c4bcb635,原代码误用订阅ID作为role_definition_id,完全不符合要求。
  • 命令逻辑偏差:az ad sp mfa set是给服务主体全局启用MFA,并非配置PIM角色的激活MFA要求,需要用Azure CLI的PIM扩展命令来实现。
  • 语法错误:${azurerm_role_assignment.mfa_role_assignment.principal_id)多了一个右括号,会导致变量解析失败。
  • 核心配置缺失:完全没包含激活时长设置和激活通知的配置逻辑。

修正后的完整配置

以下配置通过local_exec调用Azure CLI的PIM命令,实现所有者角色的全部要求:

# 定义基础变量(可替换为实际值或使用变量文件)
variable "subscription_id" {
  type = string
  default = "<你的订阅ID>"
}

variable "principal_id" {
  type = string
  default = "<用户/服务主体的对象ID>"
}

variable "notification_recipient" {
  type = string
  default = "<接收通知的邮箱>"
}

# 创建PIM所有者角色资格
resource "azurerm_role_eligibility_schedule_request" "pim_subscription_owner" {
  scope              = "/subscriptions/${var.subscription_id}"
  role_definition_id = "/subscriptions/${var.subscription_id}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
  principal_id       = var.principal_id
  request_type       = "AdminAdd"
  schedule_info {
    start_date_time = timestamp()
    expiration {
      type = "NoExpiration" # 若需到期自动失效,可改为AfterDuration并添加duration_hours参数
    }
  }
}

# 配置PIM角色的激活规则与通知
resource "null_resource" "pim_role_settings" {
  depends_on = [azurerm_role_eligibility_schedule_request.pim_subscription_owner]

  provisioner "local_exec" {
    interpreter = ["bash", "-c"]
    command = <<EOT
      # 安装/升级PIM CLI扩展(首次运行必备)
      az extension add --name pim --upgrade

      # 获取角色定义的短ID,用于PIM命令
      ROLE_SHORT_ID=$(az role definition show --id ${azurerm_role_eligibility_schedule_request.pim_subscription_owner.role_definition_id} --query name -o tsv)

      # 设置激活规则:强制MFA,激活时长2小时
      az pim role setting update \
        --resource-type subscriptions \
        --resource ${var.subscription_id} \
        --role-definition-id $ROLE_SHORT_ID \
        --setting "ActivationMaximumDurationInHours=2" \
        --setting "MfaOnActivationRequired=true"

      # 开启激活通知:发送邮件到指定邮箱
      az pim notification update \
        --resource-type subscriptions \
        --resource ${var.subscription_id} \
        --role-definition-id $ROLE_SHORT_ID \
        --notification-type "Activation" \
        --recipients "${var.notification_recipient}" \
        --status Enabled
    EOT
  }
}

关键说明

  • 角色资格创建:使用Terraform原生的azurerm_role_eligibility_schedule_request资源创建PIM角色资格,这是官方支持的PIM资源类型。
  • PIM扩展依赖:必须安装pim扩展才能执行相关命令,配置中加入了安装逻辑确保环境可用。
  • 激活规则配置:通过az pim role setting update自定义激活时长(单位小时)和强制MFA要求。
  • 通知配置:用az pim notification update开启角色激活通知,指定收件邮箱即可。
  • 依赖控制:null_resource依赖于角色资格资源,确保先完成资格分配再配置规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:44:54