

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

# 코어 디바이스에 클라이언트 디바이스 연결
<a name="connect-client-devices"></a>

코어 디바이스에 클라이언트 디바이스가 연결되도록 *클라우드 검색*을 구성할 수 있습니다. 클라우드 검색을 구성하면 클라이언트 디바이스가 AWS IoT Greengrass 클라우드 서비스에 연결하여 연결할 수 있는 코어 디바이스에 대한 정보를 검색할 수 있습니다. 그러면 클라이언트 디바이스에서는 연결될 때까지 각 코어 디바이스에 대한 연결이 시도될 수 있습니다.

클라우드 검색을 사용하려면 다음을 수행해야 합니다.
+ 연결될 수 있는 코어 디바이스에 클라이언트 디바이스를 연결합니다.
+ 클라이언트 디바이스가 각 코어 디바이스에 연결될 수 있는 MQTT 브로커 엔드포인트를 지정합니다.
+ 클라이언트 디바이스에 대한 지원이 활성화되는 구성 요소를 코어 디바이스에 배포합니다.

  선택적 구성 요소를 배포하여 다음을 수행할 수도 있습니다.
  + 클라이언트 디바이스, Greengrass 구성 요소 및 AWS IoT Core 클라우드 서비스 간에 메시지를 릴레이합니다.
  + 코어 디바이스 MQTT 브로커 엔드포인트를 자동으로 관리합니다.
  + 로컬 클라이언트 디바이스 섀도우를 관리하고 섀도우를 AWS IoT Core 클라우드 서비스와 동기화합니다.

또한 코어 디바이스의 AWS IoT 정책을 검토하고 업데이트하여 클라이언트 디바이스를 연결하는 데 필요한 권한이 있는지 확인해야 합니다. 자세한 내용은 [요구 사항](#connect-client-devices-requirements) 단원을 참조하십시오.

클라우드 검색을 구성하면 클라이언트 디바이스와 코어 디바이스 간 통신을 테스트할 수 있습니다. 자세한 내용은 [클라이언트 디바이스 통신 테스트](test-client-device-communications.md) 단원을 참조하십시오.

**Topics**
+ [요구 사항](#connect-client-devices-requirements)
+ [클라이언트 디바이스 지원용 Greengrass 구성 요소](#cloud-discovery-components)
+ [클라우드 검색 구성(콘솔)](#configure-cloud-discovery-console)
+ [클라우드 검색 구성(AWS CLI)](#configure-cloud-discovery-cli)
+ [클라이언트 디바이스 연결](associate-client-devices.md)
+ [오프라인 상태에서 클라이언트 인증](offline-authentication.md)
+ [코어 디바이스 엔드포인트 관리](manage-core-device-endpoints.md)
+ [MQTT 브로커 선택](choose-local-mqtt-broker.md)
+ [MQTT 브로커를 사용하여 AWS IoT Greengrass 코어 디바이스에 클라이언트 디바이스 연결](connecting-to-mqtt.md)
+ [클라이언트 디바이스 통신 테스트](test-client-device-communications.md)
+ [Greengrass Discovery RESTful API](greengrass-discover-api.md)

## 요구 사항
<a name="connect-client-devices-requirements"></a>

코어 디바이스에 클라이언트 디바이스를 연결하려면 다음이 필요합니다.
+ 코어 디바이스에서 [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 이상이 실행되어야 합니다.
+ 코어 디바이스가 작동하는 AWS 리전 AWS 계정 의에 AWS IoT Greengrass 대해와 연결된 Greengrass 서비스 역할입니다. 자세한 내용은 [Greengrass 서비스 역할 구성](#configure-service-role-requirement) 단원을 참조하십시오.
+ 코어 디바이스의 AWS IoT 정책은 다음 권한을 허용해야 합니다.<a name="core-device-iot-policy-client-device-permissions"></a>
  + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
  + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
  + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – (선택 사항)이 권한은 코어 디바이스의 네트워크 연결 정보를 AWS IoT Greengrass 클라우드 서비스에 보고하는 [IP 감지기 구성 요소를](ip-detector-component.md) 사용하는 데 필요합니다.
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`, `iot:UpdateThingShadow`및 `iot:DeleteThingShadow`- (선택 사항) 이러한 권한은 [섀도 관리자 구성 요소를](shadow-manager-component.md) 사용하여 클라이언트 디바이스 섀도와 동기화하는 데 필요합니다 AWS IoT Core. 이 특성에는 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상, 섀도 관리자 v2.2.0 이상 및 [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상이 필요합니다.

  자세한 내용은 [AWS IoT 사물 정책 구성](#configure-iot-policy-requirement) 단원을 참조하십시오.
**참고**  
[AWS IoT Greengrass 코어 소프트웨어를 설치할](install-greengrass-core-v2.md) 때 기본 AWS IoT 정책을 사용한 경우 코어 디바이스에는 모든 AWS IoT Greengrass 작업()에 대한 액세스를 허용하는 AWS IoT 정책이 있습니다`greengrass:*`.
+ AWS IoT 클라이언트 디바이스로 연결할 수 있는 사물입니다. 자세한 내용은 *AWS IoT Core 개발자 안내서*의 [AWS IoT 리소스 생성](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html)을 참조하세요.
+ 클라이언트 ID를 사용하여 클라이언트 디바이스를 연결해야 합니다. 클라이언트 ID는 사물 이름입니다. 기타 클라이언트 ID는 수락되지 않습니다.
+ 각 클라이언트 디바이스의 AWS IoT 정책은 `greengrass:Discover` 권한을 허용해야 합니다. 자세한 내용은 [클라이언트 디바이스에 대한 최소 AWS IoT 정책](device-auth.md#client-device-minimal-iot-policy) 단원을 참조하십시오.

**Topics**
+ [Greengrass 서비스 역할 구성](#configure-service-role-requirement)
+ [AWS IoT 사물 정책 구성](#configure-iot-policy-requirement)

### Greengrass 서비스 역할 구성
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>Greengrass 서비스 역할은가 사용자를 대신하여 서비스의 리소스에 액세스할 AWS IoT Greengrass 수 있도록 권한을 부여하는 AWS Identity and Access Management (IAM) AWS 서비스 역할입니다. 이 역할을 사용하면 AWS IoT Greengrass 가 클라이언트 디바이스의 ID를 확인하고 코어 디바이스 연결 정보를 관리할 수 있습니다.

이전에이 리전에서 [Greengrass 서비스 역할을](greengrass-service-role.md) 설정하지 않은 경우이 리전 AWS 계정 의에 AWS IoT Greengrass 대해 Greengrass 서비스 역할을와 연결해야 합니다.

[AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass)에서 **코어 디바이스 검색 구성** 페이지를 사용하면 AWS IoT Greengrass 가 Greengrass 서비스 역할을 설정합니다. 그렇지 않으면 [AWS IoT 콘솔](https://console.aws.amazon.com/iot) 또는 AWS IoT Greengrass API를 사용하여 수동으로 설정할 수 있습니다.

이 섹션에서는 Greengrass 서비스 역할이 설정되었는지 확인합니다. 설정되지 않은 경우이 리전 AWS 계정 의에 AWS IoT Greengrass 대해와 연결할 새 Greengrass 서비스 역할을 생성합니다.

#### Greengrass 서비스 역할 구성(콘솔)
<a name="configure-service-role-requirement-console"></a>

1. Greengrass 서비스 역할이이 리전의 AWS 계정 에 AWS IoT Greengrass 대해와 연결되어 있는지 확인합니다. 해결 방법:

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

   1. 탐색 창에서 **설정**을 선택합니다.

   1. **Greengrass 서비스 역할** 섹션에서 **현재 서비스 역할**을 찾아 Greengrass 서비스 역할이 연결되었는지 참조합니다.

      연결된 Greengrass 서비스 역할이 있으면 IP 감지기 구성 요소를 사용할 이 요구 사항을 충족하는 것입니다. [AWS IoT 사물 정책 구성](#configure-iot-policy-requirement)로 이동하세요.

1. Greengrass 서비스 역할이이 리전의 AWS 계정 에 AWS IoT Greengrass 대해와 연결되지 않은 경우 Greengrass 서비스 역할을 생성하고 연결합니다. 해결 방법:

   1. [IAM 콘솔](https://console.aws.amazon.com/iam)로 이동합니다.

   1. [**Roles**]를 선택합니다.

   1. **역할 생성**을 선택합니다.

   1. **역할 생성** 페이지에서 다음을 수행합니다.

      1. **신뢰할 수 있는 엔터티 유형**에서 **AWS 서비스**를 선택합니다.

      1. **사용 사례**, **기타 AWS 서비스사용 사례**에서 **Greengrass**를 선택하고, **Greengrass**를 선택합니다. 이 옵션은를이 역할을 수임할 수 있는 신뢰할 수 있는 엔 AWS IoT Greengrass 터티로 추가하도록 지정합니다.

      1. **다음**을 선택합니다.

      1. **권한 정책**에서 역할에 연결할 **AWSGreengrassResourceAccessRolePolicy**를 선택합니다.

      1. **다음**을 선택합니다.

      1. **역할 이름**에 역할의 이름(예: **Greengrass\$1ServiceRole**)을 입력합니다.

      1. **역할 생성**을 선택합니다.

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

   1. 탐색 창에서 **설정**을 선택합니다.

   1. **Greengrass 서비스 역할** 섹션에서 **역할 연결**을 선택합니다.

   1. **Greengrass 서비스 역할 업데이트** 모달에서, 생성한 IAM 역할을 선택한 다음에 **역할 연결**을 선택합니다.

#### Greengrass 서비스 역할 구성(AWS CLI)
<a name="configure-service-role-requirement-cli"></a>

1. Greengrass 서비스 역할이이 리전의 AWS 계정 에 AWS IoT Greengrass 대해와 연결되어 있는지 확인합니다.

   ```
   aws greengrassv2 get-service-role-for-account
   ```

   Greengrass 서비스 역할이 연결되어 있으면 역할에 대한 정보가 있는 응답이 작업에서 반환됩니다.

   연결된 Greengrass 서비스 역할이 있으면 IP 감지기 구성 요소를 사용할 이 요구 사항을 충족하는 것입니다. [AWS IoT 사물 정책 구성](#configure-iot-policy-requirement)로 이동하세요.

1. Greengrass 서비스 역할이이 리전의 AWS 계정 에 AWS IoT Greengrass 대해와 연결되지 않은 경우 Greengrass 서비스 역할을 생성하고 연결합니다. 해결 방법:

   1. <a name="create-greengrass-service-role-step-create-role"></a>가 역할을 AWS IoT Greengrass 수임하도록 허용하는 신뢰 정책을 사용하여 역할을 생성합니다. 이 예제에서는 `Greengrass_ServiceRole`라는 역할을 생성하지만, 다른 이름을 사용할 수 있습니다. *혼동된 대리자* 보안 문제를 방지하려면 신뢰 정책에 `aws:SourceArn` 및 `aws:SourceAccount` 글로벌 조건 컨텍스트 키도 포함하는 것이 좋습니다. 조건 컨텍스트 키는 지정된 계정 및 Greengrass 작업 영역에서 들어오는 요청만 허용하도록 액세스를 제한합니다. 혼동된 대리자 문제에 대한 자세한 내용은, [교차 서비스 혼동된 대리인 방지](cross-service-confused-deputy-prevention.md)를 참조하세요.

------
#### [ Linux or Unix ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17		 	 	 \\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------

   1. <a name="create-greengrass-service-role-step-copy-role-arn"></a>출력의 역할 메타데이터에서 역할 ARN을 복사합니다. ARN을 사용하여 역할을 계정과 연결합니다.

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>`AWSGreengrassResourceAccessRolePolicy` 정책을 역할에 연결합니다.

      ```
      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
      ```

   1. Greengrass 서비스 역할을의 AWS IoT Greengrass 와 연결합니다 AWS 계정. 서비스 역할의 ARN으로 *role-arn*을 바꿉니다.

      ```
      aws greengrassv2 associate-service-role-to-account --role-arn role-arn
      ```

      작업에 성공하면 다음 응답이 반환됩니다.

      ```
      {
        "associatedAt": "timestamp"
      }
      ```

### AWS IoT 사물 정책 구성
<a name="configure-iot-policy-requirement"></a>

코어 디바이스에서는 AWS에 대한 연결 권한 부여에 X.509 디바이스 인증서가 사용됩니다. 디바이스 인증서에 AWS IoT 정책을 연결하여 코어 디바이스에 대한 권한을 정의합니다. 자세한 내용은 [AWS IoT 데이터 영역 작업에 대한 정책](device-auth.md#iot-policies) 및 [클라이언트 디바이스를 지원하는 최소 AWS IoT 정책](device-auth.md#client-device-support-minimal-iot-policy) 섹션을 참조하세요.

클라이언트 디바이스를 코어 디바이스에 연결하려면 코어 디바이스의 AWS IoT 정책에서 다음 권한을 허용해야 합니다.<a name="core-device-iot-policy-client-device-permissions"></a>
+ <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
+ <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
+ <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – (선택 사항)이 권한은 코어 디바이스의 네트워크 연결 정보를 AWS IoT Greengrass 클라우드 서비스에 보고하는 [IP 감지기 구성 요소를](ip-detector-component.md) 사용하는 데 필요합니다.
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`, `iot:UpdateThingShadow`및 `iot:DeleteThingShadow`- (선택 사항) 이러한 권한은 [섀도 관리자 구성 요소를](shadow-manager-component.md) 사용하여 클라이언트 디바이스 섀도와 동기화하는 데 필요합니다 AWS IoT Core. 이 특성에는 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상, 섀도 관리자 v2.2.0 이상 및 [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상이 필요합니다.

이 섹션에서는 코어 디바이스에 대한 AWS IoT 정책을 검토하고 누락된 필수 권한을 추가합니다. [AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 사용하여 리소스를 프로비저닝](quick-installation.md)한 경우 코어 디바이스에는 모든 AWS IoT Greengrass 작업()에 대한 액세스를 허용하는 AWS IoT 정책이 있습니다`greengrass:*`. 이 경우 디바이스 섀도를 동기화하기 위해 섀도 관리자 구성 요소를 배포하려는 경우에만 AWS IoT 정책을 업데이트해야 합니다 AWS IoT Core. 그렇지 않으면 이 섹션을 건너뛰어도 됩니다.

#### AWS IoT 사물 정책 구성(콘솔)
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>[AWS IoT Greengrass 콘솔](https://console.aws.amazon.com/greengrass) 탐색 메뉴에서 **코어 디바이스**를 선택합니다.

1. <a name="update-iot-policy-console-choose-core-device"></a>업데이트할 코어 디바이스를 **코어 디바이스** 페이지에서 선택합니다.

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>코어 디바이스 세부 정보 페이지에서 코어 디바이스의 **사물**에 대한 링크를 선택합니다. 이 링크를 통해 사물 세부 정보 페이지가 AWS IoT 콘솔에서 열립니다.

1. <a name="update-iot-policy-console-choose-thing-security"></a>사물 세부 정보 페이지에서 **인증서**를 선택합니다.

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>**인증서** 탭에서 사물의 활성 인증서를 선택합니다.

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>인증서 세부 정보 페이지에서 **정책**을 선택합니다.

1. <a name="update-iot-policy-console-choose-policy"></a>**정책** 탭에서 검토하고 업데이트할 AWS IoT 정책을 선택합니다. 코어 디바이스의 활성 인증서에 연결된 원하는 정책에 필수 권한을 추가할 수 있습니다.
**참고**  <a name="quick-installation-iot-policies-note"></a>
[AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 사용하여 리소스를 프로비저닝한](quick-installation.md) 경우 두 가지 AWS IoT 정책이 있습니다. 이름이 **GreengrassV2IoTThingPolicy**인 정책을 선택하는 것이 좋습니다(있는 경우). 빠른 설치 프로그램으로 생성한 코어 디바이스에서는 기본적으로 이 정책 이름이 사용됩니다. 이 정책에 권한을 추가하면 이 정책을 사용하는 다른 코어 디바이스에도 이러한 권한을 부여하는 것입니다.

1. <a name="update-iot-policy-console-edit-policy"></a>정책 개요에서 **활성 버전 편집**을 선택합니다.

1. 필수 권한에 대한 정책을 검토하고 누락된 필수 권한이 있으면 추가합니다.<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – (선택 사항)이 권한은 코어 디바이스의 네트워크 연결 정보를 AWS IoT Greengrass 클라우드 서비스에 보고하는 [IP 감지기 구성 요소를](ip-detector-component.md) 사용하는 데 필요합니다.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`, `iot:UpdateThingShadow`및 `iot:DeleteThingShadow`- (선택 사항) 이러한 권한은 [섀도 관리자 구성 요소를](shadow-manager-component.md) 사용하여 클라이언트 디바이스 섀도와 동기화하는 데 필요합니다 AWS IoT Core. 이 특성에는 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상, 섀도 관리자 v2.2.0 이상 및 [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상이 필요합니다.

1. (선택 사항) 코어 디바이스가 섀도우를 동기화하도록 허용하려면 정책에 다음 문을 AWS IoT Core추가합니다. 클라이언트 디바이스 섀도우와 상호 작용하지만 동기화하지 않으려는 경우이 단계를 AWS IoT Core건너뜁니다. 사용하는 리전 및 AWS 계정 숫자로 *리전* 및 *account-id*를 바꿉니다.
   + 이 예제 문에서는 모든 사물의 디바이스 섀도에 대한 액세스가 허용됩니다. 모범 보안 사례를 따르려면 코어 디바이스에 연결하는 클라이언트 디바이스와 코어 디바이스만으로 액세스를 제한할 수 있습니다. 자세한 내용은 [클라이언트 디바이스를 지원하는 최소 AWS IoT 정책](device-auth.md#client-device-support-minimal-iot-policy) 단원을 참조하십시오.

   ```
   {
     "Effect": "Allow",
     "Action": [
       "iot:GetThingShadow",
       "iot:UpdateThingShadow",
       "iot:DeleteThingShadow"
     ],
     "Resource": [
       "arn:aws:iot:region:account-id:thing/*"
     ]
   }
   ```

   이 문을 추가하면 정책 문서가 다음 예제와 비슷하게 보일 수 있습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iot:Connect",
           "iot:Publish",
           "iot:Subscribe",
           "iot:Receive",
           "greengrass:*"
         ],
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "iot:GetThingShadow",
           "iot:UpdateThingShadow",
           "iot:DeleteThingShadow"
         ],
         "Resource": [
           "arn:aws:iot:us-east-1:123456789012:thing/*"
         ]
       }
     ]
   }
   ```

------

1. <a name="update-iot-policy-console-set-as-active-version"></a>새 정책 버전을 활성 버전으로 설정하려면 **정책 버전 상태**에서 **편집한 버전을 이 정책의 활성 버전으로 설정**을 선택합니다.

1. <a name="update-iot-policy-console-save-policy"></a>**새 버전으로 저장**을 선택합니다.

#### AWS IoT 사물 정책 구성(AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>코어 디바이스 사물의 보안 주체를 나열합니다 AWS IoT . 사물 보안 주체는 X.509 디바이스 인증서 또는 기타 ID일 수 있습니다. 다음 명령을 실행하고 *MyGreengrassCore*를 코어 디바이스의 이름으로 바꿉니다.

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   코어 디바이스의 사물 보안 주체가 나열되는 응답이 작업에서 반환됩니다.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>코어 디바이스의 활성 인증서를 식별합니다. 다음 명령을 실행하고, 활성 인증서를 찾을 때까지 이전 단계의 각 인증서 ID로 *certificateId*를 바꿉니다. 인증서 ID는 인증서 ARN 끝에 있는 16진수 문자열입니다. `--query` 인수에서는 인증서의 상태만 출력으로 지정됩니다.

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   인증서 상태가 문자열로 작업에서 반환됩니다. 예를 들어, 인증서가 활성이라면 이 작업에서는 `"ACTIVE"`가 출력됩니다.

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>인증서에 연결된 AWS IoT 정책을 나열합니다. 다음 명령을 실행하고 인증서의 ARN으로 인증서 ARN을 바꿉니다.

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   작업은 인증서에 연결된 AWS IoT 정책을 나열하는 응답을 반환합니다.

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>보고 업데이트할 정책을 선택합니다.
**참고**  <a name="quick-installation-iot-policies-note"></a>
[AWS IoT Greengrass 코어 소프트웨어 설치 관리자를 사용하여 리소스를 프로비저닝한](quick-installation.md) 경우 두 가지 AWS IoT 정책이 있습니다. 이름이 **GreengrassV2IoTThingPolicy**인 정책을 선택하는 것이 좋습니다(있는 경우). 빠른 설치 프로그램으로 생성한 코어 디바이스에서는 기본적으로 이 정책 이름이 사용됩니다. 이 정책에 권한을 추가하면 이 정책을 사용하는 다른 코어 디바이스에도 이러한 권한을 부여하는 것입니다.

1. <a name="update-iot-policy-cli-get-policy-document"></a>정책의 문서를 가져옵니다. 다음 명령을 실행하고 정책의 이름으로 *GreengrassV2IoTThingPolicy*를 바꿉니다.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   정책의 문서와 정책에 대한 기타 정보가 있는 응답이 작업에서 반환됩니다. 정책 문서는 문자열로 직렬화된 JSON 객체입니다.

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>온라인 변환기 또는 기타 도구를 사용하여 정책 문서 문자열을 JSON 객체로 변환한 다음에 `iot-policy.json`이라는 파일에 저장합니다.

   예를 들어, 설치된 [jq](https://stedolan.github.io/jq/) 도구가 있으면 다음 명령을 실행하여 정책 문서를 가져와서 JSON 객체로 변환하고 정책 문서를 JSON 객체로 저장할 수 있습니다.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. 필수 권한에 대한 정책을 검토하고 누락된 필수 권한이 있으면 추가합니다.

   <a name="nano-command-intro-existing-file"></a>예를 들어 Linux 기반 시스템에서 GNU nano를 사용하여 파일을 열도록 다음 명령을 실행할 수 있습니다.

   ```
   nano iot-policy.json
   ```<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo` – (선택 사항)이 권한은 코어 디바이스의 네트워크 연결 정보를 AWS IoT Greengrass 클라우드 서비스에 보고하는 [IP 감지기 구성 요소를](ip-detector-component.md) 사용하는 데 필요합니다.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`, `iot:UpdateThingShadow`및 `iot:DeleteThingShadow`- (선택 사항) 이러한 권한은 [섀도 관리자 구성 요소를](shadow-manager-component.md) 사용하여 클라이언트 디바이스 섀도와 동기화하는 데 필요합니다 AWS IoT Core. 이 특성에는 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상, 섀도 관리자 v2.2.0 이상 및 [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상이 필요합니다.

1. <a name="update-iot-policy-cli-create-policy-version"></a>변경 사항을 정책의 새 버전으로 저장합니다. 다음 명령을 실행하고 정책의 이름으로 *GreengrassV2IoTThingPolicy*를 바꿉니다.

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   작업에 성공하면 다음 예제와 비슷한 응답이 반환됩니다.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## 클라이언트 디바이스 지원용 Greengrass 구성 요소
<a name="cloud-discovery-components"></a>

**중요**  <a name="client-device-support-nucleus-requirement"></a>
클라이언트 디바이스가 지원되려면 코어 디바이스에서 [Greengrass nucleus](greengrass-nucleus-component.md) v2.2.0 이상이 실행되어야 합니다.

코어 디바이스와 연결되어 통신하도록 클라이언트 디바이스를 활성화하려면 다음 Greengrass 구성 요소를 코어 디바이스에 배포합니다.
+ <a name="client-device-component-overview-client-device-auth"></a>[클라이언트 디바이스 인증](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  클라이언트 디바이스를 인증하고 클라이언트 디바이스 작업을 승인할 클라이언트 디바이스 인증 구성 요소를 배포합니다. 이 구성 요소를 사용하면 AWS IoT 사물을 코어 디바이스에 연결할 수 있습니다.

  이 구성 요소를 사용하려면 몇 가지 구성이 필요합니다. 클라이언트 디바이스의 그룹과 각 그룹에서 수행하도록 승인되는 작업(예: MQTT를 통한 연결 및 통신)을 지정해야 합니다. 자세한 내용은 [클라이언트 디바이스 인증 구성 요소 구성](client-device-auth-component.md#client-device-auth-component-configuration)을 참조하세요.
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[MQTT 3.1.1 브로커(Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  경량 MQTT 브로커를 실행할 Moquette MQTT 브로커 구성 요소를 배포합니다. Moquette MQTT 브로커에서는 MQTT 3.1.1을 준수하며 QoS 0, QoS 1, QoS 2, 보존된 메시지, Last Will 메시지 및 영구 구독에 대한 로컬 지원이 포함되어 있습니다.

  이 구성 요소는 구성하지 않아도 사용할 수 있습니다. 그러나 이 구성 요소에서 MQTT 브로커를 운영하는 포트는 구성해도 됩니다. 기본적으로 포트 8883이 사용됩니다.
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[MQTT 5 브로커(EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**참고**  
EMQX MQTT 5를 사용하려면 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상 및 클라이언트 디바이스 인증 v2.2.0 이상을 사용해야 합니다.

  클라이언트 디바이스와 코어 디바이스 간 통신에서 MQTT 5.0 특성이 사용되도록 EMQX MQTT 브로커 구성 요소를 배포합니다. EMQX MQTT 브로커에서는 MQTT 5.0 규정이 준수되며, 세션 및 메시지 만료 간격, 사용자 속성, 공유 구독, 주제 별칭 등에 대한 지원이 포함되어 있습니다.

  이 구성 요소는 구성하지 않아도 사용할 수 있습니다. 그러나 이 구성 요소에서 MQTT 브로커를 운영하는 포트는 구성해도 됩니다. 기본적으로 포트 8883이 사용됩니다.
+ <a name="client-device-component-overview-mqtt-bridge"></a>[MQTT 브리지](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  (선택 사항) MQTT 브리지 구성 요소를 배포하여 클라이언트 디바이스(로컬 MQTT), 로컬 게시/구독 및 AWS IoT Core MQTT 간에 메시지를 릴레이합니다. 클라이언트 디바이스를와 동기화 AWS IoT Core 하고 Greengrass 구성 요소의 클라이언트 디바이스와 상호 작용하도록이 구성 요소를 구성합니다.

  이 구성 요소는 구성하지 않아도 사용할 수 있습니다. 이 구성 요소에서 메시지를 릴레이하는 주제 매핑을 지정해야 합니다. 자세한 내용은 [MQTT 브리지 구성 요소 구성](mqtt-bridge-component.md#mqtt-bridge-component-configuration)을 참조하세요.
+ <a name="client-device-component-overview-ip-detector"></a>[IP 감지기](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  (선택 사항) 코어 디바이스의 MQTT 브로커 엔드포인트를 AWS IoT Greengrass 클라우드 서비스에 자동으로 보고하도록 IP 감지기 구성 요소를 배포합니다. 네트워크 설정이 복잡한 경우(예: 라우터에서 MQTT 브로커 포트를 코어 디바이스에 전달하는 경우) 이 구성 요소를 사용할 수 없습니다.

  이 구성 요소는 구성하지 않아도 사용할 수 있습니다.
+ <a name="client-device-component-overview-shadow-manager"></a>[섀도 관리자](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**참고**  
클라이언트 디바이스 섀도를 관리하려면 [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 이상, 섀도 관리자 v2.2.0 이상 및 [MQTT 브리지](mqtt-bridge-component.md) v2.2.0 이상을 사용해야 합니다.

  (선택 사항) 섀도 관리자 구성 요소를 배포하여 코어 디바이스에서 클라이언트 디바이스 섀도를 관리합니다. Greengrass 구성 요소에서는 클라이언트 디바이스와 상호 작용할 클라이언트 디바이스 섀도를 가져오고 업데이트하고 삭제할 수 있습니다. 클라이언트 디바이스 섀도를 AWS IoT Core 클라우드 서비스와 동기화하도록 섀도 관리자 구성 요소를 구성할 수도 있습니다.

  클라이언트 디바이스 섀도와 함께 이 구성 요소를 사용하려면 로컬 게시/구독이 사용되는 클라이언트 디바이스와 섀도 관리자 간 메시지가 릴레이되도록 MQTT 브리지 구성 요소를 구성해야 합니다. 그렇지 않으면 이 구성 요소에는 사용할 구성은 필요하지 않지만, 디바이스 섀도를 동기화할 구성은 필요합니다.

**참고**  <a name="note-deploy-one-mqtt-broker"></a>
MQTT 브로커 구성 요소를 하나만 배포하는 것이 좋습니다. [MQTT 브리지](mqtt-bridge-component.md) 및 [IP 탐지기](ip-detector-component.md) 구성 요소는 한 번에 단 하나의 MQTT 브로커 구성 요소와 연동합니다. 여러 MQTT 브로커 구성 요소를 배포하는 경우 다른 포트가 사용되도록 구성해야 합니다.

## 클라우드 검색 구성(콘솔)
<a name="configure-cloud-discovery-console"></a>

 AWS IoT Greengrass 콘솔을 사용하여 클라이언트 디바이스를 연결하고, 코어 디바이스 엔드포인트를 관리하고, 구성 요소를 배포하여 클라이언트 디바이스 지원을 활성화할 수 있습니다. 자세한 내용은 [2단계: 클라이언트 디바이스 지원 활성화](client-devices-tutorial.md#enable-client-device-support) 단원을 참조하십시오.

## 클라우드 검색 구성(AWS CLI)
<a name="configure-cloud-discovery-cli"></a>

 AWS Command Line Interface (AWS CLI)를 사용하여 클라이언트 디바이스를 연결하고, 코어 디바이스 엔드포인트를 관리하고, 구성 요소를 배포하여 클라이언트 디바이스 지원을 활성화할 수 있습니다. 자세한 내용은 다음을 참조하세요.
+ [클라이언트 디바이스 연결 관리(AWS CLI)](associate-client-devices.md#manage-client-device-associations-cli)
+ [코어 디바이스 엔드포인트 관리](manage-core-device-endpoints.md)
+ [AWS에서 제공하는 클라이언트 디바이스 구성 요소](client-device-components.md)
+ [배포 만들기](create-deployments.md)