如何通过Terraform实现Azure AD应用服务主体密码的自动轮换
关于Terraform AzureAD服务主体密码轮换的问题解答
问题1:添加rotate_when_changed属性后,是否会按照设置的时间周期自动创建新的密码资源?
- 不会自动触发,必须手动或通过CI/CD流水线执行
terraform apply操作才会触发轮换逻辑 - 原理说明:
time_rotating资源会在每次执行Terraform命令时校验当前时间是否超过你设置的5年轮换周期,只有当时间到期且执行了apply操作时,time_rotating的id才会更新,进而触发密码资源重建 - 你配置的
create_before_destroy生命周期规则可以保证轮换时先创建新密码、再销毁旧密码,不会出现服务无可用密码的空档期
问题2:该轮换特性是Terraform独有的能力还是Azure AD原生提供的?
- 这是Terraform AzureAD Provider独有的实现能力,Azure AD本身没有提供服务主体密码的原生定时轮换功能
问题3:Terraform的轮换逻辑实现原理
整个流程完全基于Terraform的声明式资源管理逻辑和AzureAD Provider的自定义规则实现,没有依赖Azure AD的原生轮换能力,步骤如下:
rotate_when_changed是AzureAD Provider为密码类资源专门设计的触发参数,只要该参数传入的任意值和Terraform状态文件中存储的历史值不一致,Provider就会标记当前密码资源需要重建- 你搭配使用的
time_rotating是Terraform官方时间Provider的资源,它会记录自身创建时间,每次执行terraform plan或apply时都会校验当前时间是否超过设置的轮换周期,到期后会自动触发time_rotating资源自身的重建,生成新的id - 当
time_rotating.test.id发生变化时,azuread_service_principal_password的rotate_when_changed值同步变更,Provider就会按生命周期规则执行轮换:先调用Azure AD Graph API创建新的服务主体密码,将新密码写入Terraform状态,再调用API删除旧的密码资源,完成整个轮换流程
注意:轮换生成的新密码不会自动同步到你的业务系统或密钥管理工具,你需要额外配置逻辑将新密码同步到对应使用方,避免业务用旧密码访问失败
内容的提问来源于stack exchange,提问作者uvindu sri
相关产品推荐
相关产品推荐

