Delen via


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

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

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