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를 요청하는 보안 주체가 권한을 부여하는 데 적절한 수준의 권한을 갖도록 요구합니다. 권한을 보안 주체에 부여하려면 역할 할당을 부여합니다.
- 보안 주체가 사용자, 그룹 또는 애플리케이션 서비스 사용자인 경우 Azure Portal을 사용하여 Azure 역할 할당의 참고 자료를 따릅니다.
- 보안 주체가 관리 ID인 경우 리소스에 관리 ID 액세스 할당의 지침을 따릅니다.
최소한의 권한을 보장하려면 항상 가능한 최저 리소스 범위(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.Devices/IotHubs/devices/write
및Microsoft.Devices/IotHubs/devices/delete
가 모두 필요합니다. - 쌍 쿼리 작업에는
Microsoft.Devices/IotHubs/twins/read
가 필요합니다. - 디지털 트윈 가져오기에는
Microsoft.Devices/IotHubs/twins/read
가 필요하고, 디지털 트윈 업데이트에는Microsoft.Devices/IotHubs/twins/write
가 필요합니다. - 구성 요소 호출 명령 및 루트 수준 호출 명령에는 모두
Microsoft.Devices/IotHubs/directMethods/invoke/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 역할 기반 액세스로 바꾸도록 계획합니다.
Device Provisioning Service를 사용하는 경우 진행하지 마세요.
서비스 클라이언트와 사용자가 IoT Hub에 대해 충분한 액세스 권한을 보유하고 있는지 확인합니다. 최소 권한 원칙을 따릅니다.
Azure Portal에서 IoT Hub로 이동합니다.
왼쪽 창에서 공유 액세스 정책을 선택합니다.
공유 액세스 정책을 사용하여 연결에서 거부를 선택하고 경고를 검토합니다.
저장을 선택합니다.
이제 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-type
에key
값이 있는 경우 이전과 마찬가지로 CLI가 IoT Hub와 상호 작용할 때 적절한 정책을 자동으로 검색합니다.--auth-type
에login
값이 있는 경우 Azure CLI 로그인 보안 주체의 액세스 토큰이 작업에 사용됩니다.
자세한 내용은 Azure CLI 릴리스에 대한 Azure IoT 확장 페이지를 참조하세요.
SDK 샘플
다음 단계
- 애플리케이션에서 Microsoft Entra ID를 사용하는 이점에 대한 자세한 내용은 Microsoft ID 플랫폼과 통합을 참조하세요.
- 액세스 토큰, 새로 고침 토큰 및 ID 토큰을 권한 부여 및 인증에 사용하는 방법에 대해 알아보려면 보안 토큰을 참조하세요.