IoT Edge 인증서 관리

적용 대상:IoT Edge 1.4 확인 표시 IoT Edge 1.4

Important

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

모든 IoT Edge 디바이스는 인증서를 사용하여 런타임과 디바이스에서 실행되는 모듈 간에 보안 연결을 만듭니다. 게이트웨이로 작동하는 IoT Edge 디바이스는 이러한 동일한 인증서를 사용하여 다운스트림 디바이스에도 연결합니다.

참고 항목

이 문서 전체에서 사용되는 루트 CA라는 용어는 IoT 솔루션의 인증서 체인에서 최상위 기관의 인증서를 나타냅니다. 배포된 인증 기관의 인증서 루트나 조직의 인증 기관 루트를 사용할 필요는 없습니다. 실제로는 중간 CA 인증서인 경우가 많습니다.

필수 조건

  • Azure IoT Edge 인증서를 사용하는 방법, 특히 IoT Edge 인증서를 사용하는 방법의 개념에 대해 잘 알고 있어야 합니다.

  • IoT Edge 디바이스.

    IoT Edge 디바이스를 설정하지 않은 경우 Azure 가상 머신에서 만들 수 있습니다. 이러한 빠른 시작 문서 중 하나에 있는 단계에 따라 가상 Linux 디바이스를 만들거나가상 Windows 디바이스를 만듭니다.

  • 구성 템플릿에 따라 IoT Edge 구성 파일 config.toml을 편집할 수 있습니다.

  • config.toml이 템플릿을 기반으로 하지 않는 경우 템플릿을 열고 주석이 달린 지침을 사용하여 템플릿 구조에 따라 구성 섹션을 추가합니다.

  • 구성되지 않은 새 IoT Edge 설치가 있는 경우 템플릿을 복사하여 구성을 초기화합니다. 기존 구성이 있는 경우 이 명령을 사용하지 마세요. 파일을 덮어씁니다.

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    

형식 요구 사항

  • 인증서는 DER(Distinguished Encoding Rules)이라는 이진 표현 또는 PEM(Privacy Enhanced Mail)이라는 텍스트 표현으로 인코딩할 수 있습니다. PEM 형식은 -----BEGIN CERTIFICATE----- 헤더 다음에 base64로 인코딩된 DER 다음에 -----END CERTIFICATE----- 바닥글이 오는 형식입니다.
  • 인증서와 유사하게 프라이빗 키는 이진 DER 또는 텍스트 표현 PEM으로 인코딩할 수 있습니다.
  • PEM이 기술되어 있으므로 동일한 파일에서 CERTIFICATEPRIVATE KEY를 순차적으로 결합하는 PEM을 구성할 수도 있습니다.
  • 마지막으로 인증서와 프라이빗 키는 PKCS#12라는 이진 표현으로 함께 인코딩할 수 있습니다. 이 표현은 선택적 암호로 암호화됩니다.

파일 확장자는 임의적이며 file 명령을 실행하거나 파일을 보고 형식을 확인해야 합니다. 일반적으로 파일은 다음 확장 규칙을 사용합니다.

  • .cer은 DER 또는 PEM 형식의 인증서입니다.
  • .pem은 PEM 형식의 인증서, 프라이빗 키 또는 둘 다입니다.
  • .pfxPKCS#12 파일입니다.

IoT Edge에는 다음과 같은 인증서와 프라이빗 키가 필요합니다.

  • PEM 형식
  • 별도의 파일
  • 대부분의 경우 전체 체인

PKI 공급자로부터 .pfx 파일을 받은 경우 인증서와 프라이빗 키가 하나의 파일에 함께 인코딩되었을 수 있습니다. file 명령을 사용하여 PKCS#12 파일 형식인지 확인합니다. openssl pkcs12 명령을 사용하여 PKCS#12 .pfx 파일을 PEM 파일로 변환할 수 있습니다.

PKI 공급자가 .cer 파일을 제공하는 경우 .pfx와 동일한 인증서를 포함하거나 PKI 공급자가 발급하는 (루트) 인증서일 수 있습니다. 확인하려면 openssl x509 명령으로 파일을 검사합니다. 발급 인증서인 경우:

  • DER(이진 파일) 형식인 경우 openssl x509 -in cert.cer -out cert.pem을 사용하여 PEM으로 변환합니다.
  • PEM 파일을 신뢰 번들로 사용합니다. 신뢰 번들에 대한 자세한 내용은 다음 섹션을 참조하세요.

Important

PKI 인프라는 RSA-2048 비트 키와 EC P-256 키를 지원해야 합니다. 예를 들어, EST 서버는 이러한 키 형식을 지원해야 합니다. 다른 키 형식을 사용할 수 있지만 RSA-2048 비트 키와 EC P-256 키만 테스트합니다.

사용 권한 요구 사항

다음 표에서는 IoT Edge 인증서에 필요한 파일 및 디렉터리 권한을 나열합니다. 인증서에 대한 기본 디렉터리는 키의 /var/aziot/certs//var/aziot/secrets/입니다.

파일 또는 디렉터리 사용 권한 담당자
/var/aziot/certs/ 인증서 디렉터리 drwxr-xr-x(755) aziotcs
/var/aziot/certs/의 인증서 파일 -wr-r--r--(644) aziotcs
/var/aziot/secrets/ 키 디렉터리 drwx------(700) aziotks
/var/aziot/secrets/의 키 파일 -wr-------(600) aziotks

디렉터리를 만들고 권한을 설정하고 소유자를 설정하려면 다음 명령을 실행합니다.

# If the certificate and keys directories don't exist, create, set ownership, and set permissions
sudo mkdir -p /var/aziot/certs
sudo chown aziotcs:aziotcs /var/aziot/certs
sudo chmod 755 /var/aziot/certs

sudo mkdir -p /var/aziot/secrets
sudo chown aziotks:aziotks /var/aziot/secrets
sudo chmod 700 /var/aziot/secrets

# Give aziotcs ownership to certificates
# Read and write for aziotcs, read-only for others
sudo chown -R aziotcs:aziotcs /var/aziot/certs
sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;

# Give aziotks ownership to private keys
# Read and write for aziotks, no permission for others
sudo chown -R aziotks:aziotks /var/aziot/secrets
sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;

# Verify permissions of directories and files
sudo ls -Rla /var/aziot

올바른 소유권 및 권한이 있는 목록의 출력은 다음 출력과 유사합니다.

azureUser@vm:/var/aziot$ sudo ls -Rla /var/aziot
/var/aziot:
total 16
drwxr-xr-x  4 root    root    4096 Dec 14 00:16 .
drwxr-xr-x 15 root    root    4096 Dec 14 00:15 ..
drwxr-xr-x  2 aziotcs aziotcs 4096 Jan 14 00:31 certs
drwx------  2 aziotks aziotks 4096 Jan 23 17:23 secrets

/var/aziot/certs:
total 20
drwxr-xr-x 2 aziotcs aziotcs 4096 Jan 14 00:31 .
drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
-rw-r--r-- 1 aziotcs aziotcs 1984 Jan 14 00:24 azure-iot-test-only.root.ca.cert.pem
-rw-r--r-- 1 aziotcs aziotcs 5887 Jan 14 00:27 iot-edge-device-ca-devicename-full-chain.cert.pem

/var/aziot/secrets:
total 16
drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 .
drwxr-xr-x 4 root    root    4096 Dec 14 00:16 ..
-rw------- 1 aziotks aziotks 3243 Jan 14 00:28 iot-edge-device-ca-devicename.key.pem

신뢰할 수 있는 루트 CA 관리(신뢰 번들)

자체 서명된 CA(인증 기관) 인증서를 IoT Edge 및 모듈의 신뢰할 수 있는 루트로 사용하는 것을 신뢰 번들이라고 합니다. 신뢰 번들은 IoT Edge 및 모듈이 서버와 통신하는 데 사용할 수 있습니다. 신뢰 번들을 구성하려면 IoT Edge 구성 파일에서 해당 파일 경로를 지정합니다.

  1. PKI 공급자로부터 루트 CA 인증서를 가져오세요.

  2. 인증서가 형식 요구 사항을 충족하는지 확인합니다.

  3. PEM 파일을 복사하고 IoT Edge의 인증서 서비스 액세스 권한을 부여합니다. 예를 들어, /var/aziot/certs 디렉터리의 경우:

    # Make the directory if doesn't exist
    sudo mkdir /var/aziot/certs -p
    
    # Change cert directory user and group ownership to aziotcs and set permissions
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    # Copy certificate into certs directory
    sudo cp root-ca.pem /var/aziot/certs
    
    # Give aziotcs ownership to certificate and set read and write permission for aziotcs, read-only for others
    sudo chown aziotcs:aziotcs /var/aziot/certs/root-ca.pem
    sudo chmod 644 /var/aziot/certs/root-ca.pem
    
  4. IoT Edge 구성 파일 config.toml에서 신뢰 번들 인증서 섹션을 찾습니다. 섹션이 누락된 경우 구성 템플릿 파일에서 복사할 수 있습니다.

    구성 파일이 디바이스에 아직 없는 경우 /etc/aziot/config.toml.edge.template을(를) 템플릿으로 사용하여 구성 파일을 만듭니다.

  5. trust_bundle_cert 키를 인증서 파일 위치로 설정합니다.

    trust_bundle_cert = "file:///var/aziot/certs/root-ca.pem"
    
  6. 구성을 적용합니다.

    sudo iotedge config apply
    

OS 인증서 저장소에 루트 CA 설치

신뢰 번들 파일에 인증서를 설치하면 컨테이너 모듈에서 사용할 수 있지만 Azure Device Update 또는 Defender와 같은 호스트 모듈에서는 사용할 수 없습니다. 호스트 수준 구성 요소를 사용하거나 다른 TLS 문제가 발생하는 경우 운영 체제 인증서 저장소에 루트 CA 인증서도 설치합니다.

sudo cp /var/aziot/certs/my-root-ca.pem /usr/local/share/ca-certificates/my-root-ca.pem.crt

sudo update-ca-certificates

인증서 및 프라이빗 키 파일 가져오기

IoT Edge는 기존 인증서 및 프라이빗 키 파일을 사용하여 Azure를 인증하거나 증명하고, 새 모듈 서버 인증서를 발급하고, EST 서버를 인증할 수 있습니다. 설치:

  1. 인증서 및 프라이빗 키 파일이 형식 요구 사항을 충족하는지 확인합니다.

  2. PEM 파일을 IoT Edge 모듈이 액세스할 수 있는 IoT Edge 디바이스에 복사합니다. 예를 들어 /var/aziot/ 디렉터리가 있습니다.

    # If the certificate and keys directories don't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    sudo mkdir -p /var/aziot/secrets
    sudo chown aziotks:aziotks /var/aziot/secrets
    sudo chmod 700 /var/aziot/secrets
    
    # Copy certificate and private key into the correct directory
    sudo cp my-cert.pem /var/aziot/certs
    sudo cp my-private-key.pem /var/aziot/secrets
    
  3. IoT Edge의 인증서 서비스 aziotcs 및 키 서비스 aziotks에 대한 소유권을 각각 인증서와 프라이빗 키에 부여합니다.

    # Give aziotcs ownership to certificate
    # Read and write for aziotcs, read-only for others
    sudo chown aziotcs:aziotcs /var/aziot/certs/my-cert.pem
    sudo chmod 644 /var/aziot/certs/my-cert.pem
    
    # Give aziotks ownership to private key
    # Read and write for aziotks, no permission for others
    sudo chown aziotks:aziotks /var/aziot/secrets/my-private-key.pem
    sudo chmod 600 /var/aziot/secrets/my-private-key.pem
    
  4. config.toml에서 구성할 인증서 형식에 해당하는 섹션을 찾습니다. 예를 들어, cert 키워드를 검색할 수 있습니다.

  5. 구성 템플릿의 예를 사용하여 디바이스 ID 인증서 또는 Edge CA 파일을 구성합니다. 예 패턴은 다음과 같습니다.

    cert = "file:///var/aziot/certs/my-cert.pem"
    pk = "file:///var/aziot/secrets/my-private-key.pem"
    
  6. 구성 적용

    sudo iotedge config apply
    

인증서 만료 시 오류를 방지하려면 인증서 만료 전에 파일 및 구성을 수동으로 업데이트해야 합니다.

예: PKI 공급자의 디바이스 ID 인증서 파일 사용

PKI 공급자에게 TLS 클라이언트 인증서와 프라이빗 키를 요청합니다.

디바이스 ID 인증서 요구 사항:

  • 표준 클라이언트 인증서 확장: ExtendedKeyUsage = clientAuth keyUsage = critical, digitalSignature
  • CA 인증서 회전을 위해 동일한 CN을 사용하여 발급 CA를 구분하는 데 도움이 되는 키 식별자입니다.
    • subjectKeyIdentifier = hash
    • authorityKeyIdentifier = keyid:always,issuer:always

CN(일반 이름)이 IoT Hub에 등록된 IoT Edge 디바이스 ID 또는 DPS에 등록 ID와 일치하는지 확인합니다. 예를 들어, 다음 디바이스 ID 인증서에서 Subject: CN = my-device는 일치해야 하는 중요한 필드입니다.

디바이스 ID 인증서 예:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 48 (0x30)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN = myPkiCA
        Validity
            Not Before: Jun 28 21:27:30 2022 GMT
            Not After : Jul 28 21:27:30 2022 GMT
        Subject: CN = my-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:ad:b0:63:1f:48:19:9e:c4:9d:91:d1:b0:b0:e5:
                    ...
                    80:58:63:6d:ab:56:9f:90:4e:3f:dd:df:74:cf:86:
                    04:af
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
            X509v3 Subject Key Identifier:
                C7:C2:DC:3C:53:71:B8:42:15:D5:6C:4B:5C:03:C2:2A:C5:98:82:7E
            X509v3 Authority Key Identifier:
                keyid:6E:57:C7:FC:FE:50:09:75:FA:D9:89:13:CB:D2:CA:F2:28:EF:9B:F6

    Signature Algorithm: ecdsa-with-SHA256
         30:45:02:20:3c:d2:db:06:3c:d7:65:b7:22:fe:df:9e:11:5b:
         ...
         eb:da:fc:f1:6a:bf:31:63:db:5a:16:02:70:0f:cf:c8:e2
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----

PKI에서 제공하는 인증서 파일에 액세스하지 않고 테스트하려면 디바이스 기능을 테스트하기 위한 데모 인증서 만들기를 참조하여 단기 비프로덕션 디바이스 ID 인증서 및 프라이빗 키를 만듭니다.

IoT Hub로 프로비전할 때의 구성 예:

[provisioning]
source = "manual"
# ...
[provisioning.authentication]
method = "x509"

identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"

DPS로 프로비전할 때의 구성 예:

[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"

identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"

수동 인증서 관리의 오버헤드는 위험하고 오류가 발생하기 쉽습니다. 프로덕션의 경우 자동 인증서 관리와 함께 IoT Edge를 사용하는 것이 좋습니다.

Edge CA 관리

Edge CA에는 두 가지 모드가 있습니다.

  • 빠른 시작이 기본 동작입니다. 빠른 시작은 테스트용이며 프로덕션에는 적합하지 않습니다.
  • 프로덕션 모드에서는 Edge CA 인증서 및 프라이빗 키에 대한 자체 원본을 제공해야 합니다.

빠른 시작 에지 CA

시작하는 데 도움이 되도록 IoT Edge는 처음 시작할 때 기본적으로 Edge CA 인증서를 자동으로 생성합니다. 이 자체 서명된 인증서는 프로덕션이 아닌 개발 및 테스트 시나리오에만 사용할 수 있습니다. 기본적으로 인증서는 90일 후에 만료됩니다. 만료를 구성할 수 있습니다. 이 동작을 빠른 시작 Edge CA라고 합니다.

Quickstart Edge CA를 사용하면 구성 없이 IoT Edge를 처음 설치할 때 edgeHub 및 기타 IoT Edge 모듈이 유효한 서버 인증서를 가질 수 있습니다. 모듈 또는 다운스트림 디바이스가 보안 통신 채널을 설정해야 하므로 edgeHub에 인증서가 필요합니다. 빠른 시작 Edge CA가 없으면 PKI 공급자 또는 openssl과 같은 도구를 사용하여 유효한 서버 인증서를 제공해야 하므로 시작하기가 훨씬 더 어려울 것입니다.

Important

로컬로 생성된 인증서가 PKI에 연결되어 있지 않기 때문에 빠른 시작 Edge CA를 프로덕션에 사용하지 마세요.

인증서 기반 ID의 보안은 인증서(문서)가 구성 요소일 뿐인 제대로 작동하는 PKI(인프라)에서 파생됩니다. 잘 운영되는 PKI는 인증서 발급, 해지 및 수명 주기 관리를 포함하되 이에 국한되지 않는 보안 정책의 정의, 적용, 관리 및 적용을 가능하게 했습니다.

빠른 시작 Edge CA의 수명 사용자 지정

인증서 만료를 기본 90일이 아닌 다른 값으로 구성하려면 구성 파일의 Edge CA 인증서(빠른 시작) 섹션에 값(일)을 추가합니다.

[edge_ca]
auto_generated_edge_ca_expiry_days = 180

/var/lib/aziot/certd/certs/var/lib/aziot/keyd/keys 폴더의 콘텐츠를 삭제하여 이전에 생성된 인증서를 제거한 다음 구성을 적용합니다.

빠른 시작 Edge CA 갱신

기본적으로 IoT Edge는 인증서 수명의 80%가 되면 빠른 시작 Edge CA 인증서를 자동으로 갱신합니다. 예를 들어, 인증서의 수명이 90일인 경우 IoT Edge는 발급 후 72일에 Edge CA 인증서를 자동으로 다시 생성합니다.

자동 갱신 논리를 변경하려면 config.tomlEdge CA 인증서 섹션에 다음 설정을 추가합니다. 예시:

[edge_ca.auto_renew]
rotate_key = true
threshold = "70%"
retry = "2%"

프로덕션의 에지 CA

프로덕션 시나리오로 이동하거나 게이트웨이 디바이스를 만들려는 경우 더 이상 빠른 시작 Edge CA를 사용할 수 없습니다.

한 가지 옵션은 자체 인증서를 제공하고 수동으로 관리하는 것입니다. 그러나 위험하고 오류가 발생하기 쉬운 수동 인증서 관리 프로세스를 피하려면 가능할 때마다 EST 서버를 사용합니다.

주의

Edge CA 인증서의 CN(일반 이름)은 디바이스 구성 파일 config.toml에 정의된 디바이스 호스트 이름 매개 변수 또는 IoT Hub에 등록된 디바이스 ID와 일치할 수 없습니다.

Edge CA 갱신 계획

Edge CA 인증서가 갱신되면 모듈 서버 인증서와 같이 발급된 모든 인증서가 다시 생성됩니다. 모듈에 새 서버 인증서를 제공하기 위해 IoT Edge는 Edge CA 인증서가 갱신될 때 모든 모듈을 다시 시작합니다.

모듈 다시 시작의 잠재적인 부정적인 영향을 최소화하려면 특정 시간(예: threshold = "10d")에 Edge CA 인증서를 갱신하고 가동 중지 시간에 대해 솔루션의 종속 항목에 알릴 계획을 수립합니다.

예: PKI 공급자의 Edge CA 인증서 파일 사용

PKI 공급자에게 다음 파일을 요청합니다.

  • PKI의 루트 CA 인증서
  • 발급/CA 인증서 및 연결된 프라이빗 키

발급 CA 인증서가 Edge CA가 되려면 다음 확장이 있어야 합니다.

subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, digitalSignature, keyCertSign

결과 Edge CA 인증서의 예:

openssl x509 -in my-edge-ca-cert.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4098 (0x1002)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = myPkiCA
        Validity
            Not Before: Aug 27 00:00:50 2022 GMT
            Not After : Sep 26 00:00:50 2022 GMT
        Subject: CN = my-edge-ca.ca
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:e1:cb:9c:c0:41:d2:ee:5d:8b:92:f9:4e:0d:3e:
                    ...
                    25:f5:58:1e:8c:66:ab:d1:56:78:a5:9c:96:eb:01:
                    e4:e3:49
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                FD:64:48:BB:41:CE:C1:8A:8A:50:9B:2B:2D:6E:1D:E5:3F:86:7D:3E
            X509v3 Authority Key Identifier:
                keyid:9F:E6:D3:26:EE:2F:D7:84:09:63:84:C8:93:72:D5:13:06:8E:7F:D1
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
            X509v3 Key Usage: critical
                Digital Signature, Certificate Sign
    Signature Algorithm: sha256WithRSAEncryption
         20:c9:34:41:a3:a4:8e:7c:9c:6e:17:f5:a6:6f:e5:fc:6e:59:
         ...
         7c:20:5d:e5:51:85:4c:4d:f7:f8:01:84:87:27:e3:76:65:47:
         9e:6a:c3:2e:1a:f0:dc:9d
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----

최신 파일을 받으면 신뢰 번들을 업데이트합니다.

trust_bundle_cert = "file:///var/aziot/root-ca.pem"

그런 다음 인증서 및 프라이빗 키 파일을 사용하도록 IoT Edge를 구성합니다.

[edge_ca]
cert = "file:///var/aziot/my-edge-ca-cert.pem"
pk = "file:///var/aziot/my-edge-ca-private-key.key.pem"

이전에 디바이스에서 IoT Edge용으로 다른 인증서를 사용한 적이 있다면 /var/lib/aziot/certd/certs의 파일과 /var/lib/aziot/keyd/keys의 인증서에 연결된 프라이빗 키(모든 키가 아님)를 삭제합니다. IoT Edge는 사용자가 제공한 새 CA 인증서를 사용하여 이를 다시 만듭니다.

이 방법을 사용하려면 인증서가 만료될 때 파일을 수동으로 업데이트해야 합니다. 이 문제를 방지하려면 자동 관리에 EST를 사용하는 것이 좋습니다.

EST 서버로 자동 인증서 관리

IoT Edge는 자동 인증서 발급 및 갱신을 위해 EST(보안 전송을 통해 등록) 서버와 상호 작용할 수 있습니다. 위험하고 오류가 발생하기 쉬운 수동 인증서 관리의 필요성을 바꾸므로 프로덕션에는 EST를 사용하는 것이 좋습니다. 전역적으로 구성할 수 있으며 각 인증서 유형에 대해 재정의할 수 있습니다.

이 시나리오에서 부트스트랩 인증서와 프라이빗 키는 수명이 길고 잠재적으로 제조 중에 디바이스에 설치될 것으로 예상됩니다. IoT Edge는 부트스트랩 자격 증명을 사용하여 후속 요청과 DPS 또는 IoT Hub에 대한 인증에 대한 ID 인증서를 발급하기 위한 초기 요청에 대해 EST 서버에 인증합니다.

  1. EST 서버에 액세스합니다. EST 서버가 없는 경우 다음 옵션 중 하나를 사용하여 테스트를 시작합니다.

  2. IoT Edge 디바이스 구성 파일 config.toml에서 IoT Edge가 EST 서버의 TLS 인증서의 유효성을 검사하는 데 사용하는 신뢰할 수 있는 루트 인증서의 경로를 구성합니다. EST 서버에 공개적으로 신뢰할 수 있는 루트 TLS 인증서가 있는 경우 이 단계는 선택 사항입니다.

    [cert_issuance.est]
    trusted_certs = [
       "file:///var/aziot/root-ca.pem",
    ]
    
  3. EST 서버의 기본 URL을 제공합니다. config.toml에서 EST 서버의 URL과 함께 다음 섹션을 추가합니다.

    [cert_issuance.est.urls]
    default = "https://example.org/.well-known/est"
    
  4. 인증을 위해 EST 인증서를 구성하려면 인증서 및 프라이빗 키에 대한 경로와 함께 다음 섹션을 추가합니다.

    [cert_issuance.est.auth]
    bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem"
    bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem"
    
    [cert_issuance.est.identity_auto_renew]
    rotate_key = true
    threshold = "80%"
    retry = "4%"
    
  5. 구성 변경 내용을 적용합니다.

    sudo iotedge config apply
    

[cert_issuance.est.identity_auto_renew]의 설정은 다음 섹션에서 다룹니다.

사용자 이름 및 암호 인증

인증서를 사용하여 EST 서버에 인증할 수 없는 경우 대신 공유 암호 또는 사용자 이름과 비밀을 사용할 수 있습니다.

[cert_issuance.est.auth]
username = "username"
password = "password"

자동 갱신 매개 변수 구성

인증서 파일을 수동으로 관리하는 대신 IoT Edge에는 만료 전에 인증서를 가져오고 갱신하는 기본 제공 기능이 있습니다. 인증서를 갱신하려면 IoT Edge에서 관리할 수 있는 발급 방법이 필요합니다. EST(보안 전송을 통해 등록) 서버는 한 가지 발급 방법이지만 IoT Edge는 기본적으로 빠른 시작 CA를 자동으로 갱신할 수도 있습니다. 인증서 갱신은 인증서 형식별로 구성됩니다.

  1. config.toml에서 구성할 인증서 형식에 해당하는 섹션을 찾습니다. 예를 들어, auto_renew 키워드를 검색할 수 있습니다.

  2. 구성 템플릿의 예를 사용하여 디바이스 ID 인증서, Edge CA 또는 EST ID 인증서를 구성합니다. 예 패턴은 다음과 같습니다.

    [REPLACE_WITH_CERT_TYPE]
    # ...
    method = "est"
    # ...
    
    [REPLACE_WITH_CERT_TYPE.auto_renew]
    rotate_key = true
    threshold = "80%" 
    retry = "4%"
    
  3. 구성 적용

    sudo iotege config apply
    

다음 표에는 auto_renew의 각 옵션이 수행하는 작업이 나열되어 있습니다.

매개 변수 설명
rotate_key IoT Edge가 인증서를 갱신할 때 프라이빗 키를 회전해야 하는지 여부를 제어합니다.
threshold IoT Edge가 인증서 갱신을 시작해야 하는 시기를 설정합니다. 다음과 같이 지정할 수 있습니다.
- 백분율: 0100 사이의 정수(%). 갱신은 인증서 수명을 기준으로 시작됩니다. 예를 들어, 80%로 설정하면 100일 동안 유효한 인증서는 만료 20일 전에 갱신을 시작합니다.
- 절대 시간: 정수 다음에 min(분) 또는 day(일). 갱신은 인증서 만료 시간을 기준으로 시작됩니다. 예를 들어, 4일을 4day로 설정하거나 10분을 10min으로 설정하면 인증서가 만료되기 전에 해당 시간에 갱신을 시작합니다. threshold가 인증서 수명보다 큰 의도하지 않은 구성 오류를 방지하려면 가능할 때마다 대신 백분율을 사용하는 것이 좋습니다.
retry 실패 시 갱신을 다시 시도해야 하는 빈도를 제어합니다. threshold와 마찬가지로 동일한 형식을 사용하여 백분율 또는 절대 시간으로 유사하게 지정할 수 있습니다.

예: EST로 디바이스 ID 인증서 자동 갱신

프로덕션에 권장되는 자동 디바이스 ID 인증서 발급 및 갱신에 EST 및 IoT Edge를 사용하려면 IoT Edge가 DPS CA 기반 등록 그룹의 일부로 프로비전해야 합니다. 예시:

## DPS provisioning with X.509 certificate
[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"

[provisioning.attestation.identity_cert]
method = "est"
common_name = "my-device"

[provisioning.attestation.identity_cert.auto_renew]
rotate_key = true
threshold = "80%"
retry = "4%"

발급 방법이 EST로 설정된 경우 Edge CA 자동 갱신을 사용하도록 설정해야 합니다. Edge CA 만료는 많은 IoT Edge 기능을 중단시키므로 피해야 합니다. 상황에 따라 Edge CA 인증서 수명 주기를 완전히 제어해야 하는 경우 대신 수동 Edge CA 관리 방법을 사용합니다.

IoT Hub를 통한 수동 X.509 프로비전 및 개별 등록이 있는 DPS를 포함하여 다른 프로비전 방법과 함께 EST 또는 auto_renew를 사용하지 마세요. IoT Edge는 인증서가 갱신될 때 Azure에서 인증서 지문을 업데이트할 수 없으므로 IoT Edge가 다시 연결되지 않습니다.

예: EST를 사용한 자동 Edge CA 관리

프로덕션을 위해 EST 자동 Edge CA 발급 및 갱신을 사용합니다. EST 서버가 구성되면 전역 설정을 사용하거나 다음 예와 유사하게 재정의할 수 있습니다.

[edge_ca]
method = "est"

common_name = "my-edge-CA"
url = "https://ca.example.org/.well-known/est"

bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem"
bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem"

[edge_ca.auto_renew]
rotate_key = true
threshold = "90%"
retry = "2%"

모듈 서버 인증서

Edge Daemon은 Edge 모듈에서 사용할 모듈 서버 및 ID 인증서를 발급합니다. 필요에 따라 ID 및 서버 인증서를 갱신하는 것은 Edge 모듈의 책임입니다.

갱신

서버 인증서는 Edge CA 인증서에서 발급될 수 있습니다. 발급 방법에 관계없이 이러한 인증서는 모듈에서 갱신해야 합니다. 사용자 지정 모듈을 개발하는 경우 모듈에서 갱신 논리를 구현해야 합니다.

edgeHub 모듈은 인증서 갱신 기능을 지원합니다. 다음 환경 변수를 사용하여 edgeHub 모듈 서버 인증서 갱신을 구성할 수 있습니다.

  • ServerCertificateRenewAfterInMs: 인증서 만료 시간에 관계없이 edgeHub 서버 인증서가 갱신되는 기간을 밀리초 단위로 설정합니다.
  • MaxCheckCertExpiryInMs: edgeHub 서비스가 edgeHub 서버 인증서 만료를 확인할 때 기간을 밀리초 단위로 설정합니다. 변수가 설정된 경우 인증서 만료 시간에 관계없이 확인이 수행됩니다.

환경 변수에 대한 자세한 내용은 EdgeHub 및 EdgeAgent 환경 변수를 참조하세요.

1.2 이후의 변경 내용

  • 디바이스 CA 인증서의 이름이 에지 CA 인증서로 바뀌었습니다.
  • 워크로드 CA 인증서는 더 이상 사용되지 않습니다. 이제 IoT Edge 보안 관리자는 중간 워크로드 CA 인증서 없이 에지 CA 인증서에서 직접 IoT Edge 허브 edgeHub 서버 인증서를 생성합니다.
  • 기본 구성 파일에는 기본적으로 /etc/iotedge/config.yaml에서 /etc/aziot/config.toml까지의 새 이름과 위치가 있습니다. 구성 정보를 이전 위치와 구문에서 새 위치와 구문으로 이전하는 데 iotedge config import 명령을 사용하는 것이 도움이 될 수 있습니다.

다음 단계

프로덕션에 솔루션을 배포하기 전에 IoT Edge 디바이스에 인증서를 설치해야 합니다. 프로덕션에서 IoT Edge 솔루션 배포를 준비하는 방법에 대해 자세히 알아보세요.