Azure IoT Operations는 TLS를 사용하여 모든 구성 요소 간의 통신을 암호화합니다. 이 문서에서는 내부 및 외부 통신에 대한 인증서를 관리하는 방법과 프로덕션 배포에서 내부 통신을 위해 자체 CA(인증 기관) 발급자를 가져오는 방법을 설명합니다.
필수 조건
- 외부 통신에 대한 인증서를 관리하려면 보안 설정을 사용하여 배포된 Azure IoT Operations 인스턴스가 필요합니다. 테스트 설정을 사용하여 Azure IoT Operations를 배포한 경우 먼저 보안 설정을 사용하도록 설정해야 합니다.
내부 통신을 위한 인증서 관리
Azure IoT 작업 내의 모든 통신은 TLS를 사용하여 암호화됩니다. 시작하는 데 도움이 되도록 Azure IoT 작업은 기본 루트 CA 및 TLS 서버 인증서 발급자와 함께 배포됩니다. 개발 및 테스트 목적으로 기본 설정을 사용할 수 있습니다. 프로덕션 배포의 경우 자체 CA 발급자 및 엔터프라이즈 PKI 솔루션을 사용하는 것이 좋습니다.
TLS 서버 인증서에 대한 자체 서명된 기본 발급자 및 루트 CA 인증서
시작하는 데 도움이 되도록 Azure IoT 작업은 TLS 서버 인증서에 대한 자체 서명된 기본 발급자 및 루트 CA 인증서와 함께 배포됩니다. 개발 및 테스트에 이 발급자를 사용할 수 있습니다. Azure IoT 작업은 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
네임스페이스 아래cert-manager
라는 Kubernetes 비밀에 저장됩니다.루트 CA 인증서의 공용 부분은
azure-iot-operations-aio-ca-trust-bundle
네임스페이스 아래azure-iot-operations
이라는 ConfigMap에 저장됩니다. ConfigMap에서 CA 인증서를 검색하고 kubectl 및 openssl을 사용하여 검사할 수 있습니다. cert-manager가 CA 인증서를 회전할 때 trust-manager가 ConfigMap을 업데이트합니다.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 namespace
에azure-iot-operations-aio-certificate-issuer
라는 발급자가 이미 구성되어 있습니다. IoT 운영을 위한 모든 TLS 서버 인증서의 공통 발급자로 사용됩니다. MQTT 브로커는 자체 서명된 발급자가 서명한 동일한 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 작업을 설정하고, 기본 자체 서명된 발급자를 사용하여 내부 통신을 위해 TLS 인증서를 발급하는 대신 엔터프라이즈 PKI와 함께 작동하는 자체 CA 발급자를 가져오는 것이 좋습니다.
내부 통신을 위해 사용자 고유의 발급자를 사용하여 Azure IoT Operations를 설정하려면 클러스터에 인스턴스를 배포하기 전에 다음 단계를 사용합니다.
클러스터 준비의 단계에 따라 클러스터를 설정합니다.
cert-manager설치합니다. Cert-manager는 TLS 인증서를 관리합니다.
trust-manager설치합니다. 신뢰 관리자를 설치하는 동안
trust namespace
를 cert-manager로 설정합니다. 다음은 그 예입니다.helm upgrade trust-manager jetstack/trust-manager --install --namespace cert-manager --set app.trust.namespace=cert-manager --wait
Trust-manager는 신뢰 번들을 구성 요소에 배포하는 데 사용됩니다.
Azure IoT 작업 네임스페이스를 만듭니다.
kubectl create namespace azure-iot-operations
cert-manager와 함께 작동하는 발급자를 배포합니다. 지원되는 모든 발급자 목록은 cert-manager 발급자를 참조하세요.
발급자는
ClusterIssuer
또는Issuer
형식일 수 있습니다.Issuer
를 사용하는 경우 발급자 리소스를 Azure IoT 작업 네임스페이스에 만들어야 합니다.Azure IoT 작업 네임스페이스에서 신뢰 번들을 설정합니다.
신뢰 번들을 설정하려면 Azure IoT 작업 네임스페이스에 ConfigMap을 만듭니다. CA 인증서의 공개 키 부분을 원하는 키 이름으로 구성 맵에 넣습니다.
CA 인증서의 공개 키 부분을 가져옵니다. 공개 키를 얻는 단계는 선택한 발급자에 따라 달라집니다.
ConfigMap을 만듭니다. 다음은 그 예입니다.
kubectl create configmap -n azure-iot-operations <YOUR_CONFIGMAP_NAME> --from-file=<CA_CERTIFICATE_FILENAME_PEM_OR_DER>
Azure IoT 작업 배포의 단계에 따라 몇 가지 변경 내용을 적용하여 배포합니다.
클러스터를 준비하는 동안
--user-trust
매개 변수를 추가합니다. 다음은 그 예입니다.az iot ops init --subscription <SUBSCRIPTION_ID> --cluster <CLUSTER_NAME> -g <RESOURCE_GROUP> --user-trust
Azure IoT 작업을 배포하는 동안 필요한 정보가 포함된
--trust-settings
매개 변수를 추가합니다. 다음은 그 예입니다.
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>
외부 통신에 대한 인증서 관리
외부 통신을 위한 인증서 관리 환경은 Azure Key Vault를 클라우드의 관리형 자격 증명 모음 솔루션으로 사용합니다. 인증서는 키 자격 증명 모음에 비밀로 추가되고 Azure Key Vault 비밀 저장소 확장을 통해 Kubernetes 비밀로 에지에 동기화됩니다.
예를 들어 OPC UA용 커넥터는 인증서 관리 환경을 사용하여 외부 OPC UA 서버에 대한 OPC UA 클라이언트 애플리케이션 인증을 구성합니다. Azure IoT Operations는 OPC UA용 커넥터에 대한 두 개의 고유 인증서 저장소를 관리합니다. 하나는 신뢰 목록 용이고 다른 하나는 발급자 목록용입니다. OPC UA용 커넥터가 인증서를 사용하여 OPC UA 서버와 상호 신뢰를 설정하는 방법에 대한 자세한 내용은 OPC UA용 커넥터에 대한 OPC UA 인증서 인프라를 참조하세요.
보안 설정을 사용하여 Azure IoT 작업을 배포하는 경우 Azure Key Vault에 인증서 추가를 시작하고, OPC UA 연결에 대한 신뢰 목록 및 발급자 목록 저장소에서 사용할 Kubernetes 클러스터에 동기화할 수 있습니다.
인증서 업로드: Azure Key Vault에 비밀로 추가되고 비밀 저장소 확장을 사용하여 클러스터에 자동으로 동기화되는 인증서를 업로드합니다.
팁 (조언)
- Azure Key Vault에 추가하고 클러스터에 동기화하기 전에 올바른 인증서가 있는지 확인하려면 업로드된 인증서 세부 정보를 확인합니다.
- 직관적인 이름을 사용하면 나중에 어떤 비밀이 사용자의 비밀을 나타내는지 알아볼 수 있습니다.
비고
인증서를 업로드하기만 하면 Azure Key Vault에 비밀이 추가되지 않고 클러스터에 동기화됩니다. 변경 내용을 적용하려면 적용 을 선택해야 합니다.
Azure Key Vault에서 추가: 클러스터에 동기화할 Azure Key Vault의 기존 비밀을 추가합니다.
비고
클러스터에 동기화하려는 인증서를 보유하는 비밀을 선택해야 합니다. 올바른 인증서가 아닌 비밀을 선택하면 연결이 실패합니다.
목록 보기를 사용하여 동기화된 인증서를 관리할 수 있습니다. 동기화된 모든 인증서와 동기화된 인증서 저장소를 볼 수 있습니다.
- 신뢰 목록 및 발급자 목록 저장소에 대한 자세한 내용은 OPC UA용 커넥터에 대한 OPC UA 인증서 인프라 구성을 참조하세요.
동기화된 인증서도 삭제할 수 있습니다. 동기화된 인증서를 삭제하면 Kubernetes 클러스터에서 동기화된 인증서만 삭제되고 Azure Key Vault에서 포함된 비밀 참조는 삭제되지 않습니다. 키 자격 증명 모음에서 인증서 비밀을 수동으로 삭제해야 합니다.