X.509 인증서를 사용하여 Linux에서 IoT Edge 디바이스 만들기 및 프로비전

적용 대상:IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4는 지원되는 릴리스입니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

이 문서에서는 IoT Edge 설치를 포함하여 Linux IoT Edge 디바이스를 등록하고 프로비전하기 위한 엔드투엔드 지침을 제공합니다.

IoT 허브에 연결하는 모든 디바이스에는 클라우드-디바이스 또는 디바이스-클라우드 통신을 추적하는 데 사용되는 디바이스 ID가 있습니다. IoT Hub 호스트 이름, 디바이스 ID 및 디바이스가 IoT Hub에 인증하는 데 사용하는 정보를 포함하는 연결 정보를 사용하여 디바이스를 구성합니다.

이 문서의 단계는 단일 디바이스를 IoT 허브에 연결하는 수동 프로비저닝이라는 프로세스를 안내합니다. 수동 프로비저닝을 위해 IoT Edge 디바이스를 인증하는 두 가지 옵션이 있습니다.

  • 대칭 키: IoT Hub에서 새 디바이스 ID를 만드는 경우 서비스에서 두 개의 키를 만듭니다. 디바이스에 키 중 하나를 저장하고 인증 시 IoT Hub 키를 제시합니다.

    이 인증 방식을 사용하면 빠르게 시작할 수 있지만 안전하지 않습니다.

  • X.509 자체 서명: 두 개의 x.509 ID 인증서를 만들어 디바이스에 저장합니다. IoT Hub에서 새 디바이스 ID를 만들 때 두 인증서의 지문을 모두 제공합니다. 디바이스는 IoT Hub에 인증 시 인증서 하나를 제시되고 IoT Hub는 인증서가 지문과 일치하는지 확인합니다.

    이 인증 방식은 더 안전하며 프로덕션 시나리오에 권장됩니다.

이 문서에서는 X.509 인증서를 인증 방법으로 사용하는 방법을 설명합니다. 대칭 키를 사용하려면 대칭 키를 사용하여 Linux에서 IoT Edge 디바이스 만들기 및 프로비전을 참조하세요.

참고 항목

설정할 디바이스가 많고 각 디바이스를 수동으로 프로비저닝하지 않으려면 다음 문서 중 하나를 읽고 IoT Hub Device Provisioning Service에서 IoT Edge를 사용하는 방법을 알아보세요.

필수 조건

이 문서에서는 IoT Edge 디바이스를 등록하고 디바이스에 IoT Edge를 설치하는 방법을 설명합니다. 이러한 작업에는 작업을 수행하는 데 사용되는 다양한 필수 구성 요소와 유틸리티가 있습니다. 계속하기 전에 모든 필수 구성 요소가 충족되었는지 확인합니다.

디바이스 관리 도구

디바이스를 등록하는 단계에서 Azure Portal, Visual Studio Code 또는 Azure CLI를 사용할 수 있습니다. 각 유틸리티에는 자체 필수 조건이 있거나 설치해야 할 수 있습니다.

Azure 구독의 무료 또는 표준 IoT Hub.

디바이스 요구 사항

X64, ARM32 또는 ARM64 Linux 디바이스.

Microsoft는 다양한 운영 체제에 대한 설치 패키지를 게시합니다.

현재 프로덕션 시나리오에 지원되는 운영 체제에 대한 최신 정보는 Azure IoT Edge 지원 시스템을 참조하세요.

디바이스 ID 인증서 생성

X.509 인증서를 사용하여 수동으로 프로비저닝하려면 IoT Edge 버전 1.0.10 이상이 필요합니다.

X.509 인증서를 사용하여 IoT Edge 디바이스를 프로비저닝하는 경우에는 디바이스 ID 인증서를 사용합니다. 이 인증서는 IoT Edge 디바이스를 프로비저닝하고 Azure IoT Hub에서 디바이스를 인증하는 데만 사용됩니다. 다른 인증서에 서명하지 않는 리프 인증서입니다. 디바이스 ID 인증서는 IoT Edge 디바이스가 확인을 위해 모듈 또는 다운스트림 디바이스에 제시하는 CA(인증 기관) 인증서와는 별개입니다.

X.509 인증서 인증의 경우 각 디바이스의 인증 정보는 디바이스 ID 인증서에서 가져온 ‘지문’ 형태로 제공됩니다. 디바이스 등록 시 IoT Hub에 이 지문이 제공되어 서비스가 연결될 때 디바이스를 인식할 수 있습니다.

IoT Edge 디바이스에서 CA 인증서를 사용하는 방법에 대한 자세한 내용은 Azure IoT Edge에서 인증서를 사용하는 방법 이해를 참조하세요.

X.509를 사용한 수동 프로비저닝에는 다음 파일이 필요합니다.

  • .cer 또는 .pem 형식의 일치하는 프라이빗 키 인증서를 포함하는 두 개의 디바이스 ID 인증서. 인증서 회전을 위해서는 두 개의 디바이스 ID 인증서가 필요합니다. 모범 사례는 만료 날짜가 다른 두 개의 서로 다른 디바이스 ID 인증서를 준비하는 것입니다. 한 인증서가 만료되더라도 다른 인증서는 여전히 유효하며 만료된 인증서를 회전할 시간을 줍니다.

    인증서 및 키 파일 집합 하나가 IoT Edge 런타임에 제공됩니다. 디바이스 ID 인증서를 만들 때 IoT 허브의 디바이스에 원하는 디바이스 ID로 인증서 일반 이름(CN)을 설정합니다.

  • 디바이스 ID 인증서에서 가져온 지문. IoT Hub는 IoT Edge 디바이스를 등록할 때 두 개의 지문이 필요합니다. 등록에는 하나의 인증서만 사용할 수 있습니다. 단일 인증서를 사용하려면 디바이스 등록 시 기본 지문과 보조 지문 모두에 동일한 인증서 지문을 설정합니다.

    지문 값은 SHA-1 해시의 경우 40(16진수), SHA-256 해시의 경우 64(16진수)입니다. 디바이스 등록 시 IoT Hub에 두 지문이 모두 제공됩니다.

    인증서에서 지문을 검색하는 한 가지 방법은 다음 openssl 명령을 사용하는 것입니다.

    openssl x509 -in <certificate filename>.pem -text -fingerprint
    

    지문은 이 명령의 출력에 포함됩니다. 예시:

    SHA1 Fingerprint=D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12
    

인증서가 없는 경우 IoT Edge 디바이스 기능을 테스트하기 위한 데모 인증서를 만들 수 있습니다. 해당 문서의 지침에 따라 인증서 만들기 스크립트를 설정하고, 루트 CA 인증서를 만들고, IoT Edge 디바이스 ID 인증서를 만듭니다. 테스트를 위해 단일 디바이스 ID 인증서를 만들고 IoT Hub에 디바이스를 등록할 때 기본 및 보조 지문 값 모두에 동일한 지문을 사용할 수 있습니다.

디바이스 등록

기본 설정에 따라 Azure Portal, Visual Studio Code 또는 Azure CLI를 사용하여 디바이스를 등록할 수 있습니다.

Azure Portal의 IoT 허브에서 IoT Edge 디바이스는 에지가 사용 설정되지 않은 IoT 디바이스와 별도로 만들어지고 관리됩니다.

  1. Azure Portal에 로그인하고 IoT Hub로 이동합니다.

  2. 왼쪽 창의 메뉴에서 디바이스를 선택한 다음, 디바이스 추가를 선택합니다.

  3. 디바이스 만들기 페이지에서 다음 정보를 입력합니다.

    • 설명 디바이스 ID를 만듭니다. 나중에 사용할 수 있도록 이 디바이스 ID를 기록해 두세요.
    • IoT Edge 디바이스 확인란을 선택합니다.
    • 인증 유형으로 X.509 자체 서명을 선택합니다.
    • 기본 및 보조 ID 인증서 지문을 제공합니다. 지문 값은 SHA-1 해시의 경우 40(16진수), SHA-256 해시의 경우 64(16진수)입니다. Azure Portal은 16진수 값만 지원합니다. 포털에 입력하기 전에 지문 값에서 열 구분 기호와 공백을 제거합니다. 예를 들어, D2:68:D9:04:9F:1A:4D:6A:FD:84:77:68:7B:C6:33:C0:32:37:51:12D268D9049F1A4D6AFD8477687BC633C032375112로 입력됩니다.

    테스트 중이고 하나의 인증서를 사용하려는 경우 기본 및 보조 지문 모두에 동일한 인증서를 사용할 수 있습니다.

  4. 저장을 선택합니다.

이제 디바이스가 IoT Hub에 등록되었으므로 IoT Edge 런타임의 설치 및 프로비전을 완료하는 데 사용하는 정보를 검색합니다.

등록된 디바이스 보기 및 프로비전 정보 검색

X.509 인증서 인증을 사용하는 디바이스는 IoT Edge 런타임의 설치 및 프로비저닝을 완료하기 위해 IoT 허브 이름, 디바이스 이름, 인증서 파일이 필요합니다.

IoT 허브에 연결된 에지 사용 디바이스는 디바이스 페이지에 나열되어 있습니다. 디바이스 유형 IoT Edge 디바이스별로 목록을 필터링할 수 있습니다.

IoT Edge 설치

이 섹션에서는 IoT Edge용 Linux 가상 머신 또는 실제 디바이스를 준비합니다. 그런 다음, IoT Edge를 설치합니다.

다음 명령을 실행하여 패키지 리포지토리를 추가한 다음, 신뢰할 수 있는 키 목록에 Microsoft 패키지 서명 키를 추가합니다.

Important

2022년 6월 30일에 계층 1 OS 지원 목록에서 Raspberry Pi OS Stretch를 사용 중지되었습니다. 잠재적인 보안 취약성을 방지하려면 호스트 OS를 Bullseye로 업데이트합니다.

설치는 몇 가지 명령으로 수행할 수 있습니다. 터미널을 열고 다음 명령을 실행합니다.

  • 22.04:

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

운영 체제 버전에 대한 자세한 내용은 Azure IoT Edge 지원 플랫폼을 참조하세요.

참고 항목

Azure IoT Edge 소프트웨어 패키지에는 각 패키지(usr/share/doc/{package-name} 또는 LICENSE 디렉터리)에 있는 사용 조건이 적용됩니다. 패키지를 사용하기 전에 사용 조건을 읽어보세요. 패키지를 설치하고 사용하면 이러한 사용 조건에 동의하는 것입니다. 사용 조건에 동의하지 않으면 해당 패키지를 사용하지 마세요.

컨테이너 엔진 설치

Azure IoT Edge는 OCI 호환 컨테이너 런타임을 사용합니다. 프로덕션 시나리오의 경우 Moby 엔진을 사용하는 것이 좋습니다. Moby 엔진은 IoT Edge에서 공식적으로 지원되는 유일한 컨테이너 엔진입니다. Docker CE/EE 컨테이너 이미지는 Moby 런타임과 호환 가능합니다.

Moby 엔진을 설치합니다.

sudo apt-get update; \
  sudo apt-get install moby-engine

기본적으로 컨테이너 엔진은 컨테이너 로그 크기 제한을 설정하지 않습니다. 시간이 지남에 따라 디바이스가 로그로 가득 차고 디스크 공간이 부족해질 수 있습니다. 그러나 선택 사항이지만 로컬로 표시되도록 로그를 구성할 수 있습니다. 로깅 구성에 대한 자세한 내용은 프로덕션 배포 검사 목록을 참조하세요.

다음 단계에서는 local 로깅 드라이버를 로깅 메커니즘으로 사용하도록 컨테이너를 구성하는 방법을 보여 줍니다.

  1. 기존 Docker 디먼의 구성 파일 만들기 또는 편집

    sudo nano /etc/docker/daemon.json
    
  2. 예제와 같이 기본 로깅 드라이버를 local 로깅 드라이버로 설정합니다.

       {
          "log-driver": "local"
       }
    
  3. 변경 내용을 적용하려면 컨테이너 엔진을 다시 시작합니다.

    sudo systemctl restart docker
    

IoT Edge 런타임 설치

IoT Edge 서비스는 IoT Edge 디바이스에서 보안 표준을 제공하고 유지 관리합니다. 서비스는 부팅할 때마다 시작되며, 나머지 IoT Edge 런타임을 시작하여 디바이스를 부트스트랩합니다.

참고 항목

버전 1.2부터 IoT ID 서비스는 IoT Edge 및 IoT Hub와 통신해야 하는 기타 디바이스 구성 요소에 대한 ID 프로비전 및 관리를 처리합니다.

이 섹션의 단계에서는 인터넷이 연결된 디바이스에 최신 IoT Edge 버전을 설치하는 일반적인 프로세스를 보여 줍니다. 시험판 버전과 같은 특정 버전을 설치해야 하거나 오프라인 상태에서 설치해야 하는 경우 이 문서 뒷부분의 오프라인 또는 특정 버전 설치 단계를 따르세요.

이전 버전을 실행하는 IoT Edge 디바이스가 이미 있고 최신 릴리스로 업그레이드하려는 경우 IoT Edge 보안 디먼 및 런타임 업데이트의 단계를 사용합니다. 최신 버전은 업그레이드에 특정 단계가 필요한 이전 버전의 IoT Edge와 충분히 다릅니다.

최신 버전의 IoT Edge 및 IoT ID 서비스 패키지를 설치합니다(아직 최신 버전이 아닌 경우).

  • 22.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

선택 사항인 defender-iot-micro-agent-edge에는 Microsoft Defender for IoT 보안 마이크로 에이전트가 포함되어 있어 엔드포인트에서 IoT Edge 디바이스를 보호하는 데 도움이 되는 보안 태세 관리, 취약성, 위협 탐지, 집합 관리 등을 파악할 수 있습니다. Edge 디바이스의 보안 모니터링 및 강화를 사용하도록 설정하려면 Edge 에이전트와 함께 마이크로 에이전트를 설치하는 것이 좋습니다. Microsoft Defender for IoT에 대한 자세한 내용은 디바이스 빌더를 위한 Microsoft Defender for IoT란?을 참조하세요.

클라우드 ID를 사용한 디바이스 프로비전

이제 컨테이너 엔진과 IoT Edge 런타임이 디바이스에 설치되었으므로 클라우드 ID 및 인증 정보를 사용하여 디바이스를 설정할 수 있습니다.

  1. IoT Edge 설치의 일부로 제공되는 템플릿 파일을 기반으로 디바이스에 대한 구성 파일을 만듭니다.

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    
  2. IoT Edge 디바이스에서 구성 파일을 엽니다.

    sudo nano /etc/aziot/config.toml
    
  3. 파일의 Provisioning 섹션을 찾고 x.509 ID 인증서를 사용하여 수동 프로비전 줄의 주석 처리를 제거합니다. 다른 모든 프로비전 섹션을 주석으로 처리해야 합니다.

    # Manual provisioning with x.509 certificates
    [provisioning]
    source = "manual"
    iothub_hostname = "REQUIRED_IOTHUB_HOSTNAME"
    device_id = "REQUIRED_DEVICE_ID_PROVISIONED_IN_IOTHUB"
    
    [provisioning.authentication]
    method = "x509"
    
    identity_cert = "REQUIRED_URI_OR_POINTER_TO_DEVICE_IDENTITY_CERTIFICATE"
    
    identity_pk = "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY"
    

다음 필드를 업데이트합니다.

  • iothub_hostname: 디바이스가 연결하는 IoT Hub의 호스트 이름입니다. 예들 들어 {IoT hub name}.azure-devices.net입니다.
  • device_id: 디바이스를 등록할 때 제공한 ID입니다.
  • identity_cert: 디바이스의 ID 인증서에 대한 URI입니다(예: file:///path/identity_certificate.pem). 또는 EST나 로컬 인증 기관을 사용하여 동적으로 인증서를 발급합니다.
  • identity_pk: 제공된 ID 인증서의 프라이빗 키 파일에 대한 URI입니다(예: )file:///path/identity_key.pem. 또는 PKCS#11 URI를 제공하고 다음에서 구성 정보를 제공합니다.

구성 파일의 뒷부분에 있는 PKCS#11 섹션입니다.

인증서에 대한 자세한 내용은 IoT Edge 인증서 관리를 참조 하세요.

파일을 저장 후 닫습니다.

CTRL + X, , YEnter

구성 파일에 프로비전 정보를 입력한 후 변경 내용을 적용합니다.

sudo iotedge config apply

모듈 배포

IoT Edge 모듈을 배포하려면 Azure Portal IoT Hub로 이동한 다음, 다음을 수행합니다.

  1. IoT Hub 메뉴에서 디바이스를 선택합니다.

  2. 디바이스를 선택하여 해당 페이지를 엽니다.

  3. 모듈 설정 탭을 선택합니다.

  4. IoT Edge 기본 모듈(edgeAgent 및 edgeHub)을 배포하려고 하므로 이 창에 모듈을 추가할 필요가 없으므로 아래쪽에서 검토 + 만들기를 선택합니다.

  5. 모듈의 JSON 확인이 표시됩니다. 만들기를 선택하여 모듈을 배포합니다.<

자세한 내용은 모듈 배포를 참조하세요.

구성 성공 확인

IoT Edge 디바이스에서 런타임이 성공적으로 설치 및 구성되었는지 확인합니다.

iotedge 명령을 실행하려면 상승된 권한이 필요합니다. IoT Edge 런타임을 설치한 후 처음으로 머신에서 로그아웃했다가 다시 로그인하면 권한이 자동으로 업데이트됩니다. 그 전까지는 명령 앞에 sudo를 사용합니다.

IoT Edge 시스템 서비스가 실행되고 있는지 확인합니다.

sudo iotedge system status

성공적인 상태 응답은 Ok입니다.

서비스 문제를 해결해야 할 경우 서비스 로그를 검색합니다.

sudo iotedge system logs

check 도구를 사용하여 디바이스의 구성 및 연결 상태를 확인합니다.

sudo iotedge check

OK(녹색), 경고(노란색) 또는 오류(빨간색)를 포함할 수 있는 응답 범위를 예상할 수 있습니다. 일반적인 오류 문제를 해결하려면 Azure IoT Edge의 일반적인 문제에 대한 솔루션을 참조하세요.

Screenshot of sample responses from the check command.

사용 권한이 업데이트된 후에도 항상 sudo를 사용하여 검사 도구를 실행합니다. 검사 도구가 구성 상태를 확인하기 위해 구성 파일에 액세스하려면 상승된 권한이 필요합니다.

참고 항목

새로 프로비전된 디바이스에서 IoT Edge Hub와 관련된 오류가 표시될 수 있습니다.

× 프로덕션 준비: Edge Hub의 스토리지 디렉터리가 호스트 파일 시스템에 유지되고 있습니다. - 오류

edgeHub 컨테이너의 현재 상태를 확인할 수 없습니다.

IoT Edge Hub 모듈이 실행되고 있지 않으므로 새로 프로비저닝된 디바이스에서 이 오류가 예상됩니다. 오류를 해결하려면 IoT Hub에서 디바이스에 대한 모듈을 설정하고 배포를 만듭니다. 디바이스에 대한 배포를 만들면 IoT Edge Hub 모듈을 포함하여 디바이스에서 모듈이 시작됩니다.

IoT Edge 디바이스에서 실행되는 모든 모듈을 봅니다. 서비스가 처음 시작되면 edgeAgent 모듈만 실행되는 것으로 표시됩니다. edgeAgent 모듈은 기본적으로 실행되며, 디바이스에 배포하는 추가 모듈을 설치하고 시작하는 데 도움이 됩니다.

sudo iotedge list

새 IoT Edge 디바이스를 만들면 Azure Portal에 상태 코드 417 -- The device's deployment configuration is not set 가 표시됩니다. 이 상태는 정상이며 디바이스가 모듈 배포를 수신할 준비가 되었음을 의미합니다.

오프라인 설치 또는 특정 버전 설치(선택 사항)

이 섹션의 단계는 표준 설치 단계에서 다루지 않는 시나리오를 위한 단계입니다. 여기에는 다음이 포함될 수 있습니다.

  • 오프라인 상태에서 IoT Edge 설치
  • 릴리스 후보 버전 설치

패키지 관리자를 통해 제공되지 않는 특정 버전의 Azure IoT Edge 런타임을 설치하려는 경우 이 섹션의 단계를 사용합니다. Microsoft 패키지 목록에는 제한된 최신 버전과 해당 하위 버전의 집합만 포함되어 있으므로 이러한 단계는 이전 버전 또는 릴리스 후보 버전을 설치하려는 모든 사용자에게 해당합니다.

Ubuntu 스냅을 사용하는 경우 스냅을 다운로드하여 오프라인으로 설치할 수 있습니다. 자세한 내용은 스냅 다운로드 및 오프라인 설치를 참조하세요.

curl 명령을 사용하면 IoT Edge GitHub 리포지토리에서 직접 구성 요소 파일을 대상으로 지정할 수 있습니다.

참고 항목

디바이스가 현재 IoT Edge 버전 1.1 이상을 실행하고 있는 경우 이 섹션의 단계를 수행하기 전에 iotedgelibiothsm-std 패키지를 제거합니다. 자세한 내용은 1.0 또는 1.1에서 최신 릴리스로 업데이트를 참조하세요.

  1. Azure IoT Edge 릴리스로 이동하고 대상으로 지정할 릴리스 버전을 찾습니다.

  2. 해당 버전의 자산 섹션을 확장합니다.

  3. 모든 릴리스에는 IoT Edge 및 ID 서비스에 대한 새 파일이 있어야 합니다. 오프라인 디바이스에 IoT Edge를 설치하려는 경우 미리 새 파일을 다운로드합니다. 그렇지 않으면 다음 명령을 사용하여 해당 구성 요소를 업데이트합니다.

    1. IoT Edge 디바이스의 아키텍처와 일치하는 aziot-identity-service 파일을 찾습니다. 파일 링크를 마우스 오른쪽 단추로 클릭하고 링크 주소를 복사합니다.

    2. 다음 명령의 복사된 링크를 사용하여 해당 버전의 ID 서비스를 설치합니다.

      curl -L <identity service link> -o aziot-identity-service.deb && sudo apt-get install ./aziot-identity-service.deb
      

    1. IoT Edge 디바이스의 아키텍처와 일치하는 aziot-edge 파일을 찾습니다. 파일 링크를 마우스 오른쪽 단추로 클릭하고 링크 주소를 복사합니다.

    2. 다음 명령의 복사된 링크를 사용하여 해당 버전의 IoT Edge를 설치합니다.

      curl -L <iotedge link> -o aziot-edge.deb && sudo apt-get install ./aziot-edge.deb
      

IoT Edge 제거

디바이스에서 IoT Edge 설치를 제거하려면 다음 명령을 사용합니다.

IoT Edge 런타임을 제거합니다.

sudo apt-get autoremove --purge aziot-edge

IoT Edge를 다시 설치하고 나중에 동일한 구성 정보를 사용하려면 --purge 플래그를 생략합니다. 플래그는 --purge 구성 파일을 포함하여 IoT Edge와 연결된 모든 파일을 삭제합니다.

IoT Edge 런타임을 제거하면 생성된 컨테이너는 중지되지만 디바이스에는 계속 남아 있습니다. 모든 컨테이너를 보고 남아 있는 항목을 확인합니다.

sudo docker ps -a

두 개의 런타임 컨테이너를 포함하여 디바이스에서 컨테이너를 삭제합니다.

sudo docker rm -f <container name>

마지막으로 디바이스에서 컨테이너 런타임을 제거합니다.

sudo apt-get autoremove --purge moby-engine