如何使用Terraform创建Azure应用注册与客户端密钥并集成Azuresafe
完整Terraform代码示例:创建带订阅只读权限的Azure应用注册与服务主体
1. 变量定义(variables.tf)
variable "azuread_app_display_name" { type = string description = Azure AD应用注册和服务主体的显示名称 } variable "azure_subscription_id" { type = string description = 要授予只读权限的Azure订阅ID } variable "client_secret_validity_days" { type = number description = 客户端密钥的有效天数 default = 365 }
2. 核心资源配置(main.tf)
# 创建Azure AD应用注册 resource "azuread_application" "app" { display_name = var.azuread_app_display_name } # 创建对应服务主体 resource "azuread_service_principal" "app" { application_id = azuread_application.app.application_id } # 创建服务主体客户端密钥(客户端密码) resource "azuread_service_principal_password" "app" { application_object_id = azuread_application.app.object_id end_date_relative = "${var.client_secret_validity_days}d" } # 为服务主体分配订阅级Reader(只读)角色 resource "azurerm_role_assignment" "app_subscription_reader" { scope = "/subscriptions/${var.azure_subscription_id}" role_definition_name = "Reader" principal_id = azuread_service_principal.app.object_id }
3. 输出配置(outputs.tf)
output "application_id" { description = "Azure AD应用注册的应用ID" value = azuread_application.app.application_id } output "client_secret" { description = "服务主体的客户端密钥(敏感信息)" value = azuread_service_principal_password.app.value sensitive = true } output "service_principal_object_id" { description = "服务主体的对象ID" value = azuread_service_principal.app.object_id }
关键说明
- 权限控制:通过
azurerm_role_assignment绑定订阅级Reader角色,实现服务主体对订阅资源的只读访问;若需更细粒度权限,可替换role_definition_name为内置或自定义角色。 - 密钥安全:通过
end_date_relative设置密钥有效期,降低长期有效密钥的安全风险;输出时标记为sensitive,避免明文泄露。 - 依赖关系:Terraform会自动处理资源间的依赖(如服务主体需等待应用注册创建完成),无需手动配置依赖项。
Azuresafe集成要点
将Terraform生成的服务主体凭据(应用ID、客户端密钥、租户ID)配置到Azuresafe中,确保该服务主体具备Azuresafe扫描所需的权限集合,可根据Azuresafe要求补充角色分配或API权限配置。
内容的提问来源于stack exchange,提问作者saravana raj
相关产品推荐
相关产品推荐

