Включение прозрачного шифрования данных в Управляемый экземпляр SQL в Azure Arc (предварительная версия)

В этой статье описывается включение и отключение прозрачного шифрования данных (TDE) в неактивных Управляемый экземпляр SQL, включенных Azure Arc. В этой статье термин управляемый экземпляр относится к развертыванию Управляемый экземпляр SQL, включенной Azure Arc, и включение или отключение TDE будет применяться ко всем базам данных, работающим в управляемом экземпляре.

Дополнительные сведения о TDE см. в разделе " Прозрачное шифрование данных".

Включение функции TDE выполняет следующие действия.

  • Теперь все существующие базы данных будут автоматически зашифрованы.
  • Все только что созданные базы данных будут автоматически зашифрованы.

Примечание.

В отношении технологии (как предварительной версии функции), описанной в этой статье, действуют дополнительные условия использования предварительных версий Microsoft Azure.

Последние обновления доступны в заметках о выпуске.

Необходимые компоненты

Прежде чем продолжить работу с этой статьей, необходимо включить Управляемый экземпляр SQL созданным ресурсом Azure Arc и подключиться к нему.

Ограничения

Следующие ограничения применяются при включении автоматического TDE:

  • Поддерживается только уровень общего назначения.
  • Группы отработки отказа не поддерживаются.

Создание управляемого экземпляра с поддержкой TDE (Azure CLI)

В следующем примере создается Управляемый экземпляр SQL, включенная Azure Arc с одной реплика, включенной TDE:

az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s

Включение TDE в управляемом экземпляре

Если TDE включен в Управляемый экземпляр SQL с поддержкой Arc, служба данных автоматически выполняет следующие задачи:

  1. Добавляет главный ключ базы данных, управляемый службой master , в базу данных.
  2. Добавляет средство защиты сертификатов, управляемых службой.
  3. Добавляет связанные ключи шифрования базы данных (DEK) во всех базах данных в управляемом экземпляре.
  4. Включает шифрование для всех баз данных в управляемом экземпляре.

Вы можете задать Управляемый экземпляр SQL, включенную azure Arc TDE в одном из двух режимов:

  • Управляемые службой
  • управляемые пользователем

В управляемом службом режиме TDE требует, чтобы управляемый экземпляр использовал главный ключ базы данных, управляемый службой, а также сертификат сервера, управляемый службой. Эти учетные данные автоматически создаются при включении TDE, управляемого службой.

В управляемом клиентом режиме TDE использует главный ключ базы данных, управляемый службой, и использует ключи, предоставляемые для сертификата сервера. Чтобы настроить управляемый клиентом режим:

  1. Создание сертификата.
  2. Сохраните сертификат как секрет в том же пространстве имен Kubernetes, что и экземпляр.

Enable

В следующем разделе объясняется, как включить TDE в режиме, управляемом службой.

Чтобы включить TDE в управляемом режиме службы, выполните следующую команду:

az sql mi-arc update --tde-mode ServiceManaged

Отключение TDE в управляемом экземпляре

Если TDE отключен в Управляемый экземпляр SQL с поддержкой Arc, служба данных автоматически выполняет следующие задачи:

  1. Отключает шифрование для всех баз данных в управляемом экземпляре.
  2. Удаляет связанные пакеты DEK во всех базах данных в управляемом экземпляре.
  3. Удаляет средство защиты сертификатов, управляемых службой.
  4. Удаляет главный ключ базы данных, управляемый службой master , в базе данных.

Чтобы отключить TDE:

az sql mi-arc update --tde-mode Disabled

Резервное копирование учетных данных TDE

При резервном копировании учетных данных из управляемого экземпляра учетные данные хранятся в контейнере. Чтобы сохранить учетные данные в постоянном томе, укажите путь подключения в контейнере. Например, var/opt/mssql/data. В следующем примере создается резервная копия сертификата из управляемого экземпляра:

Примечание.

Выполнение команды kubectl cp из Windows может завершиться сбоем при использовании абсолютных путей Windows. Используйте относительные пути или команды, указанные ниже.

  1. Сохраните резервную копию сертификата из контейнера в /var/opt/mssql/data.

    USE master;
    GO
    
    BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    

    Пример:

    USE master;
    GO
    
    BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
    ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
    
  2. Копирование сертификата из контейнера в файловую систему.

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    Пример:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. Копирование закрытого ключа из контейнера в файловую систему.

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    Пример:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. Удаление сертификата и закрытого ключа из контейнера.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Пример:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Восстановление учетных данных TDE в управляемом экземпляре

Как описано выше, для восстановления учетных данных необходимо скопировать их в контейнер и затем выполнить соответствующий запрос T-SQL.

Примечание.

Выполнение команды kubectl cp из Windows может завершиться сбоем при использовании абсолютных путей Windows. Используйте относительные пути или команды, указанные ниже. Чтобы восстановить резервные копии базы данных, которые были приняты перед включением TDE, необходимо отключить TDE в Управляемый экземпляр SQL, восстановить резервную копию базы данных и снова включить TDE.

  1. Копирование сертификата из файловой системы в контейнер.

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    Пример:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. Копирование закрытого ключа из файловой системы в контейнер.

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    Пример:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. Создание сертификата с использованием путей к файлам из /var/opt/mssql/data.

    USE master;
    GO
    
    CREATE CERTIFICATE <certicate-name>
    FROM FILE = '<certificate-path>'
    WITH PRIVATE KEY ( FILE = '<private-key-path>',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    

    Пример:

    USE master;
    GO
    
    CREATE CERTIFICATE MyServerCertRestored
    FROM FILE = '/var/opt/mssql/data/servercert.crt'
    WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key',
        DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
    
  3. Удаление сертификата и закрытого ключа из контейнера.

    kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
    

    Пример:

    kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
    

Прозрачное шифрование данных