Microsoft Entra ID를 사용하여 IoT Hub에 대한 액세스 제어

Microsoft Entra ID를 사용하여 디바이스 ID 만들기직접 메서드 호출 같은 Azure IoT Hub 서비스 API에 대한 요청을 인증할 수 있습니다. 또한 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 동일한 서비스 API에 권한을 부여할 수 있습니다. 이러한 기술을 함께 사용하면 Microsoft Entra 보안 주체에 대한 IoT Hub 서비스 API에 액세스할 수 있는 권한을 부여할 수 있습니다. 보안 주체는 사용자, 그룹 또는 애플리케이션 서비스 주체일 수 있습니다.

Microsoft Entra ID를 사용하여 액세스를 인증하고 Azure RBAC를 사용하여 권한을 제어하면 보안 토큰에 대한 보안 성능과 사용 편의성이 향상됩니다. 보안 토큰에 내재된 잠재적 보안 취약성을 최소화하려면 Microsoft Entra 인증을 적용하는 것이 좋습니다.

참고 항목

Microsoft Entra ID를 사용한 인증은 IoT Hub 디바이스 API(예: 디바이스-클라우드 메시지 및 보고된 속성 업데이트)에서 지원되지 않습니다. 대칭 키 또는 X.509를 사용하여 IoT Hub에 디바이스를 인증하세요.

인증 및 권한 부여

인증은 사용자 자신이 누구인지 증명하는 프로세스입니다. 인증은 IoT Hub에 대한 사용자 또는 디바이스의 ID를 확인합니다. 이 프로세스는 AuthN으로 축약되는 경우가 많습니다. 권한 부여는 IoT Hub에서 인증된 사용자 또는 디바이스에 대한 권한을 확인하는 프로세스입니다. 액세스할 수 있는 리소스 및 명령과 해당 리소스 및 명령으로 수행할 수 있는 작업을 지정합니다. 권한 부여는 AuthZ로 축약되는 경우가 많습니다.

Microsoft Entra 보안 주체가 IoT Hub 서비스 API에 대한 액세스를 요청하면 보안 주체의 ID가 먼저 인증됩니다. 인증 시 요청에는 OAuth 2.0 액세스 토큰을 런타임에 포함해야 합니다. 토큰을 요청하는 리소스 이름은 https://iothubs.azure.net입니다. 애플리케이션이 Azure VM, Azure Function 앱 또는 App Service 앱 같은 Azure 리소스에서 실행되는 경우 관리 ID로 표시될 수 있습니다.

Microsoft Entra 보안 주체가 인증되면 다음 단계는 권한 부여입니다. 이 단계에서는 IoT Hub가 Microsoft Entra 역할 할당 서비스를 사용하여 보안 주체가 보유한 권한을 확인합니다. 보안 주체의 권한이 요청된 리소스 또는 API와 일치하면 IoT Hub에서 요청을 승인합니다. 따라서 이 단계에서는 하나 이상의 Azure 역할을 보안 주체에 할당해야 합니다. IoT Hub는 일반적인 권한 그룹이 있는 몇 가지 기본 제공 역할을 제공합니다.

Azure RBAC 역할 할당을 사용하여 IoT Hub에 대한 액세스 관리

Microsoft Entra ID 및 RBAC를 사용하는 경우 IoT Hub에서 API를 요청하는 보안 주체가 권한을 부여하는 데 적절한 수준의 권한을 갖도록 요구합니다. 권한을 보안 주체에 부여하려면 역할 할당을 부여합니다.

최소한의 권한을 보장하려면 항상 가능한 최저 리소스 범위(IoT Hub 범위일 수 있음)에서 적절한 역할을 할당합니다.

IoT Hub에서 Microsoft Entra ID 및 RBAC를 사용하여 IoT Hub 서비스 API에 대한 액세스 권한을 부여하기 위해 제공하는 Azure 기본 제공 역할은 다음과 같습니다.

역할 설명
IoT Hub 데이터 기여자 IoT Hub 데이터 평면 작업에 대한 모든 권한을 허용합니다.
IoT Hub 데이터 읽기 권한자 IoT Hub 데이터 평면 속성에 대한 모든 읽기 권한을 허용합니다.
IoT Hub 레지스트리 기여자 IoT Hub 디바이스 레지스트리에 대한 모든 권한을 허용합니다.
IoT Hub 쌍 기여자 모든 IoT Hub 디바이스 및 모듈 쌍에 대한 읽기/쓰기 액세스 권한을 허용합니다.

필요한 권한을 결합하여 IoT Hub에서 이용할 사용자 지정 역할을 정의할 수도 있습니다. 자세한 내용은 Azure 역할 기반 액세스 제어에 대한 사용자 지정 역할 만들기를 참조하세요.

리소스 범위

Azure RBAC 역할을 보안 주체에 할당하기 전에 보안 주체에게 부여해야 하는 액세스 범위를 결정합니다. 항상 가능한 가장 좁은 범위만 부여하는 것이 가장 좋습니다. 더 광범위한 범위에서 정의된 Azure RBAC 역할은 그 아래에 있는 리소스에 상속됩니다.

이 목록에서는 IoT Hub에 대한 액세스 범위를 지정할 수 있는 수준에 대해 설명하며, 가장 좁은 범위부터 시작합니다.

  • IoT 허브. 이 범위에서 역할 할당은 IoT Hub에 적용됩니다. 개별 IoT 허브보다 작은 범위는 없습니다. 개별 디바이스 ID 또는 트윈 섹션과 같은 더 작은 범위의 역할 할당은 지원되지 않습니다.
  • 리소스 그룹. 이 범위에서 역할 할당은 리소스 그룹의 모든 IoT Hub에 적용됩니다.
  • 구독. 이 범위에서 역할 할당은 구독의 전체 리소스 그룹에 있는 모든 IoT Hub에 적용됩니다.
  • 관리 그룹. 이 범위에서 역할 할당은 관리 그룹의 모든 구독에 있는 전체 리소스 그룹의 모든 IoT Hub에 적용됩니다.

IoT Hub 서비스 API의 권한

다음 표에서는 IoT Hub 서비스 API 작업에 사용할 수 있는 권한을 설명합니다. 클라이언트에서 특정 작업을 호출할 수 있도록 하려면, 클라이언트에 할당된 RBAC 역할에서 해당 작업에 충분한 권한을 제공해야 합니다.

RBAC 작업 설명
Microsoft.Devices/IotHubs/devices/read 디바이스 또는 모듈 ID 읽기
Microsoft.Devices/IotHubs/devices/write 디바이스 또는 모듈 ID 만들기나 업데이트
Microsoft.Devices/IotHubs/devices/delete 디바이스 또는 모듈 ID 삭제
Microsoft.Devices/IotHubs/twins/read 디바이스 또는 모듈 쌍 읽기
Microsoft.Devices/IotHubs/twins/write 디바이스 또는 모듈 쌍 쓰기
Microsoft.Devices/IotHubs/jobs/read 작업 목록 반환
Microsoft.Devices/IotHubs/jobs/write 작업 만들기 또는 업데이트
Microsoft.Devices/IotHubs/jobs/delete 작업 삭제
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action 모든 디바이스에 클라우드-디바이스 메시지 보내기
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action 클라우드-디바이스 메시지 피드백 알림 받기, 완료 또는 중단
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action 디바이스에 대해 보류 중인 모든 명령 삭제
Microsoft.Devices/IotHubs/directMethods/invoke/action 모든 디바이스 또는 모듈에서 직접 메서드 호출
Microsoft.Devices/IotHubs/fileUpload/notifications/action 파일 업로드 알림 받기, 완료 또는 중단
Microsoft.Devices/IotHubs/statistics/read 디바이스 및 서비스 통계 읽기
Microsoft.Devices/IotHubs/configurations/read 디바이스 관리 구성 읽기
Microsoft.Devices/IotHubs/configurations/write 디바이스 관리 구성 만들기 또는 업데이트
Microsoft.Devices/IotHubs/configurations/delete 디바이스 관리 구성 삭제
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action 에지 디바이스에 구성 콘텐츠 적용
Microsoft.Devices/IotHubs/configurations/testQueries/action 구성에 대한 대상 조건 및 사용자 지정 메트릭 쿼리의 유효성 검사

참고 항목

Microsoft Entra ID 를 사용하여 IoT Hub에서 데이터를 가져오려면 사용자 지정 Event Hubs 엔드포인트로 라우팅을 설정합니다. 기본 제공 Event Hubs 호환 엔드포인트에 액세스하려면 이전과 같이 연결 문자열(공유 액세스 키) 메서드를 사용합니다.

Microsoft Entra 인증 적용

기본적으로 IoT Hub는 Microsoft Entra ID와 공유 액세스 정책 및 보안 토큰을 통한 서비스 API 액세스를 지원합니다. 보안 토큰에 내재된 잠재적인 보안 취약성을 최소화하려면 공유 액세스 정책을 사용하여 액세스를 사용하지 않도록 설정합니다.

Warning

공유 액세스 정책을 사용하여 연결을 거부하면 이 방법을 사용하여 연결하는 모든 사용자와 서비스가 즉시 액세스 권한을 잃습니다. 특히 DPS(Device Provisioning Service)는 공유 액세스 정책을 사용하는 IoT Hub 연결만 지원하므로 모든 디바이스 프로비전 흐름이 "권한 없음" 오류와 함께 실패합니다. 신중하게 진행하고 액세스를 Microsoft Entra 역할 기반 액세스로 바꾸도록 계획합니다. DPS를 사용하는 경우 진행하지 마세요.

  1. 서비스 클라이언트와 사용자가 IoT Hub에 대해 충분한 액세스 권한을 보유하고 있는지 확인합니다. 최소 권한 원칙을 따릅니다.
  2. Azure Portal에서 IoT Hub로 이동합니다.
  3. 왼쪽 창에서 공유 액세스 정책을 선택합니다.
  4. 공유 액세스 정책을 사용하여 연결에서 거부를 선택하고 경고를 검토합니다. Screenshot that shows how to turn off IoT Hub shared access policies.

이제 Microsoft Entra 및 RBAC를 통해서만 IoT Hub 서비스 API에 액세스할 수 있습니다.

Azure Portal에서 Microsoft Entra ID 액세스

공유 액세스 정책 또는 Microsoft Entra 권한을 사용하여 Azure Portal에서 IoT Hub에 대한 액세스를 제공할 수 있습니다.

IoT Hub에 액세스하려고 하면 Azure Portal에서 먼저 Microsoft에 Microsoft.Devices/iotHubs/listkeys/action을 사용하여 Azure 역할이 할당되었는지 확인합니다. 그렇다면 Azure Portal에서 공유 액세스 정책의 키를 사용하여 IoT Hub에 액세스합니다. 그렇지 않다면 Azure Portal에서 Microsoft Entra 계정을 사용하여 데이터에 액세스하려고 시도합니다.

Microsoft Entra 계정을 사용하여 Azure Portal에서 IoT Hub에 액세스하려면 IoT Hub 데이터 리소스(예: 디바이스, 트윈)에 액세스할 수 있는 권한이 필요합니다. 또한 Azure Portal에서 IoT Hub 리소스로 이동할 수 있는 권한이 필요합니다. IoT Hub에서 제공하는 기본 제공 역할은 리소스(예: 디바이스, 트윈)에 대한 액세스 권한을 부여하지만, IoT Hub 리소스에 대한 액세스 권한은 부여하지 않습니다. 따라서 포털에 액세스하려면 읽기 권한자와 같은 Azure Resource Manager 역할도 할당해야 합니다. 읽기 권한자 역할은 포털을 탐색할 수 있는 가장 제한된 역할이기 때문에 좋은 선택입니다. 공유 액세스 정책을 통해 모든 IoT Hub 데이터 리소스에 대한 액세스를 제공하는 Microsoft.Devices/iotHubs/listkeys/action 권한은 포함되지 않습니다.

계정에 할당된 권한 이외의 액세스 권한이 없도록 하려면 사용자 지정 역할을 만들 때 Microsoft.Devices/iotHubs/listkeys/action 권한을 포함하지 않습니다. 예를 들어 디바이스 ID를 읽을 수 있지만 디바이스를 만들거나 삭제할 수 없는 사용자 지정 역할을 만들려면 다음과 같은 사용자 지정 역할을 만듭니다.

  • Microsoft.Devices/IotHubs/devices/read 데이터 동작 있음
  • Microsoft.Devices/IotHubs/devices/write 데이터 동작 없음
  • Microsoft.Devices/IotHubs/devices/delete 데이터 동작 없음
  • Microsoft.Devices/iotHubs/listkeys/action 동작 없음

그런 다음, 계정에 소유자 또는 참가자 같은 Microsoft.Devices/iotHubs/listkeys/action 권한이 있는 다른 역할이 없는지 확인합니다. 계정에서 리소스 액세스 권한을 보유하고 포털을 탐색할 수 있도록 하려면 읽기 권한자를 할당합니다.

Azure CLI에서 Microsoft Entra ID 액세스

IoT Hub에 대한 대부분의 명령은 Microsoft Entra 인증을 지원합니다. key 또는 login 값을 허용하는 --auth-type 매개 변수를 사용하여 명령을 실행하는 데 사용되는 인증 유형을 제어할 수 있습니다. key 값이 기본값입니다.

  • --auth-typekey 값이 있는 경우 이전과 마찬가지로 CLI가 IoT Hub와 상호 작용할 때 적절한 정책을 자동으로 검색합니다.

  • --auth-typelogin 값이 있는 경우 Azure CLI 로그인 보안 주체의 액세스 토큰이 작업에 사용됩니다.

자세한 내용은 Azure CLI 릴리스에 대한 Azure IoT 확장 페이지를 참조하세요.

SDK 샘플

다음 단계

Device Provisioning Service를 사용하여 등록 그룹을 통해 여러 X.509 디바이스를 프로비전합니다.