自定义Azure策略定义:如何使Azure SQL数据库的备份保留期得到遵守

959 阅读6分钟

本文使用Azure策略来检查Azure SQL数据库与备份保留期的一致性。

简介

Azure SQL数据库提供基于DTU和vCores的定价模式。这些服务层级主要取决于业务连续性、存储和性能要求。在管理数据库服务中,Azure会自动管理数据库备份,以便在时间点上进行恢复。这些数据库备份根据其服务层级有不同的最大保留期。

  • 基本服务层:7天

  • 标准和高级服务层:35天

  • :Azure SQL数据库的所有服务层的默认备份保留期为7天

例如,在我的实验室环境中,Azure数据库是在标准S0定价层。它被配置为默认的备份保留。要验证配置的备份保留,请进入Azure服务器配置,点击备份。

如下图所示,PITR(Point-In-Time-Recovery)是7天的。

Azure SQL DB PITR

要修改这个配置,选择数据库和配置的策略。你可以移动滑块,将PITR值增加到35天。同样,如果你不想为环境(如开发数据库)恢复备份,你可以将PITR减少到最少1天。

PITR configuration up to 35 days

假设你有一个大型的Azure数据库基础设施。你也给了特定用户数据库部署的权限。作为一个数据库管理员,你要求PITR值应该是35天,而不是默认的7天期限。

本文指导你创建一个自定义策略,实施它,并补救问题,使数据库完全符合业务规则或配置。

要配置自定义策略定义,请在Azure门户中搜索策略,并导航到定义。

Search Azure Policy definition

点击策略定义来定义一个自定义策略。在新的策略定义中,输入以下细节。

  • 定义位置: 在定义位置中,点击eclipse并选择Azure订阅。
  • 名称: 输入自定义策略定义的显示名称
  • 说明: 这是一个可选字段。你可以用这个字段来描述策略定义和要求
  • 类别: 这是Azure策略的类别,可以帮助你将策略分组。例如,你可以在SQL类别中找到属于Azure SQL数据库的所有相关策略。你可以选择创建一个新类别或现有类别。

Policy definition configuration

  • 政策规则:在政策规则中,我们定义了JSON政策文件来评估Azure资源。

在本文中,我们使用下面的JSON脚本。你可以注意到在这个策略脚本中,指定的保留期是35天。假设你想配置一个默认备份保留期为7天的策略,请将该值从35天修改为7天。

{
    “properties”: {
      “displayName”: “Azure PITR configration for 35 days”,
      “policyType”: “Custom”,
      “mode”: “Indexed”,
      “description”: “This policy checks Azure SQL Databases for 35 days backup retention period. “,
      “metadata”: {
        “version”: “1.1.0”,
        “category”: “SQL”,
        “createdBy”: “5623789b-3072-41a7-8b9b-74d388241482”,
        “createdOn”: “2021-05-19T11:57:08.9261396Z”,
        “updatedBy”: null,
        “updatedOn”: null
      },
      “parameters”: {
        “effect”: {
          “type”: “String”,
          “metadata”: {
            “displayName”: “Effect”,
            “description”: “Enable or disable the execution of the policy.”
          },
          “allowedValues”: [
            “DeployIfNotExists”,
            “Disabled”
          ],
          “defaultValue”: “DeployIfNotExists”
        },
        “retentionDays”: {
          “type”: “String”,
          “metadata”: {
            “displayName”: “Retention Days”,
            “description”: “Set the number of Backup Retention Days.”
          },
          “defaultValue”: “35”
        }
      },
      “policyRule”: {
        “if”: {
          “field”: “type”,
          “equals”: “Microsoft.Sql/servers/databases”
        },
        “then”: {
          “effect”: “[parameters(‘effect’)]”,
          “details”: {
            “type”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies”,
            “name”: “default”,
            “roleDefinitionIds”: [
              “/providers/Microsoft.Authorization/roleDefinitions/9b7fa17d-e63e-47b0-bb0a-15c516ac86ec”
            ],
            “existenceCondition”: {
              “field”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies/retentionDays”,
              “equals”: “[parameters(‘retentionDays’)]”
            },
            “deployment”: {
              “properties”: {
                “mode”: “incremental”,
                “template”: {
                  “$schema”: “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#”,
                  “contentVersion”: “1.0.0.0”,
                  “parameters”: {
                    “serverName”: {
                      “type”: “string”
                    },
                    “shortTermRetention”: {
                      “type”: “string”
                    }
                  },
                  “resources”: [
                    {
                      “name”: “[concat(parameters(‘serverName’),’/default’)]”,
                      “type”: “Microsoft.Sql/servers/databases/backupShortTermRetentionPolicies”,
                      “apiVersion”: “2017-10-01-preview”,
                      “properties”: {
                        “retentionDays”: “[parameters(‘shortTermRetention’)]”
                      }
                    }
                  ]
                },
                “parameters”: {
                  “serverName”: {
                    “value”: “[field(‘fullname’)]”
                  },
                  “shortTermRetention”: {
                    “value”: “[parameters(‘retentionDays’)]”
                  }
                }
              }
            }
          }
        }
      }
    },
    “id”: “/subscriptions/c6eb5552-7748-4d57-82bb-4c52c1c8f87e/providers/Microsoft.Authorization/policyDefinitions/f5d5c854-5a1c-4521-ab9d-ec2d82ccbc1d”,
    “type”: “Microsoft.Authorization/policyDefinitions”,
    “name”: “f5d5c854-5a1c-4521-ab9d-ec2d82ccbc1d”
  }

Policy JSON document

保存策略定义,它有以下属性。

  • 政策名称:Azure PITR配置为35天
  • 政策类型:自定义
  • 定义类型:政策:政策
  • 类别:SQL

View newly created policy

为Azure SQL数据库指定Azure自定义策略

在上一节中,我们为Azure SQL数据库实现了35天的验证PITR配置的Azure策略。实施后,我们需要将此策略分配给Azure资源,以检查其合规性。

在Azure策略仪表板上,点击分配策略

Assign Azure custom policy for Azure SQL Database

分配策略页面上,在基本页面上输入以下信息。

  • 范围:选择Azure订阅

  • 排除:如果你想从策略分配中排除任何资源,你可以选择这些资源。 假设你有一个Azure SQL数据库,由于特殊原因需要7天的PITR。因此,排除该资源,这样你就能符合其余Azure数据库的要求了

  • 政策定义:在这个策略定义中,我们使用之前定义的自定义策略。你可以选择自定义类型来快速查找政策

    Available definitions

  • 政策执行:已启用

  • 指派者:你可以输入政策受让人或所有者名称

    Policy enforcements

  • 参数: 参数页定义了政策效果和保留天数。这里,我们指定35天作为保留期

    Effect and Retention days

  • 补救:Azure补救任务可以更新Azure资源以符合部署的策略。例如,如果Azure SQL数据库没有35天的保留期,补救任务就会修改数据库配置以符合规定。点击 - 创建一个补救任务

    Create a remediation task

  • 它根据策略中的角色定义,使用SQL DB贡献者角色。该角色负责管理Azure SQL Databases

    • 注意:SQL DB角色不能修改SQL服务器(实例)级别的配置。

    SQL DB contributor role

  • 不符合规定的消息。输入用户在政策结果为不符合规定时得到的信息。

    Non-Compliant message

在最后一节,仔细审查所有的策略分配。

review policy assignment

单击 "创建"。在对Azure SQL数据库进行策略分配时,你会在通知区得到以下消息。

Notifications

检查Azure PITR配置的政策合规性

要检查Azure PITR配置的政策合规性,请导航到Azure政策仪表板。如下图所示,我的实验室环境数据库是不符合规定的。

Check Policy compliance for Azure PITR configuration

点击政策名称,就会得到详细的信息,如资源名称、范围、父资源、合规状态和不合规信息。

Check Non-compliant message

在策略分配过程中,我们也配置了补救任务。补救任务需要几分钟时间来进行配置修改。如下图所示,它的状态是评估中

Remediation task status - Evaluating

评估结束后,状态变为正在进行

Remediation task status - In Progress

打开补救任务的属性以获得细节。如下图所示,Azure SQL数据库的策略修复是成功的。但是,对于主数据库来说,它是失败的。

Check status for each Azure DB

点击主数据库的部署ID,了解失败原因。如下图所示,修改功能对选定的(主)数据库不可用,因为你不能对Azure数据库进行修改。

Deployment status

你可以验证Azure数据库的备份PITR值。如下图所示,它被修改为35天。

Validate Azure PITR value

在Azure策略仪表板中,修复任务成功后,该策略显示为符合要求

Policy status changes to compliant

点击Azure策略,检查各个资源的合规性。如果你有多个Azure数据库,你可以检查单个资源的状态。

Policy compliance details

总结

本文探讨了用于验证Azure SQL数据库的PITR配置的自定义Azure策略。你可以用它来检查Azure数据库与政策配置的一致性状态。你也可以配置补救任务来改变Azure数据库的配置,并将它们的状态从不符合要求改为符合要求。它还可以确保你有足够的PITR配置,保护你免受意外的数据损失或问题。