MQTT 클라이언트에 대한 액세스 제어

액세스 제어를 사용하면 역할 기반 액세스 제어 모델을 사용하여 토픽을 게시하거나 구독하는 클라이언트의 권한 부여를 관리할 수 있습니다. IoT 환경의 엄청난 규모를 감안할 때 각 토픽에 각 클라이언트에 대한 권한을 할당하는 것은 매우 지루한 작업입니다. Azure Event Grid의 MQTT 브로커 기능은 클라이언트 및 토픽을 클라이언트 그룹 및 토픽 공간으로 그룹화하여 이러한 규모 문제를 해결합니다.

액세스 제어 모델의 주요 구성 요소는 다음과 같습니다.

클라이언트는 MQTT 토픽을 게시 및/또는 구독해야 하는 디바이스 또는 애플리케이션을 나타냅니다.

클라이언트 그룹은 동일한 MQTT 토픽 집합을 게시 및/또는 구독하기 위해 동일한 액세스 권한이 필요한 클라이언트 집합입니다. 클라이언트 그룹은 RBAC 모델의 보안 주체를 나타냅니다.

토픽 공간은 토픽 템플릿 집합을 통해 여러 토픽을 나타냅니다. 토픽 템플릿은 MQTT 와일드카드와 함께 변수를 지원하는 MQTT 필터의 확장입니다. 각 토픽 공간은 동일한 클라이언트 집합이 통신하는 데 사용해야 하는 토픽을 나타냅니다. 토픽 공간은 RBAC 모델의 리소스를 나타냅니다.

권한 바인딩은 특정 토픽 공간이 나타내는 토픽을 게시하거나 구독할 수 있는 특정 클라이언트 그룹에 대한 액세스 권한을 부여합니다. 권한 바인딩은 RBAC 모델의 역할을 나타냅니다.

Diagram of the access control model.

예:

다음 예제에서는 다음 요구 사항에 따라 액세스 제어 모델을 구성하는 방법을 자세히 설명합니다.

예제 1:

팩터리에는 서로 통신해야 하는 컴퓨터를 포함하여 각 영역이 있는 여러 영역이 있습니다. 그러나 팩터리의 다른 영역에 있는 컴퓨터는 해당 컴퓨터와 통신할 수 없습니다.

클라이언트 역할 토픽/토픽 필터
Area1_Machine1 게시자 areas/area1/machines/machine1
Area1_Machine2 구독자 areas/area1/machines/#
Area2_Machine1 게시자 areas/area2/machines/machine1
Area2_Machine2 구독자 areas/area2/machines/#

구성

  • 각 컴퓨터에 대한 클라이언트 리소스를 만듭니다.
  • 각 팩터리 영역의 컴퓨터에 대한 클라이언트 그룹을 만듭니다.
  • 해당 영역의 컴퓨터가 통신하는 토픽을 나타내는 각 영역에 대한 토픽 공간을 만듭니다.
  • 각 영역의 클라이언트 그룹에 대한 두 개의 권한 바인딩을 만들어 해당 영역의 토픽 공간을 게시하고 구독합니다.
클라이언트 클라이언트 그룹 권한 바인딩 토픽 공간
Area1_Machine1 Area1Machines Area1-Pub Area1Messages -Topic 템플릿: areas/area1/machines/#
Area1_Machine2 Area1Machines Area1-Sub Area1Messages -Topic 템플릿: areas/area1/machines/#
Area2_Machine1 Area2Machines Area2-Pub Area2Messages -Topic 템플릿: area/area2/machines/#
Area2_Machine2 Area2Machines Area2-Sub Area2Messages -Topic 템플릿: area/area2/machines/#

예 2:

이전 예제에 대한 추가 요구 사항을 가정해 보겠습니다. 각 영역에는 컴퓨터와 함께 관리 클라이언트가 있으며, 컴퓨터가 손상될 경우 게시할 수 있는 액세스 권한이 없어야 합니다. 반면, 관리 클라이언트는 컴퓨터에 명령을 보내기 위한 게시 액세스 권한과 컴퓨터에서 원격 분석을 수신하기 위한 구독 액세스 권한이 필요합니다.

클라이언트 역할 토픽/토픽 필터
Area1_Machine1 게시자 areas/area1/machines/machine1
구독자 areas/area1/mgmt/#
Area1_Mgmt1 게시자 areas/area1/mgmt/machine1
구독자 areas/area1/machines/#
Area2_Machine1 게시자 areas/area2/machines/machine1
구독자 areas/area2/mgmt/#
Area2_ Mgmt1 게시자 areas/area2/mgmt/machine1
구독자 areas/area2/machines/#

구성:

  • 각 컴퓨터 및 관리 클라이언트에 대한 클라이언트 리소스를 만듭니다.
  • 영역당 두 개의 클라이언트 그룹을 만듭니다. 하나는 관리 클라이언트용이고 다른 하나는 컴퓨터용입니다.
  • 각 영역별로 두 개의 토픽 공간을 만듭니다. 하나는 원격 분석 토픽을 나타내고 다른 하나는 명령 토픽을 나타냅니다.
  • 각 영역의 관리 클라이언트별로 두 개의 권한 바인딩을 만들어 명령 토픽 공간에 게시하고 원격 분석 토픽 공간을 구독합니다.
  • 각 영역의 컴퓨터별로 두 개의 권한 바인딩을 만들어 명령 토픽 공간을 구독하고 원격 분석 토픽 공간에 게시합니다.
클라이언트 클라이언트 그룹 권한 바인딩 토픽/토픽 필터
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry -Topic 템플릿: area/area1/machines/#
Area1Machines-Sub Area1Commands -Topic 템플릿: areas/area1/mgmt/#
Area1_MgmtClient1 Area1Mgmt Area1Mgmt-Pub Area1Commands -Topic 템플릿: areas/area1/mgmt/#
Area1Mgmt-Sub Area1Telemetry -Topic 템플릿: area/area1/machines/#
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry -Topic 템플릿: area/area2/machines/#
Area2Machines-Sub Area2Commands -Topic 템플릿: areas/area2/mgmt/#
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands -Topic 템플릿: areas/area2/mgmt/#
Area2Mgmt-Sub Area2Telemetry -Topic 템플릿: area/area2/machines/#

세부적인 액세스 제어

세분화된 액세스 제어를 사용하면 클라이언트 그룹 내에서 각 클라이언트의 권한 부여를 제어하여 자체 토픽을 게시하거나 구독할 수 있습니다. 이 세분화된 액세스 제어는 토픽 템플릿에서 변수를 사용하여 수행됩니다.

클라이언트 그룹이 모든 토픽 템플릿을 사용하여 특정 토픽 공간에 액세스할 수 있더라도 토픽 템플릿 내의 변수를 사용하면 해당 클라이언트 그룹 내의 각 클라이언트에 대한 권한 부여를 제어하여 자체 토픽을 게시하거나 구독할 수 있습니다. 예를 들어 클라이언트 그룹 "machines"에 "machine1" 및 "machine2"라는 두 개의 클라이언트가 포함되어 있는 경우입니다. 변수를 사용하면 machine1만 MQTT 토픽 "machines/machine1/telemetry" 및 "machine2"에 원격 분석을 게시하여 MQTT 토픽 "machines/machine2/telemetry"에 메시지를 게시할 수 있습니다.

변수는 클라이언트 인증 이름 또는 클라이언트 특성을 나타냅니다. MQTT 브로커와 통신하는 동안 각 클라이언트는 MQTT 토픽의 변수를 대체 값으로 바꿉니다. 예를 들어 ${client.authenticationName} 변수는 각 클라이언트의 인증 이름(machine1, machine2 등)으로 바뀝니다. MQTT 브로커는 인증 이름 또는 지정된 특성 값과 일치하는 대체 값이 있는 클라이언트에만 액세스를 허용합니다.

예를 들어 다음 구성을 고려합니다.

  • 클라이언트 그룹: 컴퓨터
  • 토픽 공간: MachinesTelemetry
    • 토픽 템플릿 "machines/${client.authenticationName}/telemetry"
  • 권한 바인딩: 클라이언트 그룹: 컴퓨터, 토픽 공간: machinesTelemetry, 사용 권한: 게시자

이 구성을 사용하면 클라이언트 인증 이름이 "machine1"인 클라이언트만 토픽 "machines/machine1/telemetry"에 게시할 수 있으며, 클라이언트 인증 이름이 "machine 2"인 컴퓨터만 토픽 "machines/machine2/telemetry" 등에 게시할 수 있습니다. 따라서 machine2는 동일한 토픽 공간에 액세스할 수 있고 그 반대의 경우도 마찬가지이지만 machine1을 대신하여 잘못된 정보를 게시할 수 없습니다.

Diagram of the granular access control example.

다음 단계:

인증 및 권한 부여에 대한 자세한 정보: