Rotera certifikatet SQL Managed Instance aktiverat av Azure Arc (indirekt ansluten)
Den här artikeln beskriver hur du roterar användartilldefinierat TLS-certifikat (Transport Layer Security) för SQL Managed Instance som aktiveras av Azure Arc i indirekt anslutet läge med hjälp av Azure CLI eller kubectl
kommandon.
Exempel i den här artikeln använder OpenSSL. OpenSSL är ett kommandoradsverktyg med öppen källkod för allmän kryptografi och säker kommunikation.
Förutsättningar
- Installera openssl-verktyget
- en SQL Managed Instance som aktiveras av Azure Arc i indirekt anslutet läge
Generera certifikatbegäran med hjälp av openssl
Om den hanterade instansen använder ett självsignerat certifikat lägger du till alla nödvändiga alternativa ämnesnamn (SAN). SAN är ett tillägg till X.509 som gör att olika värden kan associeras med ett säkerhetscertifikat med hjälp av ett subjectAltName
fält. Med SAN-fältet kan du ange ytterligare värdnamn (webbplatser, IP-adresser, vanliga namn och så vidare) som ska skyddas av ett enda SSL-certifikat, till exempel ett SAN-certifikat med flera domäner eller utökad validering av SSL-certifikat med flera domäner.
För att generera certifikat på egen hand måste du skapa en certifikatsigneringsbegäran (CSR). Kontrollera att konfigurationen för certifikatet har ett gemensamt namn med nödvändiga SAN och har en CA-utfärdare. Till exempel:
openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr
Kör följande kommando för att kontrollera de nödvändiga SAN:erna:
openssl x509 -in /<cert path>/<filename>.pem -text
Följande exempel visar det här kommandot:
openssl x509 -in ./mssql-certificate.pem -text
Kommandot returnerar följande utdata:
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-----
Exempel på utdata>
X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc
Skapa Kubernetes hemliga yaml-specifikation för tjänstcertifikatet
Koda en fil med följande kommando med base64 i en Linux-distribution, data kodas och avkodas för att göra dataöverföringen och lagringsprocessen enklare.
base64 /<path>/<file> > cert.txt
För Windows-användare använder du certutil-verktyget för att utföra Base64-kodning och avkodning som följande kommando:
$certutil -encode -f input.txt b64-encoded.txt
Ta bort huvudet i utdatafilen manuellt eller använd följande kommando:
$findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt
Lägg till det base64-kodade certifikatet och den privata nyckeln i yaml-specifikationsfilen för att skapa en Kubernetes-hemlighet:
apiVersion: v1 kind: Secret metadata: name: <secretName> type: Opaque data: certificate.pem: < base64 encoded certificate > privatekey.pem: < base64 encoded private key >
Rotera certifikat via Azure CLI
Använd följande kommando genom att ange En Kubernetes-hemlighet som du skapade tidigare för att rotera certifikatet:
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>
Till exempel:
az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret
Använd följande kommando för att rotera certifikatet med pem-formaterade offentliga och privata nycklar. Kommandot genererar ett standardnamn för tjänstcertifikatet.
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>
Till exempel:
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
Du kan också ange ett hemligt namn för Kubernetes-tjänstens certifikat för --service-cert-secret
parametern. I det här fallet tas det som ett uppdaterat hemligt namn. Kommandot kontrollerar om hemligheten finns. Annars skapar kommandot ett hemligt namn och roterar sedan hemligheten i den hanterade instansen.
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>
Till exempel:
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
Rotera certifikatet med kubectl
kommandot
När du har skapat Kubernetes-hemligheten kan du binda den till yaml-definitionsavsnittet security
för SQL Managed Instance där serviceCertificateSecret
den finns på följande sätt:
security:
adminLoginSecret: <your-admin-login-secret>
serviceCertificateSecret: <your-cert-secret>
Följande .yaml
fil är ett exempel för att rotera tjänstcertifikatet i SQL-instansen med namnet mysqlmi
, uppdatera specifikationen med en Kubernetes-hemlighet med namnet 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
Du kan använda följande kubectl-kommando för att tillämpa den här inställningen:
kubectl apply -f <my-sql-mi-yaml-file>