

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

# 클라이언트 디바이스 인증 및 권한 부여
<a name="ipc-client-device-auth"></a>

**참고**  
이 기능은 [Greengrass nucleus 구성 요소](greengrass-nucleus-component.md)의 v2.6.0 이상에서 사용할 수 있습니다.

클라이언트 디바이스 인증 IPC 서비스를 사용하여 클라이언트 디바이스와 같은 로컬 IoT 디바이스가 연결할 수 있는 사용자 지정 로컬 브로커 구성 요소를 개발할 수 있습니다.

이러한 IPC 작업을 사용하려면 사용자 지정 구성 요소에서 [클라이언트 디바이스 인증 구성 요소](client-device-auth-component.md) 버전 2.2.0 이상을 종속성으로 포함합니다. 그런 다음 사용자 지정 구성 요소에서 IPC 작업을 사용하여 다음을 수행할 수 있습니다.
+ 코어 디바이스에 연결하는 클라이언트 디바이스의 ID를 확인합니다.
+ 클라이언트 디바이스가 코어 디바이스에 연결할 세션을 생성합니다.
+ 클라이언트 디바이스에 작업을 수행할 권한이 있는지 확인합니다.
+ 코어 디바이스의 서버 인증서가 교체되면 알림을 받습니다.

**Topics**
+ [최소 SDK 버전](#ipc-client-device-auth-sdk-versions)
+ [권한 부여](#ipc-client-device-auth-authorization)
+ [VerifyClientDeviceIdentity](#ipc-operation-verifyclientdeviceidentity)
+ [GetClientDeviceAuthToken](#ipc-operation-getclientdeviceauthtoken)
+ [AuthorizeClientDeviceAction](#ipc-operation-authorizeclientdeviceaction)
+ [SubscribeToCertificateUpdates](#ipc-operation-subscribetocertificateupdates)

## 최소 SDK 버전
<a name="ipc-client-device-auth-sdk-versions"></a>

다음 표에는 클라이언트 디바이스 인증 IPC 서비스와 상호 작용하는 데 사용해야 AWS IoT Device SDK 하는의 최소 버전이 나열되어 있습니다.


| SDK | 최소 버전 | 
| --- | --- | 
|  [AWS IoT Device SDK Java v2용](https://github.com/aws/aws-iot-device-sdk-java-v2)  |  v1.9.3  | 
|  [AWS IoT Device SDK Python v2용](https://github.com/aws/aws-iot-device-sdk-python-v2)  |  v1.11.3  | 
|  [AWS IoT Device SDK C\$1\$1 v2용](https://github.com/aws/aws-iot-device-sdk-cpp-v2)  |  v1.18.3  | 
|  [AWS IoT Device SDK JavaScript v2용](https://github.com/aws/aws-iot-device-sdk-js-v2)  |  v1.12.0  | 

## 권한 부여
<a name="ipc-client-device-auth-authorization"></a>

사용자 지정 구성 요소에서 클라이언트 디바이스 인증 IPC 서비스를 사용하려면 구성 요소가 이러한 작업을 수행하도록 허용하는 권한 부여 정책을 정의해야 합니다. 권한 부여 정책 정의에 대한 자세한 내용은 [구성 요소에 IPC 작업을 수행할 수 있는 권한 부여](interprocess-communication.md#ipc-authorization-policies) 섹션을 참조하세요.

클라이언트 디바이스 인증 및 권한 부여에 대한 권한 부여 정책에는 다음 속성이 있습니다.

**IPC 서비스 식별자:** `aws.greengrass.clientdevices.Auth`


| 연산 | 설명 | 리소스 | 
| --- | --- | --- | 
|  `aws.greengrass#VerifyClientDeviceIdentity`  |  구성 요소가 클라이언트 디바이스의 ID를 확인할 수 있도록 합니다.  |  `*`  | 
|  `aws.greengrass#GetClientDeviceAuthToken`  |  구성 요소가 클라이언트 디바이스의 자격 증명을 검증하고 해당 클라이언트 디바이스에 대한 세션을 생성할 수 있도록 합니다.  |  `*`  | 
|  `aws.greengrass#AuthorizeClientDeviceAction`  |  구성 요소가 클라이언트 디바이스에 작업을 수행할 수 있는 권한이 있는지 확인할 수 있도록 합니다.  |  `*`  | 
|  `aws.greengrass#SubscribeToCertificateUpdates`  |  코어 디바이스의 서버 인증서가 교체될 때 구성 요소가 알림을 받을 수 있도록 합니다.  |  `*`  | 
|  `*`  |  구성 요소가 모든 클라이언트 디바이스 인증 IPC 서비스 작업을 수행할 수 있도록 합니다.  |  `*`  | 

### 권한 부여 정책 예제
<a name="ipc-client-device-auth-authorization-policy-examples"></a>

다음 권한 부여 정책 예제를 참조하면 구성 요소의 권한 부여 정책을 구성하는 데 도움이 됩니다.

**Example 권한 부여 정책 예제**  
다음 예제 권한 부여 정책에서는 구성 요소가 모든 클라이언트 디바이스 인증 IPC 작업을 수행할 수 있도록 합니다.  

```
{
  "accessControl": {
    "aws.greengrass.clientdevices.Auth": {
      "com.example.MyLocalBrokerComponent:clientdevices:1": {
        "policyDescription": "Allows access to authenticate and authorize client devices.",
        "operations": [
          "aws.greengrass#VerifyClientDeviceIdentity",
          "aws.greengrass#GetClientDeviceAuthToken",
          "aws.greengrass#AuthorizeClientDeviceAction",
          "aws.greengrass#SubscribeToCertificateUpdates"
        ],
        "resources": [
          "*"
        ]
      }
    }
  }
}
```

## VerifyClientDeviceIdentity
<a name="ipc-operation-verifyclientdeviceidentity"></a>

클라이언트 디바이스의 ID를 확인합니다. 이 작업은 클라이언트 디바이스가 유효한 AWS IoT 사물인지 확인합니다.

### 요청
<a name="ipc-operation-verifyclientdeviceidentity-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`credential`  
클라이언트 디바이스의 자격 증명입니다. 이 객체 `ClientDeviceCredential`에는 다음 정보가 포함됩니다.    
`clientDeviceCertificate`(Python: `client_device_certificate`)  
클라이언트 디바이스의 X.509 디바이스 인증서입니다.

### 응답
<a name="ipc-operation-verifyclientdeviceidentity-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`isValidClientDevice`(Python: `is_valid_client_device`)  
클라이언트 디바이스의 ID가 유효한지 여부입니다.

## GetClientDeviceAuthToken
<a name="ipc-operation-getclientdeviceauthtoken"></a>

클라이언트 디바이스의 자격 증명을 검증하고 클라이언트 디바이스에 대한 세션을 생성합니다. 이 작업은 이후 [클라이언트 디바이스 작업에 권한을 부여](#ipc-operation-authorizeclientdeviceaction)하는 요청에서 사용할 수 있는 세션 토큰을 반환합니다.

클라이언트 디바이스를 연결하려면 [클라이언트 디바이스 인증 구성 요소](client-device-auth-component.md#client-device-auth-component-configuration)에서 클라이언트 디바이스가 사용하는 클라이언트 ID에 대한 `mqtt:connect` 권한을 부여해야 합니다.

### 요청
<a name="ipc-operation-getclientdeviceauthtoken-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`credential`  
클라이언트 디바이스의 자격 증명입니다. 이 객체 `CredentialDocument`에는 다음 정보가 포함됩니다.    
`mqttCredential`(Python: `mqtt_credential`)  
클라이언트 디바이스의 MQTT 자격 증명입니다. 클라이언트 디바이스가 연결에 사용하는 클라이언트 ID 및 인증서를 지정합니다. 이 객체 `MQTTCredential`에는 다음 정보가 포함됩니다.    
`clientId`(Python: `client_id`)  
연결하는 데 사용할 Client ID입니다.  
`certificatePem`(Python: `certificate_pem`)  
연결하는 데 사용할 X.509 디바이스 인증서입니다.  
`username`  
이 속성은 현재 사용되지 않습니다.  
`password`  
이 속성은 현재 사용되지 않습니다.

### 응답
<a name="ipc-operation-getclientdeviceauthtoken-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`clientDeviceAuthToken`(Python: `client_device_auth_token`)  
클라이언트 디바이스의 세션 토큰입니다. 이후 이 클라이언트 디바이스의 작업에 권한을 부여하는 요청에서 이 세션 토큰을 사용할 수 있습니다.

## AuthorizeClientDeviceAction
<a name="ipc-operation-authorizeclientdeviceaction"></a>

클라이언트 디바이스가 리소스에서 작업을 수행할 권한이 있는지 확인합니다. *클라이언트 디바이스 권한 부여 정책*은 클라이언트 디바이스가 코어 디바이스에 연결되는 동안 수행할 수 있는 권한을 지정합니다. [클라이언트 디바이스 인증 구성 요소](client-device-auth-component.md#client-device-auth-component-configuration)를 구성할 때 클라이언트 디바이스 권한 부여 정책을 정의합니다.

### 요청
<a name="ipc-operation-authorizeclientdeviceaction-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`clientDeviceAuthToken`(Python: `client_device_auth_token`)  
클라이언트 디바이스의 세션 토큰입니다.

`operation`  
권한을 부여할 작업입니다.

`resource`  
클라이언트 디바이스가 작업을 수행하는 리소스입니다.

### 응답
<a name="ipc-operation-authorizeclientdeviceaction-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`isAuthorized`(Python: `is_authorized`)  
클라이언트 디바이스가 리소스에서 작업을 수행할 수 있는 권한이 있는지 여부입니다.

## SubscribeToCertificateUpdates
<a name="ipc-operation-subscribetocertificateupdates"></a>

코어 디바이스가 교체될 때마다 코어 디바이스의 새 서버 인증서를 수신하도록 구독합니다. 서버 인증서가 교체되면 새 서버 인증서를 사용하여 브로커를 다시 로드해야 합니다.

[클라이언트 디바이스 인증 구성 요소](client-device-auth-component.md)는 기본적으로 7일마다 서버 인증서를 교체합니다. 교체 간격을 2\$110일로 구성할 수 있습니다.

<a name="ipc-subscribe-operation-note"></a>이 작업은 이벤트 메시지 스트림을 구독하는 구독 작업입니다. 이 작업을 사용하려면 이벤트 메시지, 오류 및 스트림 종료를 처리하는 함수를 사용하여 스트림 응답 핸들러를 정의합니다. 자세한 내용은 [IPC 이벤트 스트림 구독](interprocess-communication.md#ipc-subscribe-operations) 단원을 참조하십시오.

**이벤트 메시지 유형:** `CertificateUpdateEvent`

### 요청
<a name="ipc-operation-subscribetocertificateupdates-request"></a>

이 작업의 요청에서는 다음 파라미터를 사용합니다.

`certificateOptions`(Python: `certificate_options`)  
구독할 인증서 업데이트의 유형입니다. 이 객체 `CertificateOptions`에는 다음 정보가 포함됩니다.    
`certificateType`(Python: `certificate_type`)  
구독할 인증서 업데이트의 유형입니다. 다음 옵션을 선택합니다.  
+ `SERVER`

### 응답
<a name="ipc-operation-subscribetocertificateupdates-response"></a>

이 작업의 응답에는 다음 정보가 포함됩니다.

`messages`  
메시지 스트림입니다. 이 객체 `CertificateUpdateEvent`에는 다음 정보가 포함됩니다.    
`certificateUpdate`(Python: `certificate_update`)  
새 인증서에 대한 정보입니다. 이 객체 `CertificateUpdate`에는 다음 정보가 포함됩니다.    
`certificate`  
인증서입니다.  
`privateKey`(Python: `private_key`)  
인증서의 프라이빗 키입니다.  
`publicKey`(Python: `public_key`)  
인증서의 퍼블릭 키입니다.  
`caCertificates`(Python: `ca_certificates`)  
인증서의 CA 인증서 체인에 있는 CA(인증 기관) 인증서 목록입니다.