Obracanie certyfikatu usługi SQL Managed Instance włączonej przez usługę Azure Arc (pośrednio połączone)
W tym artykule opisano sposób rotacji udostępnionego przez użytkownika certyfikatu protokołu Transport Layer Security (TLS) dla wystąpienia zarządzanego SQL włączonego przez usługę Azure Arc w trybie pośrednio połączonym przy użyciu interfejsu wiersza polecenia platformy Azure lub kubectl
poleceń.
Przykłady w tym artykule używają protokołu OpenSSL. OpenSSL to zestaw narzędzi wiersza polecenia typu open source do kryptografii ogólnego przeznaczenia i bezpiecznej komunikacji.
Warunek wstępny
- Instalowanie narzędzia openssl
- wystąpienie zarządzane SQL włączone przez usługę Azure Arc w trybie pośrednio połączonym
Generowanie żądania certyfikatu przy użyciu polecenia openssl
Jeśli wystąpienie zarządzane używa certyfikatu z podpisem własnym, dodaj wszystkie wymagane alternatywne nazwy podmiotów (SAN). Sieć SAN to rozszerzenie X.509, które umożliwia skojarzenie różnych wartości z certyfikatem zabezpieczeń przy użyciu subjectAltName
pola, pole SIECI SAN umożliwia określenie dodatkowych nazw hostów (lokacji, adresów IP, nazw wspólnych i itp.) chronionych przez pojedynczy certyfikat SSL, taki jak wielodomenowa sieć SAN lub rozszerzony certyfikat SSL z obsługą walidacji wielodomenowej.
Aby samodzielnie wygenerować certyfikat, należy utworzyć żądanie podpisania certyfikatu (CSR). Sprawdź, czy konfiguracja certyfikatu ma nazwę pospolitą z wymaganymi sieciami SAN i ma wystawcę urzędu certyfikacji. Na przykład:
openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr
Uruchom następujące polecenie, aby sprawdzić wymagane sieci SAN:
openssl x509 -in /<cert path>/<filename>.pem -text
W poniższym przykładzie pokazano to polecenie:
openssl x509 -in ./mssql-certificate.pem -text
Polecenie zwraca następujące dane wyjściowe:
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-----
Przykładowe wyjście:
X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc
Tworzenie specyfikacji yaml wpisu tajnego kubernetes dla certyfikatu usługi
Zakoduj plik przy użyciu następującego polecenia z bazą64 w dowolnej dystrybucji systemu Linux, dane są kodowane i dekodowane, aby ułatwić przesyłanie i przechowywanie danych.
base64 /<path>/<file> > cert.txt
W przypadku użytkowników systemu Windows użyj narzędzia certutil , aby wykonać kodowanie i dekodowanie Base64 jako następujące polecenie:
$certutil -encode -f input.txt b64-encoded.txt
Usuń nagłówek w pliku wyjściowym ręcznie lub użyj następującego polecenia:
$findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt
Dodaj certyfikat zakodowany w formacie base64 i klucz prywatny do pliku specyfikacji yaml, aby utworzyć wpis tajny kubernetes:
apiVersion: v1 kind: Secret metadata: name: <secretName> type: Opaque data: certificate.pem: < base64 encoded certificate > privatekey.pem: < base64 encoded private key >
Rotacja certyfikatu za pośrednictwem interfejsu wiersza polecenia platformy Azure
Użyj następującego polecenia, podając wpis tajny Kubernetes utworzony wcześniej w celu rotacji certyfikatu:
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>
Na przykład:
az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret
Użyj następującego polecenia, aby obrócić certyfikat przy użyciu klucza publicznego i prywatnego certyfikatu w formacie PEM. Polecenie generuje domyślną nazwę certyfikatu usługi.
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>
Na przykład:
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
Możesz również podać nazwę wpisu tajnego certyfikatu usługi Kubernetes dla parametru --service-cert-secret
. W tym przypadku jest ona traktowana jako zaktualizowana nazwa wpisu tajnego. Polecenie sprawdza, czy wpis tajny istnieje. Jeśli nie, polecenie tworzy nazwę wpisu tajnego, a następnie obraca wpis tajny w wystąpieniu zarządzanym.
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>
Na przykład:
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
Obracanie certyfikatu za pomocą kubectl
polecenia
Po utworzeniu wpisu tajnego platformy Kubernetes możesz powiązać go z sekcją definicji security
yaml wystąpienia zarządzanego SQL, w której serviceCertificateSecret
znajduje się następująca lokalizacja:
security:
adminLoginSecret: <your-admin-login-secret>
serviceCertificateSecret: <your-cert-secret>
Poniższy .yaml
plik to przykład rotacji certyfikatu usługi w wystąpieniu SQL o nazwie , zaktualizowanie specyfikacji przy użyciu wpisu tajnego Kubernetes o nazwie mysqlmi
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
Aby zastosować to ustawienie, możesz użyć następującego polecenia kubectl:
kubectl apply -f <my-sql-mi-yaml-file>