Смена Управляемый экземпляр SQL сертификата, включенного Azure Arc (косвенно подключено)
В этой статье описывается, как повернуть предоставленный пользователем сертификат tls для Управляемый экземпляр SQL включенного Azure Arc в косвенно подключенном режиме с помощью Azure CLI или kubectl
команд.
Примеры в этой статье используют OpenSSL. OpenSSL — это набор средств командной строки с открытым кодом для шифрования общего назначения и безопасного взаимодействия.
Предварительные требования
- Установка служебной программы opensl
- Управляемый экземпляр SQL, включенная Azure Arc в косвенно подключенном режиме
Создание запроса сертификата с помощью openssl
Если управляемый экземпляр использует самозаверяющий сертификат, добавьте все необходимые альтернативные имена субъектов (SAN). SAN — это расширение X.509, позволяющее связать различные значения с сертификатом безопасности с помощью subjectAltName
поля, поле SAN позволяет указать дополнительные имена узлов (сайты, IP-адреса, общие имена и т. д.) для защиты с помощью одного SSL-сертификата, например многодоменного СЕРТИФИКАТА SAN или расширенной проверки ssl-сертификата с несколькими доменами.
Чтобы создать сертификат самостоятельно, необходимо создать запрос на подпись сертификата (CSR). Убедитесь, что конфигурация сертификата имеет общее имя с необходимыми именами SAN и имеет издателя ЦС. Например:
openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr
Выполните следующую команду, чтобы проверить необходимые сети SAN:
openssl x509 -in /<cert path>/<filename>.pem -text
Следующий пример демонстрирует использование этой команды.
openssl x509 -in ./mssql-certificate.pem -text
Команда возвращает следующие выходные данные:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 7686530591430793847 (0x6aac0ad91167da77)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = Cluster Certificate Authority
Validity
Not Before: Mmm dd hh:mm:ss yyyy GMT
Not After: Mmm dd hh:mm:ss yyyy GMT
Subject: CN = mi4-svc
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:ad:7e:16:3e:7d:b3:1e: ...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Extended Key Usage: critical
TLS Web Client Authentication, TLS Web Server Authentication
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Subject Alternative Name:
DNS:mi4-svc, DNS:mi4-svc.test.svc.cluster.local, DNS:mi4-svc.test.svc
Signature Algorithm: sha256WithRSAEncryption
7a:f8:a1:25:5c:1d:e2:b4: ...
-----BEGIN CERTIFICATE-----
MIIDNjCCAh6gAwIB ...==
-----END CERTIFICATE-----
Пример результата:
X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc
Создание спецификации yaml секрета Kubernetes для сертификата службы
Кодируйте файл с помощью следующей команды с помощью base64 в любом дистрибутиве Linux, данные кодируются и декодируются, чтобы упростить передачу данных и процесс хранения.
base64 /<path>/<file> > cert.txt
Для пользователей Windows используйте служебную программу certutil для кодирования и декодирования Base64 в качестве следующей команды:
$certutil -encode -f input.txt b64-encoded.txt
Удалите заголовок в выходном файле вручную или выполните следующую команду:
$findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt
Добавьте сертификат в кодировку Base64 и закрытый ключ в файл спецификации yaml, чтобы создать секрет Kubernetes:
apiVersion: v1 kind: Secret metadata: name: <secretName> type: Opaque data: certificate.pem: < base64 encoded certificate > privatekey.pem: < base64 encoded private key >
Смена сертификата с помощью Azure CLI
Используйте следующую команду, предоставив секрет Kubernetes, созданный ранее для смены сертификата:
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>
Например:
az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret
Используйте следующую команду, чтобы повернуть сертификат с помощью открытых и закрытых ключей сертификата PEM. Команда создает имя сертификата службы по умолчанию.
az sql mi-arc update -n <managed instance name> --k8s-namespace arc --use-k8s --cert-public-key-file <path-to-my-cert-public-key> --cert-private-key-file <path-to-my-cert-private-key> --k8s-namespace <your-k8s-namespace>
Например:
az sql mi-arc update -n mysqlmi --k8s-namespace arc --use-k8s --cert-public-key-file ./mi1-1-cert --cert-private-key-file ./mi1-1-pvt
Вы также можете указать имя секрета секрета сертификата службы Kubernetes для --service-cert-secret
параметра. В этом случае оно принимается в качестве обновленного имени секрета. Команда проверяет, существует ли секрет. Если нет, команда создает имя секрета, а затем поворачивает секрет в управляемом экземпляре.
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --cert-public-key-file <path-to-my-cert-public-key> --cert-private-key-file <path-to-my-cert-private-key> --service-cert-secret <path-to-mymi-cert-secret>
Например:
az sql mi-arc update -n mysqlmi --k8s-namespace arc --use-k8s --cert-public-key-file ./mi1-1-cert --cert-private-key-file ./mi1-1-pvt --service-cert-secret mi1-12-1-cert-secret
Смена сертификата с помощью kubectl
команды
После создания секрета Kubernetes его можно привязать к разделу определения security
yaml Управляемый экземпляр SQL, где serviceCertificateSecret
расположено следующим образом:
security:
adminLoginSecret: <your-admin-login-secret>
serviceCertificateSecret: <your-cert-secret>
Следующий .yaml
файл является примером для смены сертификата службы в экземпляре mysqlmi
SQL, обновите спецификацию с помощью секрета Kubernetes с именем my-service-cert
:
apiVersion: sql.arcdata.microsoft.com/v1
kind: sqlmanagedinstance
metadata:
name: mysqlmi
namespace: my-arc-namespace
spec:
spec:
dev: false
licenseType: LicenseIncluded
replicas: 1
security:
adminLoginSecret: mysqlmi-admin-login-secret
# Update the serviceCertificateSecret with name of the K8s secret
serviceCertificateSecret: my-service-cert
services:
primary:
type: NodePort
storage:
data:
volumes:
- size: 5Gi
logs:
volumes:
- size: 5Gi
tier: GeneralPurpose
Для применения этого параметра можно использовать следующую команду kubectl:
kubectl apply -f <my-sql-mi-yaml-file>