通过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
相关产品推荐
相关产品推荐

