Certificaat sql Managed Instance roteren dat is ingeschakeld door Azure Arc (indirect verbonden)
In dit artikel wordt beschreven hoe u het door de gebruiker verstrekte TLS-certificaat (Transport Layer Security) roteert voor SQL Managed Instance die is ingeschakeld door Azure Arc in indirect verbonden modus met behulp van Azure CLI of kubectl
opdrachten.
Voorbeelden in dit artikel maken gebruik van OpenSSL. OpenSSL is een opensource-opdrachtregeltoolkit voor cryptografie en veilige communicatie voor algemeen gebruik.
Vereiste
- Het hulpprogramma openssl installeren
- een met SQL beheerd exemplaar dat is ingeschakeld door Azure Arc in indirect verbonden modus
Certificaataanvraag genereren met behulp van openssl
Als het beheerde exemplaar gebruikmaakt van een zelfondertekend certificaat, voegt u alle benodigde alternatieve onderwerpnamen (SAN's) toe. Het SAN is een extensie voor X.509 waarmee verschillende waarden kunnen worden gekoppeld aan een beveiligingscertificaat met behulp van een subjectAltName
veld. In het SAN-veld kunt u aanvullende hostnamen (sites, IP-adressen, algemene namen en enzovoort) opgeven die worden beveiligd door één SSL-certificaat, zoals een SAN met meerdere domeinen of een uitgebreid SSL-certificaat voor meerdere domeinen.
Als u een certificaat zelf wilt genereren, moet u een aanvraag voor certificaatondertekening (CSR) maken. Controleer of de configuratie voor het certificaat een algemene naam heeft met vereiste SAN's en of er een CA-verlener is. Voorbeeld:
openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr
Voer de volgende opdracht uit om de vereiste SAN's te controleren:
openssl x509 -in /<cert path>/<filename>.pem -text
In het volgende voorbeeld ziet u deze opdracht:
openssl x509 -in ./mssql-certificate.pem -text
De opdracht retourneert de volgende uitvoer:
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-----
Voorbeelduitvoer:
X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc
Yaml-specificatie voor kubernetes-geheim maken voor uw servicecertificaat
Codeer een bestand met behulp van de volgende opdracht met base64 in elke Linux-distributie, gegevens worden gecodeerd en gedecodeerd om de gegevensoverdracht en het opslagproces eenvoudiger te maken.
base64 /<path>/<file> > cert.txt
Voor Windows-gebruikers gebruikt u het hulpprogramma certutil om Base64-codering en -decodering uit te voeren als de volgende opdracht:
$certutil -encode -f input.txt b64-encoded.txt
Verwijder de header handmatig in het uitvoerbestand of gebruik de volgende opdracht:
$findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt
Voeg het met Base64 gecodeerde certificaat en de persoonlijke sleutel toe aan het yaml-specificatiebestand om een Kubernetes-geheim te maken:
apiVersion: v1 kind: Secret metadata: name: <secretName> type: Opaque data: certificate.pem: < base64 encoded certificate > privatekey.pem: < base64 encoded private key >
Certificaat roteren via Azure CLI
Gebruik de volgende opdracht door Kubernetes-geheim op te geven dat u eerder hebt gemaakt om het certificaat te roteren:
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>
Voorbeeld:
az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret
Gebruik de volgende opdracht om het certificaat te roteren met de openbare en persoonlijke sleutels van het PEM-indelingscertificaat. Met de opdracht wordt een standaardservicecertificaatnaam gegenereerd.
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>
Voorbeeld:
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
U kunt ook een geheime naam voor het Certificaatcertificaat van de Kubernetes-service opgeven voor --service-cert-secret
de parameter. In dit geval wordt deze gebruikt als een bijgewerkte geheime naam. Met de opdracht wordt gecontroleerd of het geheim bestaat. Als dat niet het geval is, maakt de opdracht een geheime naam en draait het geheim vervolgens in het beheerde exemplaar.
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>
Voorbeeld:
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
Het certificaat draaien met kubectl
de opdracht
Nadat u het Kubernetes-geheim hebt gemaakt, kunt u het verbinden met de yaml-definitiesectie security
van SQL Managed Instance, die serviceCertificateSecret
zich als volgt bevindt:
security:
adminLoginSecret: <your-admin-login-secret>
serviceCertificateSecret: <your-cert-secret>
Het volgende .yaml
bestand is een voorbeeld van het roteren van het servicecertificaat in het SQL-exemplaar met de naam mysqlmi
, de specificatie bijwerken met een Kubernetes-geheim met de naam 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
U kunt de volgende kubectl-opdracht gebruiken om deze instelling toe te passen:
kubectl apply -f <my-sql-mi-yaml-file>