Udostępnij za pośrednictwem


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

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

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