Dela via


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

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

  1. 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 
    
  2. 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>