다음을 통해 공유


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를 설정하려면 클러스터에 인스턴스를 배포하기 전에 다음 단계를 사용합니다.

  1. 클러스터 준비의 단계에 따라 클러스터 를 설정합니다.

  2. cert-manager를 설치합니다. Cert-manager는 TLS 인증서를 관리합니다.

  3. trust-manager를 설치합니다. 신뢰 관리자를 설치하는 동안 인증서 관리자로 설정합니다 trust namespace . 예시:

    helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
    

    Trust-Manager는 구성 요소에 트러스트 번들을 배포하는 데 사용됩니다.

  4. Azure IoT Operations 네임스페이스를 만듭니다.

    kubectl create namespace azure-iot-operations
    
  5. cert-manager와 함께 작동하는 발급자를 배포합니다. 지원되는 모든 발급자 목록은 cert-manager 발급자를 참조 하세요.

    발급자의 형식 ClusterIssuer 또는 Issuer. 사용하는 Issuer경우 발급자 리소스를 Azure IoT Operations 네임스페이스에 만들어야 합니다.

  6. Azure IoT Operations 네임스페이스에서 신뢰 번들을 설정합니다.

    1. 신뢰 번들을 설정하려면 Azure IoT Operations 네임스페이스에 ConfigMap을 만듭니다. CA 인증서의 공개 키 부분을 선택한 키 이름으로 구성 맵에 배치합니다.

    2. CA 인증서의 공개 키 부분을 가져옵니다. 공개 키를 획득하는 단계는 선택한 발급자를 기준으로 합니다.

    3. ConfigMap을 만듭니다. 예시:

      kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
      
  7. 몇 가지 변경 사항을 사용하여 배포할 Azure IoT Operations 배포의 단계를 따릅니다.

    1. 클러스터를 --user-trust 준비하는 동안 매개 변수를 추가합니다. 예시:

      az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME>  -g <RESOURCE_GROUP> --user-trust
      
    2. --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>