Azure IoT Operations 내부 통신을 위한 인증서 관리
Azure IoT 작업 내의 모든 통신은 TLS를 사용하여 암호화됩니다. 시작하는 데 도움이 되도록 Azure IoT 작업은 TLS 서버 인증서에 대한 기본 루트 CA 및 발급자를 사용하여 배포됩니다. 개발 및 테스트 목적으로 기본 설정을 사용할 수 있습니다. 프로덕션 배포의 경우 자체 CA 발급자 및 엔터프라이즈 PKI 솔루션을 사용하는 것이 좋습니다.
TLS 서버 인증서에 대한 기본 자체 서명된 발급자 및 루트 CA 인증서
시작하는 데 도움이 되도록 Azure IoT Operations는 TLS 서버 인증서에 대한 기본 자체 서명된 발급자 및 루트 CA 인증서와 함께 배포됩니다. 개발 및 테스트에 이 발급자를 사용할 수 있습니다. Azure IoT Operations는 cert-manager를 사용하여 TLS 인증서를 관리하고 trust-manager를 사용하여 신뢰 번들을 구성 요소에 배포합니다.
CA 인증서는 자체 서명되었으며 Azure IoT Operations 외부의 클라이언트에서 신뢰할 수 없습니다. CA 인증서의 주체는 .입니다
CN=Azure IoT Operations Quickstart Root CA - Not for Production
. CA 인증서는 cert-manager에 의해 자동으로 회전됩니다.루트 CA 인증서는 네임스페이스 아래에 호출
azure-iot-operations-aio-ca-certificate
된 Kubernetes 비밀에cert-manager
저장됩니다.루트 CA 인증서의 공용 부분은 네임스페이스 아래에 호출
azure-iot-operations-aio-ca-trust-bundle
된 ConfigMap에azure-iot-operations
저장됩니다. ConfigMap에서 CA 인증서를 검색하고 kubectl 및 openssl을 사용하여 검사할 수 있습니다. configMap은 ca 인증서가 cert-manager에 의해 회전될 때 trust-manager에 의해 업데이트됩니다.kubectl get configmap azure-iot-operations-aio-ca-trust-bundle -n azure-iot-operations -o "jsonpath={.data['ca\.crt']}" | openssl x509 -text -noout
Certificate: Data: Version: 3 (0x2) Serial Number: <SERIAL-NUMBER> Signature Algorithm: sha256WithRSAEncryption Issuer: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production Validity Not Before: Sep 18 20:42:19 2024 GMT Not After : Sep 18 20:42:19 2025 GMT Subject: O=Microsoft, CN=Azure IoT Operations Quickstart Root CA - Not for Production Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: <MODULUS> Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: <SUBJECT-KEY-IDENTIFIER> Signature Algorithm: sha256WithRSAEncryption [Signature]
기본적으로 호출
azure-iot-operations-aio-certificate-issuer
된 발급자의 구성이azure-iot-operations namespace
이미 있습니다. IoT Operations의 모든 TLS 서버 인증서에 대한 공통 발급자로 사용됩니다. MQTT broker는 자체 서명된 발급자가 서명한 동일한 CA 인증서에서 만든 발급자를 사용하여 포트 18883에서 기본 TLS 수신기에 대한 TLS 서버 인증서를 발급합니다. 다음 명령을 사용하여 발급자를 검사할 수 있습니다.kubectl get clusterissuer azure-iot-operations-aio-certificate-issuer -o yaml
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: creationTimestamp: "2024-09-18T20:42:17Z" generation: 1 name: azure-iot-operations-aio-certificate-issuer resourceVersion: "36665" uid: 592700a6-95e0-4788-99e4-ea93934bd330 spec: ca: secretName: azure-iot-operations-aio-ca-certificate status: conditions: - lastTransitionTime: "2024-09-18T20:42:22Z" message: Signing CA verified observedGeneration: 1 reason: KeyPairVerified status: "True" type: Ready
사용자 고유의 발급자 가져오기
프로덕션 배포의 경우 인증서를 관리하기 위해 엔터프라이즈 PKI를 사용하여 Azure IoT Operations를 설정하고 기본 자체 서명된 발급자를 사용하여 내부 통신을 위해 TLS 인증서를 발급하는 대신 엔터프라이즈 PKI와 함께 작동하는 자체 발급자를 가져오는 것이 좋습니다.
사용자 고유의 발급자를 사용하여 Azure IoT Operations를 설정하려면 클러스터에 인스턴스를 배포하기 전에 다음 단계를 사용합니다.
클러스터 준비의 단계에 따라 클러스터 를 설정합니다.
cert-manager를 설치합니다. Cert-manager는 TLS 인증서를 관리합니다.
trust-manager를 설치합니다. 신뢰 관리자를 설치하는 동안 인증서 관리자로 설정합니다
trust namespace
. 예시:helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
Trust-Manager는 구성 요소에 트러스트 번들을 배포하는 데 사용됩니다.
Azure IoT Operations 네임스페이스를 만듭니다.
kubectl create namespace azure-iot-operations
cert-manager와 함께 작동하는 발급자를 배포합니다. 지원되는 모든 발급자 목록은 cert-manager 발급자를 참조 하세요.
발급자의 형식
ClusterIssuer
또는Issuer
. 사용하는Issuer
경우 발급자 리소스를 Azure IoT Operations 네임스페이스에 만들어야 합니다.Azure IoT Operations 네임스페이스에서 신뢰 번들을 설정합니다.
신뢰 번들을 설정하려면 Azure IoT Operations 네임스페이스에 ConfigMap을 만듭니다. CA 인증서의 공개 키 부분을 선택한 키 이름으로 구성 맵에 배치합니다.
CA 인증서의 공개 키 부분을 가져옵니다. 공개 키를 획득하는 단계는 선택한 발급자를 기준으로 합니다.
ConfigMap을 만듭니다. 예시:
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
몇 가지 변경 사항을 사용하여 배포할 Azure IoT Operations 배포의 단계를 따릅니다.
클러스터를
--user-trust
준비하는 동안 매개 변수를 추가합니다. 예시:az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
--trust-settings
Azure IoT Operations를 배포하는 동안 필요한 정보를 사용하여 매개 변수를 추가합니다. 예시:
az iot ops create --subscription <SUBSCRIPTION_ID> -g <RESOURCE_GROUP> --cluster <CLUSTER_NAME> --custom-location <CUSTOM_LOCATION> -n <INSTANCE_NAME> --sr-resource-id <SCHEMAREGISTRY_RESOURCE_ID> --trust-settings configMapName=<CONFIGMAP_NAME> configMapKey=<CONFIGMAP_KEY_WITH_PUBLICKEY_VALUE> issuerKind=<CLUSTERISSUER_OR_ISSUER> issuerName=<ISSUER_NAME>