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
- Instalace nástroje openssl
- Spravovaná instance SQL povolená službou Azure Arc v režimu nepřímo připojeného
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
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
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>