인증서 Azure Arc 지원 SQL Managed Instance 회전(간접 연결)
이 문서에서는 Azure CLI 또는 kubectl
명령을 사용하여 간접 연결 모드에서 Azure Arc 지원 SQL Managed Instances에 대해 사용자가 제공한 TLS(전송 계층 보안) 인증서를 회전하는 방법을 설명합니다.
이 문서의 예제에서는 OpenSSL을 사용합니다. OpenSSL은 범용 암호화 및 보안 통신을 위한 오픈 소스 명령줄 도구 키트입니다.
전제 조건
- openssl 유틸리티 설치
- 간접 연결 모드의 Azure Arc 지원 SQL Managed Instance
openssl
을 사용하여 인증서 요청 생성
관리되는 인스턴스에서 자체 서명된 인증서를 사용하는 경우 필요한 모든 SAN(주체 대체 이름)을 추가합니다. SAN은 subjectAltName
필드를 사용해 다양한 값을 보안 인증서와 연결할 수 있는 X.509의 확장으로, SAN 필드를 사용하면 다중 도메인 SAN 또는 확장된 유효성 검사 다중 도메인 SSL 인증서와 같은 단일 SSL 인증서로 보호할 추가 호스트 이름(사이트, IP 주소, 일반 이름 등)을 지정할 수 있습니다.
인증서를 직접 생성하려면 CSR(인증서 서명 요청)를 만들어야 합니다. 인증서 구성에 필수 SAN이 포함된 일반 이름이 있고 CA 발급자가 있는지 확인합니다. 예시:
openssl req -newkey rsa:2048 -keyout your-private-key.key -out your-csr.csr
다음 명령을 실행하여 필수 SAN을 확인합니다.
openssl x509 -in /<cert path>/<filename>.pem -text
다음 예제에서는 이 명령을 보여 줍니다.
openssl x509 -in ./mssql-certificate.pem -text
이 명령은 다음 출력을 반환합니다.
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-----
예제 출력:
X509v3 Subject Alternative Name:
DNS:mi1-svc, DNS:mi1-svc.test.svc.cluster.local, DNS:mi1-svc.test.svc
서비스 인증서에 대한 Kubernetes 비밀 yaml 사양 만들기
Linux 배포에서 base64와 함께 다음 명령을 사용하여 파일을 인코딩하면 데이터가 인코딩, 디코딩되어 데이터 전송 및 저장 프로세스가 더 간편해집니다.
base64 /<path>/<file> > cert.txt
Windows 사용자의 경우 certutil 유틸리티를 사용하여 다음 명령으로 Base64 인코딩과 디코딩을 수행합니다.
$certutil -encode -f input.txt b64-encoded.txt
출력 파일에서 헤더를 수동으로 제거하거나, 다음 명령을 사용합니다.
$findstr /v CERTIFICATE b64-encoded.txt> updated-b64.txt
yaml 사양 파일에 base64로 인코딩된 인증서와 프라이빗 키를 추가하여 Kubernetes 비밀을 만듭니다.
apiVersion: v1 kind: Secret metadata: name: <secretName> type: Opaque data: certificate.pem: < base64 encoded certificate > privatekey.pem: < base64 encoded private key >
Azure CLI를 통해 인증서 회전
인증서를 회전하기 위해 이전에 만든 Kubernetes 비밀을 입력하여 다음 명령을 사용합니다.
az sql mi-arc update -n <managed instance name> --k8s-namespace <arc> --use-k8s --service-cert-secret <your-cert-secret>
예시:
az sql mi-arc update -n mysqlmi --k8s-namespace <arc> --use-k8s --service-cert-secret mymi-cert-secret
다음 명령을 사용하여 PEM 형식 인증서 퍼블릭/프라이빗 키로 인증서를 회전합니다. 이 명령은 기본 서비스 인증서 이름을 생성합니다.
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>
예시:
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
매개 변수에 Kubernetes 서비스 인증서 비밀 이름을 입력할 수도 있습니다. 이 경우 업데이트된 비밀 이름으로 표시됩니다. 이 명령은 비밀이 있는지 확인합니다. 비밀이 없으면 명령이 비밀 이름을 만든 다음 관리되는 인스턴스에서 비밀을 회전합니다.
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>
예시:
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
kubectl
명령을 사용하여 인증서 회전
Kubernetes 비밀을 만든 후에는 다음과 같이 serviceCertificateSecret
이 있는 SQL Managed Instance yaml 정의 security
섹션에 바인딩할 수 있습니다.
security:
adminLoginSecret: <your-admin-login-secret>
serviceCertificateSecret: <your-cert-secret>
다음 .yaml
파일은 mysqlmi
라는 SQL 인스턴스에서 서비스 인증서를 회전하고, my-service-cert
라는 Kubernetes 비밀로 사양을 업데이트하는 예제입니다.
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
다음 kubectl 명령을 사용하여 이 설정을 적용할 수 있습니다.
kubectl apply -f <my-sql-mi-yaml-file>