Sdílet prostřednictvím


Obměna certifikátu spravované instance SQL povolené službou Azure Arc (nepřímo připojené)

Tento článek popisuje, jak pomocí Rozhraní příkazového řádku nebo kubectl příkazů Azure Arc otočit uživatelský certifikát TLS (Transport Layer Security) pro službu SQL Managed Instance povolenou službou Azure Arc v nepřímo připojeném režimu.

Příklady v tomto článku používají OpenSSL. OpenSSL je opensourcová sada nástrojů příkazového řádku pro kryptografii pro obecné účely a zabezpečenou komunikaci.

Požadavek

Generování žádosti o certifikát pomocí openssl

Pokud spravovaná instance používá certifikát podepsaný svým držitelem, přidejte všechny potřebné alternativní názvy subjektu (SAN). Síť SAN je rozšíření X.509, které umožňuje přidružit různé hodnoty k certifikátu zabezpečení pomocí subjectAltName pole, pole SAN umožňuje zadat další názvy hostitelů (lokality, IP adresy, běžné názvy atd.), které mají být chráněny jedním certifikátem SSL, například vícedoménovým certifikátem SAN nebo rozšířeným ověřovacím vícedoménovým certifikátem SSL.

Pokud chcete certifikát vygenerovat sami, musíte vytvořit žádost o podepsání certifikátu (CSR). Ověřte, že konfigurace certifikátu má běžný název s požadovanými sítěmi SAN a má vystavitele certifikační autority. Příklad:

openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr

Spuštěním následujícího příkazu zkontrolujte požadované sítě SAN:

openssl x509 -in /<cert path>/<filename>.pem -text

Následující příklad ukazuje tento příkaz:

openssl x509 -in ./mssql-certificate.pem -text

Příkaz vrátí následující výstup:

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-----

Příklad výstupu:

X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc

Vytvoření specifikace yaml tajného kódu Kubernetes pro certifikát služby

  1. Zakódujte soubor pomocí následujícího příkazu s base64 v libovolné linuxové distribuci, data se kódují a dekódují, aby bylo přenos a ukládání dat jednodušší.

    base64 /<path>/<file> > cert.txt 
    

    Pro uživatele systému Windows použijte nástroj certutil k provedení kódování a dekódování Base64 jako následující příkaz:

    $certutil -encode -f input.txt b64-encoded.txt
    

    Záhlaví ve výstupním souboru odeberte ručně nebo použijte následující příkaz:

    $findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt 
    
  2. Přidejte do souboru specifikace yaml kódovaný certifikát base64 a privátní klíč, abyste vytvořili tajný kód Kubernetes:

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secretName>
    type: Opaque
    data:
      certificate.pem: < base64 encoded certificate >
      privatekey.pem: < base64 encoded private key >
    

Obměně certifikátu prostřednictvím Azure CLI

Pomocí následujícího příkazu zadejte tajný klíč Kubernetes, který jste vytvořili dříve, abyste mohli certifikát otočit:

az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>

Příklad:

az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret

Pomocí následujícího příkazu otočte certifikát pomocí veřejného a privátního klíče certifikátu ve formátu PEM. Příkaz vygeneruje výchozí název certifikátu služby.

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>

Příklad:

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

Pro parametr můžete také zadat název --service-cert-secret tajného kódu certifikátu služby Kubernetes. V tomto případě se považuje za aktualizovaný název tajného kódu. Příkaz zkontroluje, jestli tajný klíč existuje. Pokud ne, příkaz vytvoří název tajného kódu a pak ho otočí ve spravované instanci.

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>

Příklad:

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

Otočení certifikátu pomocí kubectl příkazu

Jakmile vytvoříte tajný klíč Kubernetes, můžete ho svázat s oddílem definice security yaml spravované instance SQL, kde serviceCertificateSecret se nachází takto:

  security:
    adminLoginSecret: <your-admin-login-secret>
    serviceCertificateSecret: <your-cert-secret>

Následující .yaml soubor je příkladem obměny certifikátu služby v instanci SQL s názvem mysqlmi, aktualizujte specifikaci tajným kódem Kubernetes s názvem 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

K použití tohoto nastavení můžete použít následující příkaz kubectl:

   kubectl apply -f <my-sql-mi-yaml-file>