

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 외부 애플리케이션을 EMQX 브로커에 연결
<a name="connect-external-applications-emqx"></a>

이 가이드에서는 배포된 MQTT 지원 V3 게이트웨이의 EMQX AWS IoT SiteWise 브로커를 통해 외부 애플리케이션을 Edge 게이트웨이에 연결하는 방법을 설명합니다. 외부 애플리케이션에는 사용자 지정 모니터링 도구, 타사 시각화 소프트웨어 또는 엣지에서 산업 데이터와 상호 작용해야 하는 레거시 시스템이 포함될 수 있습니다.

EMQX 배포 구성, 보안 연결을 위한 TLS 설정, 특정 주제에 대한 액세스를 제어하는 권한 부여 규칙을 포함하여 Linux 및 Microsoft Windows 환경 모두에 대한 구성 단계를 다룹니다.

**참고**  
EMQX는 AWS IoT SiteWise Edge의 공급업체 또는 공급업체가 아닙니다.

**중요**  
게이트웨이에 대한 연결을 보호하려면 AWS IoT Greengrass 클라이언트 디바이스 인증 기능을 통해 인증서 기반 인증을 사용하는 것이 좋습니다. 이 방법은 상호 TLS(mTLS) 인증을 통해 강력한 보안을 제공합니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [코어 디바이스에 클라이언트 디바이스 연결을](https://docs.aws.amazon.com/greengrass/v2/developerguide/connect-client-devices.html) 참조하세요.

인증서 기반 인증을 사용할 수 없는 경우이 가이드에 따라 사용자 이름과 암호를 사용하여 인증을 설정합니다.

## 사전 조건
<a name="emqx-broker-prerequisites"></a>
+ 배포되어 온라인 상태인 SiteWise Edge MQTT 지원 V3 게이트웨이
+ 게이트웨이 호스트에 대한 액세스
+  AWS IoT SiteWise 및 AWS IoT Greengrass 콘솔에 대한 액세스

**Topics**
+ [사전 조건](#emqx-broker-prerequisites)
+ [Edge의 EMQX 브로커에 대한 메시지 AWS IoT SiteWise 페이로드 형식](connect-broker-payload-format.md)
+ [EMQX 브로커 구성](configure-emqx-broker.md)
+ [애플리케이션을 Edge의 EMQX AWS IoT SiteWise 브로커에 연결](connect-app-to-broker.md)
+ [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md)

# Edge의 EMQX 브로커에 대한 메시지 AWS IoT SiteWise 페이로드 형식
<a name="connect-broker-payload-format"></a>

IoT SiteWise 게시자 구성 요소가 외부 애플리케이션의 데이터를 사용하고 AWS IoT SiteWise 클라우드에 게시하려면 브로커로 전송된 페이로드가 특정 요구 사항을 충족해야 합니다.

페이로드 형식을 이해하는 것이 AWS IoT SiteWise Edge와의 성공적인 MQTT 통신의 핵심입니다. 연결 설정 프로세스는 이후 섹션에서 다루지만 구현을 계획하는 데 도움이 되도록 먼저 페이로드 요구 사항을 제공합니다.

## MQTT 주제 요구 사항
<a name="connect-broker-mqtt-requirements"></a>

사용된 레벨 또는 문자 수를 포함하여 MQTT 주제 구조에는 제한이 없습니다. 그러나 주제가 페이로드의 `propertyAlias` 필드와 일치하는 것이 좋습니다.

**Example 속성 별칭 예제**  
MQTT 주제가 인 경우 `propertyAlias` 일치하는지 `site1/line1/compressor1/temperature`확인합니다.  

```
{
  "assetId": "compressor_asset_01",
  "propertyAlias": "site1/line1/compressor1/temperature",
  "propertyId": "temperature_sensor_01",
  "propertyValues": [
    {
      "quality": "GOOD",
      "timestamp": {
        "offsetInNanos": 0,
        "timeInSeconds": 1683000000
      },
      "value": {
        "doubleValue": 23.5
      }
    }
  ]
}
```

## JSON 페이로드 구조
<a name="connect-broker-json-payload"></a>

MQTT 메시지 페이로드는 JSON으로 작성되며 [AWS IoT SiteWise API 참조](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_PutAssetPropertyValueEntry.html)에 정의된 `PutAssetPropertyValueEntry` 메시지 형식을 따릅니다.

```
{
   "assetId": "string",
   "propertyAlias": "string",
   "propertyId": "string",
   "propertyValues": [
      {
         "quality": "string",
         "timestamp": {
            "offsetInNanos": number,
            "timeInSeconds": number
         },
         "value": {
            "booleanValue": boolean,
            "doubleValue": number,
            "integerValue": number,
            "stringValue": "string"
         }
      }
   ]
}
```

**참고**  
메시지가 유효한 것으로 간주되려면 다음 조건 중 하나만 true일 수 있습니다.  
`propertyAlias`가 설정되어 있거나
`assetId` 및 모두 설정`propertyId`됨
`PutAssetPropertyValueEntry` 에는이 컨텍스트에서 필요하지 않은 `entryId` 필드가 있습니다.

# EMQX 브로커 구성
<a name="configure-emqx-broker"></a>

이 섹션에서는 사용자 이름과 암호를 추가하는 방법을 다룹니다. 또한 추가된 사용자 이름과 암호를 사용하여 외부 소스에서 TLS 연결을 설정하는 방법도 다룹니다. Linux 또는를 사용하여 EMQX 브로커를 구성할 수 있습니다Microsoft Windows.

**참고**  
브로커를 구성하려면 MQTT 지원 V3 게이트웨이에서 기본 EMQX 구성으로 설정된 코어 디바이스가 필요합니다.

**중요**  
이 절차를 완료한 후에는 권한 부여 규칙을 구성하는 것이 좋습니다. 자세한 내용은 [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md) 단원을 참조하십시오. 추가된 사용자에 대한 권한 부여 규칙은 보안을 강화합니다.

## 인증을 위한 EMQX 배포 구성 업데이트
<a name="update-emqx-broker-authentication"></a>

**인증을 위한 EMQX 배포 구성을 업데이트하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** 값을 복사합니다. 나중에 사용할 수 있도록 저장합니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 엽니다.

1. 왼쪽 탐색 창의 **관리** 섹션에서 **Greengrass 디바이스**를 선택한 다음 **배포를** 선택합니다.

1. 이전에 저장한 코어 디바이스 값을 찾아 해당 링크를 선택하여 배포를 엽니다.

1. **작업** 드롭다운 버튼을 선택한 다음 **수정을** 선택합니다.

1. 표시되는 메시지를 읽은 다음 **배포 수정을** 선택합니다. **대상 지정** 페이지가 나타납니다.

1. **구성 요소 구성** 단계에 도달할 때까지 **다음을** 선택합니다.

1. `aws.greengrass.clientdevices.mqtt.EMQX` 라디오 버튼을 선택합니다.

1. 구성 **요소 구성** 버튼을 선택합니다. 구성 요소에 대한 구성 페이지가 나타납니다.

1. **구성 업데이트**에서 구성 **요소 버전 2.\$1.\$1의 기본 구성으로 재설정**을 선택합니다.

1. OS를 기반으로 **병합할 구성** 섹션에 다음 구성을 입력합니다.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

   `dockerOptions` 필드는 Linux 게이트웨이에만 해당됩니다.

------

1. **확인**을 선택합니다.

1. **검토** 단계에 도달할 때까지 **다음을** 선택합니다.

1. **배포(Deploy)**를 선택합니다.

1. 배포가 성공하면 다음 단계로 진행합니다.

## 사용자 이름 및 암호 인증 활성화
<a name="emqx-broker-username-password-auth"></a>

이 섹션에서는 EMQX 대시보드 GUI를 통해 사용자 이름과 암호를 추가하는 방법을 보여줍니다.

**참고**  
제공된 EMQX 관련 지침은 참조용일 뿐입니다. EMQX 설명서 및 기능은 시간이 지남에 따라 변경될 수 있으며 설명서를 유지 관리하지 않으므로 최신 정보는 [EMQX의 공식 설명서를 참조하는](https://docs.emqx.com/en/emqx/latest/) 것이 좋습니다.

------
#### [ EMQX Dashboard ]

**EMQX 대시보드를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 게이트웨이 호스트 내에 있는지 확인합니다.

1. 브라우저 창을 열고를 방문합니다[http://localhost:18083/](http://localhost:18083/).

1. 의 기본 사용자 이름과의 **admin** 기본 암호를 입력합니다**public**. 자세한 내용은 [EMQX 문서의 EMQX 대시보드](https://docs.emqx.com/en/emqx/latest/dashboard/introduction.html#first-login)*를 참조하세요*.

1. 로그인한 후 암호를 변경하라는 메시지가 표시됩니다. 암호를 업데이트하여 EMQX 대시보드로 계속 진행합니다.

1. 왼쪽 탐색 창에서 보호 아이콘과 **인증을** 차례로 선택합니다.

1. **기본 제공 데이터베이스** 행에서 **사용자** 버튼을 선택합니다.

1. 더하기 기호 아이콘 버튼을 선택하여 사용자를 추가합니다. **추가** 화면이 나타납니다.

1. 외부 애플리케이션 사용자의 사용자 이름과 암호를 입력합니다.

1. **저장**을 선택합니다. 선택한 사용자 이름이 **인증** 페이지의 테이블에 나타납니다.

**참고**  
기존 또는 기본 권한 부여 규칙이 새 사용자에게 적용됩니다. 외부 애플리케이션 요구 사항에 맞게 검토하고 조정하는 것이 좋습니다.

------
#### [ EMQX Management with Linux ]

에서 AWS IoT SiteWise EMQX CLI 도구를 사용합니다`/greengrass/v2/bin/swe-emqx-cli`.

**Linux를 사용하여 EMQX Management를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 다음 명령을 실행하여 관리자 암호를 변경합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli admin change-pwd
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 현재 관리자 사용자(기본값은 `admin`)와 암호(기본값은 )를 입력합니다`public`.

   1. 새 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   admin password changed successfully
   ```

1. 다음 명령을 실행하여 외부 애플리케이션의 사용자를 추가합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli users add
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 새 사용자의 사용자 이름을 입력합니다.

   1. 새 사용자의 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   User '[username]' created successfully
   ```

1. 다음 명령을 실행하여 사용자 구성을 확인합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli users list
   ```

   출력에는 구성된 모든 사용자가 표시됩니다.

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------
#### [ EMQX Management with Windows ]

다음 위치 중 하나에서 AWS IoT SiteWise EMQX CLI 도구를 사용합니다.
+ PowerShell: `C:\greengrass\v2\bin\swe-emqx-cli.ps1`
+ 명령 프롬프트: `C:\greengrass\v2\bin\swe-emqx-cli.bat`

**Windows를 사용하여 EMQX Management를 통해 사용자 이름 및 암호 인증을 활성화하려면**

1. 다음 명령을 실행하여 관리자 암호를 변경합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 admin change-pwd
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 현재 관리자 사용자(기본값은 `admin`)와 암호(기본값은 )를 입력합니다`public`.

   1. 새 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   admin password changed successfully
   ```

1. 다음 명령을 실행하여 외부 애플리케이션의 사용자를 추가합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users add
   ```

1. 메시지가 표시되면 다음을 수행합니다.

   1. 새 사용자의 사용자 이름을 입력합니다.

   1. 새 사용자의 암호를 입력하고 확인합니다.

   성공하면 다음 메시지가 표시됩니다.

   ```
   User '[username]' created successfully
   ```

1. 다음 명령을 실행하여 사용자 구성을 확인합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users list
   ```

   출력에는 구성된 모든 사용자가 표시됩니다.

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------

# 애플리케이션을 Edge의 EMQX AWS IoT SiteWise 브로커에 연결
<a name="connect-app-to-broker"></a>

EMQX 브로커는 포트 8883에서 전송 계층 보안(TLS)을 사용하여 모든 통신을 암호화하므로 전송 중에 데이터를 보호할 수 있습니다. 이 섹션에서는 애플리케이션과 EMQX 브로커 간의 연결을 설정하는 단계를 안내합니다. 이러한 단계를 따르면 산업 데이터의 무결성과 기밀성을 유지하는 데 도움이 됩니다. 연결 프로세스에는 구성 요소를 통한 자동 IP 검색을 사용하거나 TLS 인증서에서 DNS 이름과 IP 주소를 주체 대체 이름(SANs)으로 수동으로 구성하는 두 가지 주요 접근 방식이 포함됩니다. 각 메서드에는 네트워크 설정 및 보안 요구 사항에 따라 고유한 이점이 있습니다. 이 설명서는 두 옵션을 모두 안내합니다.

**Topics**
+ [AWS IoT SiteWise Edge에서 EMQX 브로커에 대한 보안 연결을 위해 TLS 구성](#configure-tls-emqx-broker)
+ [Edge에서 EMQX AWS IoT SiteWise 브로커 연결 테스트](#test-emqx-connection)
+ [자체 CA 사용](#configure-tls-custom-ca)
+ [외부 방화벽 연결을 위해 포트 8883 열기](#emqx-firewall)

## AWS IoT SiteWise Edge에서 EMQX 브로커에 대한 보안 연결을 위해 TLS 구성
<a name="configure-tls-emqx-broker"></a>

기본적으로는 코어 디바이스 인증 기관(CA)에서 서명한 EMQX 브로커에 대한 TLS 서버 인증서를 AWS IoT Greengrass 생성합니다. 자세한 내용은 [MQTT 브로커를 사용하여 AWS IoT Greengrass 코어 디바이스에 클라이언트 디바이스 연결을 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html).

### TLS 인증서 검색
<a name="configure-tls-retrieve-certificate"></a>

CA 인증서를 가져오려면 게이트웨이 호스트에서 다음 명령을 실행합니다.

------
#### [ Linux ]

게이트웨이 호스트의 셸 세션에서 다음 명령을 실행합니다.

```
/greengrass/v2/bin/swe-emqx-cli cert
```

이 명령은 인증서 위치를 표시하고 인증서의 콘텐츠를 인쇄합니다.

또는 다음 명령을 사용하여 인증서를 파일에 저장할 수 있습니다.

```
/greengrass/v2/bin/swe-emqx-cli cert --output /path/to/certificate.pem
```

------
#### [ Windows ]

게이트웨이 호스트의 PowerShell 세션에서 다음 명령을 실행합니다.

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert
```

이 명령은 인증서 위치를 표시하고 인증서의 콘텐츠를 인쇄합니다.

또는 다음 명령을 사용하여 인증서를 파일에 저장할 수 있습니다.

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert --output C:\path\to\certificate.pem
```

CLI는 시스템의 정확한 경로에 관계없이 인증서를 자동으로 찾습니다.

------

ca.pem 파일의 내용을 브로커에 연결하는 외부 애플리케이션에 복사합니다. `BrokerCoreDeviceCA.pem`로 파일을 저장합니다.

### TLS 서버 인증서에 사용자 지정 DNS 이름/IP 주소 추가
<a name="configure-tls-custom-dns-ip"></a>

에서 생성된 인증서의 주체 대체 이름(SAN)은 AWS IoT Greengrass 입니다`localhost`. 게이트웨이 호스트 외부에서 TLS 연결을 설정할 때 브로커의 호스트 이름이 서버 인증서의 호스트 이름과 일치하지 않기 때문에 TLS 확인 단계가 실패`localhost`합니다.

일치하지 않는 호스트 이름 문제를 해결하기 위해는 코어 디바이스 엔드포인트를 관리하는 두 가지 방법을 AWS IoT Greengrass 제공합니다. 이 섹션에서는 두 옵션을 모두 다룹니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [코어 디바이스 엔드포인트 관리를](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-core-device-endpoints.html) 참조하세요.
+ 코어 디바이스의 IP 주소를 사용하여 EMQX 브로커에 연결하려면 자동 IP 검색 섹션을 사용합니다.
+ IP 주소 대신 DNS 이름을 사용하여 EMQX 브로커에 연결하려면 수동 관리 섹션을 사용합니다.

------
#### [ Automated IP discovery ]

이 옵션을 사용하면 코어 디바이스가 IP 주소를 자동으로 검색하여 브로커 인증서에 주체 대체 이름(SAN)으로 추가할 수 있습니다.

1. 코어 디바이스의 배포에 `aws.greengrass.clientdevices.IPDetector` 구성 요소를 추가합니다.

1. 디바이스에 변경 사항 배포

1. 배포가 완료될 때까지 기다립니다.

   배포가 완료되면 브로커의 IP 주소를 사용하여 보안 TLS 연결을 설정할 수 있습니다.

   IP 주소는 브로커 인증서에 자동으로 SAN으로 추가됩니다.

------
#### [ Manual DNS and IP Configuration ]

DNS 이름과 IP 주소를 TLS 인증서에 주체 대체 이름(SANs)으로 수동으로 추가할 수 있습니다. 이 방법은 게이트웨이 호스트의 DNS 이름을 구성한 경우에 유용합니다.

**중요**  
IPDetector 구성 요소를 사용하는 경우 계속하기 전에 배포에서 제거합니다. IPDetector 구성 요소는 수동 엔드포인트 구성을 재정의합니다.

**엔드포인트를 수동으로 구성하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** URL을 선택합니다. 코어 디바이스의 페이지가 나타납니다.

1. **클라이언트 디바이스** 탭을 선택합니다.

1. **엔드포인트 관리**를 선택합니다.

1. 엔드포인트 관리 대화 상자에서 DNS 이름(들)과 SANs으로 추가할 IP 주소를 입력합니다. 포트 8883을 사용합니다.

1. **업데이트**를 선택합니다.

브로커의 TLS 서버 인증서는 새 엔드포인트를 포함하도록 자동으로 업데이트됩니다.

**Linux를 사용하여 TLS 서버 인증서 업데이트를 확인하려면**

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

   ```
   docker exec emqx openssl x509 -in ./data/cert.pem -text -noout | grep -A1 "Subject Alternative Name"
   ```

1. 명령은 다음과 유사한 출력을 반환합니다.

   ```
   X509v3 Subject Alternative Name: 
   DNS:endpoint_you_added, DNS:localhost
   ```

1. 엔드포인트가 SANs 확인합니다.

**Windows를 사용하여 TLS 서버 인증서 업데이트를 확인하려면**

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

   ```
   (Get-PfxCertificate -FilePath "C:\greengrass\v2\work\aws.greengrass.clientdevices.mqtt.EMQX\v2\data\cert.pem").Extensions | Where-Object { $_.Oid.FriendlyName -eq "Subject Alternative Name" } | ForEach-Object { "Subject Alternative Name:", ($_.Format($true) -split "`n")[0..1] }
   ```

1. 명령은 다음과 유사한 출력을 반환합니다.

   ```
   Subject Alternative Name:
   DNS Name=your-endpoint
   DNS Name=localhost
   ```

1. 추가한 엔드포인트가 SANs 목록에 있는지 확인합니다.

------

## Edge에서 EMQX AWS IoT SiteWise 브로커 연결 테스트
<a name="test-emqx-connection"></a>

TLS 인증서 및 인증 자격 증명으로 EMQX 브로커를 구성한 후에는 설정이 올바르게 작동하는지 확인하는 것이 중요합니다. 연결을 테스트하면 보안 구성이 제대로 구현되고 클라이언트가 브로커에 암호화된 연결을 성공적으로 설정할 수 있습니다. 이 섹션에서는 TLS 암호화 및 인증을 지원하는 널리 사용되는 MQTT 클라이언트 도구인 Mosquitto 명령줄 인터페이스(CLI) 클라이언트를 사용하여 브로커 연결을 테스트하는 방법을 보여줍니다.

### Mosquitto CLI 클라이언트를 사용하여 EMQX 브로커 연결 테스트
<a name="test-emqx-connection-mosquitto"></a>

이 단계에서는 mosquitto CLI 클라이언트를 사용하여 설정을 테스트하고 앞서 생성한 사용자 이름과 암호를 사용하여 브로커에 성공적으로 연결할 수 있는지 확인합니다. 3단계: TLS 설정에서 `BrokerCoreDeviceCA.pem` 다음 단계를 가져옵니다.

```
mosquitto_sub -h hostname|ip address \
    -p 8883 \
    -t "#" \
    -q 1 \
    -u username -P password \
    --cafile BrokerCoreDeviceCA.pem
```

**참고**  
연결하려는 호스트 이름/IP 주소가 클라이언트에 전달하는 CA 인증서에 있는 주체 대체 이름(SAN)과 일치하지 않는 경우 SSL:verify 오류가 발생할 수 있습니다. 올바른 SAN으로 인증서를 가져오는 방법은 3단계: TLS 설정에서 "TLS 서버 인증서에 사용자 지정 DNS 이름/IP 주소 추가"를 참조하세요.

이때 모든 사용자는 브로커의 모든 주제를 게시하고 구독할 수 있습니다. [EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정](authorization-rules-emqx-broker.md)로 이동합니다.

## 자체 CA 사용
<a name="configure-tls-custom-ca"></a>

AWS IoT Greengrass 에서는 자체 인증 기관(CA)을 사용하도록 자체 클라이언트 디바이스 인증 구성 요소를 구성하는 방법을 간략하게 설명합니다. 클라이언트 디바이스 인증 구성 요소(`aws.greengrass.clientdevices.Auth`)에서는 클라이언트 디바이스가 인증되고 클라이언트 디바이스 작업이 승인됩니다. 자세한 내용은 *AWS IoT Greengrass Version 2 개발자 안내서*의 [자체 인증 기관 사용을 참조하세요](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html#use-your-own-CA).

자체 CA를 사용하려면 사용자 지정 구성을 지정할 수 있도록 배포에 `aws.greengrass.clientdevices.Auth` 구성 요소를 추가합니다.

## 외부 방화벽 연결을 위해 포트 8883 열기
<a name="emqx-firewall"></a>

------
#### [ Linux ]

Linux 호스트 방화벽 규칙에서 포트 8883에 대한 인바운드 규칙을 추가하여 게이트웨이 호스트 외부에서 들어오는 연결을 허용합니다. 방화벽이 있는 경우 포트 8883에서 들어오는 TLS 연결이 허용되는지 확인합니다.

------
#### [ Windows ]

Microsoft Windows 호스트 방화벽 규칙에서 포트 8883에 대한 인바운드 규칙을 추가하여 게이트웨이 호스트 외부에서 들어오는 연결을 허용합니다. 규칙이 포트 8883을 지정하는 포트 유형의 허용 규칙인지 확인합니다. 외부 애플리케이션에서 브로커로의 연결을 허용하도록 네트워크 구성에 따라 이를 구성할 수 있습니다.

------

# EMQX에서 AWS IoT SiteWise Edge에 대한 권한 부여 규칙 설정
<a name="authorization-rules-emqx-broker"></a>

EMQX는 사용자 이름, IP 주소 또는 클라이언트 ID와 같은 식별자를 기반으로 권한 부여 규칙 추가를 지원합니다. 이는 다양한 작업 또는 주제에 연결하는 외부 애플리케이션의 수를 제한하려는 경우에 유용합니다.

**Topics**
+ [Linux에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성](add-auth-rules-database-emqx-broker-linux.md)
+ [Windows에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성](add-auth-rules-database-emqx-broker-windows.md)
+ [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)
+ [사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가](add-rules-emqx-broker.md)

# Linux에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성
<a name="add-auth-rules-database-emqx-broker-linux"></a>

권한 부여 규칙을 구성할 때 배포 설정에 따라 두 가지 구성 옵션이 있습니다.
+ **Docker** - 없이 표준 Docker 설치를 실행하는 경우 **Docker 브리지 게이트웨이** 구성을 Litmus Edge사용합니다. 이는 일반적으로 AWS IoT SiteWise 구성 요소만 배포한 경우입니다.
+ **Litmus Edge** - 게이트웨이에를 Litmus Edge 설치한 경우 **Litmus Edge 네트워크 서브넷** 구성을 사용합니다.

**참고**  
Docker 브리지 게이트웨이를 처음 구성한 후 나중에를 설치하는 경우 Litmus Edge 네트워크 서브넷 옵션을 사용하여 권한 부여 규칙을 Litmus Edge재구성하여 모든 구성 요소 간에 적절한 통신을 보장합니다.

**기본 권한 부여 규칙을 추가하려면**

1. EMQX 브로커가 배포되고 실행 중인지 확인합니다.

1. 게이트웨이 호스트에서 셸 세션을 시작합니다.

------
#### [ Docker without Litmus Edge ]

   없는 표준 Docker 설치의 경우 다음을 Litmus Edge실행합니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init
   ```

------
#### [ Litmus Edge network subnet ]

   를 사용하는 경우 Litmus Edge 네트워크 서브넷 IP를 Litmus Edge확인합니다.

   ```
   docker network inspect LitmusNetwork | grep IPAM -A9
   ```

   출력의 서브넷 값을 기록하고 다음 명령을 실행합니다. `litmus_subnet_ip`를 이전 단계의 서브넷 값으로 바꿉니다.

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init litmus_subnet_ip
   ```

------

   도구는 제공된 IP 주소에서 브로커로의 연결을 허용하는 권한 부여 규칙을 자동으로 생성하고 적용합니다. 모든 주제에 대한 액세스를 허용합니다. 여기에는 IoT SiteWise OPC UA 수집기 및 IoT SiteWise 게시자가 포함됩니다.

1. [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)로 이동합니다.

# Windows에서 기본 제공 데이터베이스를 사용하여 권한 부여 구성
<a name="add-auth-rules-database-emqx-broker-windows"></a>

이 섹션에서는 Windows 배포용 기본 제공 데이터베이스를 사용하여 권한 부여 규칙을 구성하는 방법을 다룹니다.

**기본 권한 부여 규칙을 추가하려면**

1. EMQX 브로커가 배포되고 실행 중인지 확인합니다.

1.  AWS IoT SiteWise EMQX CLI 도구를 실행합니다.

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 acl init
   ```

   도구는 localhost(127.0.0.1)에서 브로커로의 연결을 허용하는 ACL 규칙을 자동으로 생성하고 적용합니다. 모든 주제에 대한 액세스를 허용합니다. 여기에는 IoT SiteWise OPC UA 수집기 및 IoT SiteWise 게시자가 포함됩니다.

1. [권한 부여를 위한 EMQX 배포 구성 업데이트](update-emqx-broker-authorization.md)로 이동합니다.

# 권한 부여를 위한 EMQX 배포 구성 업데이트
<a name="update-emqx-broker-authorization"></a>

**권한 부여를 위해 EMQX 배포 구성을 업데이트하려면**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. 왼쪽 탐색의 엣지 **섹션에서 엣지 게이트웨이**를 선택합니다. **** 

1. 구성할 게이트웨이를 선택합니다.

1. **엣지 게이트웨이 구성** 섹션에서 **Greengrass 코어 디바이스** 값을 복사합니다. 나중에 사용할 수 있도록 저장합니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com/iot/)을 엽니다.

1. 왼쪽 탐색 창의 **관리** 섹션에서 **Greengrass 디바이스**를 선택한 다음 **배포를** 선택합니다.

1. 이전에 저장한 코어 디바이스 값을 찾아 해당 링크를 선택하여 배포를 엽니다.

1. **작업** 드롭다운 버튼을 선택한 다음 **수정을** 선택합니다.

1. 표시되는 메시지를 읽은 다음 **배포 수정을** 선택합니다. **대상 지정** 페이지가 나타납니다.

1. **구성 요소 구성** 단계에 도달할 때까지 **다음을** 선택합니다.

1. `aws.greengrass.clientdevices.mqtt.EMQX` 라디오 버튼을 선택합니다.

1. 구성 **요소 구성** 버튼을 선택합니다. 구성 요소에 대한 구성 페이지가 나타납니다.

1. **구성 업데이트**에서 구성 **요소 버전 2.\$1.\$1의 기본 구성으로 재설정**을 선택합니다.

1. OS를 기반으로 **병합할 구성** 섹션에 다음 콘텐츠를 붙여 넣습니다.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "data/authz/acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "C:\\greengrass\\v2\\work\\aws.greengrass.clientdevices.mqtt.EMQX\\v2\\data\\authz\\acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

------

1. **확인**을 선택합니다.

1. **검토** 단계에 도달할 때까지 **다음을** 선택합니다.

1. **배포(Deploy)**를 선택합니다.

**참고**  
이 시점부터는 ACL 파일을 편집하여 권한 부여 규칙을 업데이트할 수 없습니다. 또는 배포에 성공한 [사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가](add-rules-emqx-broker.md) 후 로 진행할 수 있습니다.

# 사용자를 위한 EMQX 대시보드를 통해 권한 부여 규칙 추가
<a name="add-rules-emqx-broker"></a>

EMQX 대시보드 또는 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 추가하거나 업데이트할 수 있습니다. EMQX CLI 도구는 AWS IoT SiteWise EMQX의 내장 데이터베이스를 사용하여 권한 부여를 관리합니다.

**참고**  
권한 부여 규칙 추가는 MQTT 주제 패턴 및 액세스 제어를 이해해야 하는 고급 구성 단계입니다. EMQX의 기본 제공 데이터베이스를 사용하여 권한 부여 규칙을 생성하는 방법에 대한 자세한 내용은 EMQX 문서의 [기본 제공 데이터베이스 사용을](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) 참조하세요. ** 

**참고**  
제공된 EMQX 관련 지침은 참조용일 뿐입니다. EMQX 설명서 및 기능은 시간이 지남에 따라 변경될 수 있으며 설명서를 유지 관리하지 않으므로 최신 정보는 [EMQX의 공식 설명서를 참조하는](https://docs.emqx.com/en/emqx/latest/) 것이 좋습니다.

------
#### [ EMQX dashboard ]

이 절차에서는 EMQX 대시보드에서 권한 부여 규칙을 추가하는 방법을 보여줍니다.

EMQX 대시보드는 게이트웨이 호스트 내에서만 액세스할 수 있습니다. 게이트웨이 호스트 외부에서 연결하려고 하면 대시보드에 액세스할 수 없습니다.

**EMQX 대시보드를 사용하여 권한 부여 규칙을 추가하려면**

1. 게이트웨이 호스트 내에 있는지 확인합니다.

1. 브라우저 창을 열고를 방문합니다[http://localhost:18083/](http://localhost:18083/).

1. EMQX 대시보드에 로그인합니다. 이 절차에서는 기본 로그인 자격 증명을 선택한 것으로 변경했다고 가정합니다. 초기 설정에 대한 자세한 내용은 섹션을 참조하세요[사용자 이름 및 암호 인증 활성화](configure-emqx-broker.md#emqx-broker-username-password-auth).

1. 방패 아이콘을 선택한 다음 드롭다운 메뉴에서 **권한 부여**를 선택합니다.

1. **기본 제공 데이터베이스** 행에서 **권한** 버튼을 선택합니다.

1. 기본 제공 데이터베이스 권한 부여 섹션에서 비즈니스 요구 사항에 맞는 사용자 권한 부여 규칙을 추가하거나 업데이트합니다. 규칙 생성에 대한 자세한 지침은 EMQX 문서의 [기본 제공 데이터베이스 사용](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) 섹션을 참조하세요. ** 

------
#### [ AWS IoT SiteWise CLI tool using Linux ]

**Linux에서 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 관리하려면:**
+ 다음 형식을 사용하여 사용자에 대한 권한 부여 규칙을 추가합니다.

  ```
  /greengrass/v2/bin/swe-emqx-cli auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example 사용자에 대한 권한 부여 규칙 추가**  
이 예제에서는 라는 사용자에 대한 규칙을 추가하는 방법을 보여줍니다`system1`.  

```
/greengrass/v2/bin/swe-emqx-cli auth add system1 \
    publish allow "sensors/#" \
    subscribe allow "control/#" \
    all deny "#"
```

**Example : 사용자에 대한 권한 부여 규칙 보기**  
`system1` 사용자의 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth list system1
```

**Example : 모든 기존 권한 부여 규칙 보기**  
현재 보유한 모든 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth list
```

**Example : 사용자에 대한 모든 권한 부여 규칙 삭제**  
특정 사용자에게 적용되는 모든 권한 부여 규칙을 삭제하려면 다음 명령을 실행합니다.  

```
/greengrass/v2/bin/swe-emqx-cli auth delete system1
```
삭제를 확인하는 메시지가 표시됩니다.

------
#### [ AWS IoT SiteWise CLI tool using Windows ]

**의 AWS IoT SiteWise EMQX CLI 도구를 사용하여 권한 부여 규칙을 관리하려면Windows PowerShell:**
+ 다음 형식을 사용하여 사용자에 대한 권한 부여 규칙을 추가합니다.

  ```
  C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example : 사용자에 대한 권한 부여 규칙 추가**  
이 예제에서는 라는 사용자에 대한 규칙을 추가하는 방법을 보여줍니다`system1`.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add system1 `
    publish allow "sensors/#" `
    subscribe allow "control/#" `
    all deny "#"
```

**Example : 사용자에 대한 권한 부여 규칙 보기**  
`system1` 사용자의 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list system1
```

**Example : 모든 기존 권한 부여 규칙 보기**  
현재 보유한 모든 권한 부여 규칙을 보려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list
```

**Example : 사용자에 대한 모든 권한 부여 규칙 삭제**  
특정 사용자에게 적용되는 모든 권한 부여 규칙을 삭제하려면 다음 명령을 실행합니다.  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth delete system1
```
삭제를 확인하는 메시지가 표시됩니다.

------