

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

# Cloud-to-Cloud(C2C) 커넥터
<a name="concepts-c2c-connector"></a>

cloud-to-cloud 커넥터를 사용하면 타사 디바이스와 간의 양방향 통신을 생성하고 용이하게 할 수 있습니다 AWS.

**Topics**
+ [cloud-to-cloud(C2C) 커넥터란 무엇입니까?](#concepts-what-is-c2c-connector)
+ [C2C 커넥터 카탈로그란 무엇입니까?](#concepts-connector-catalog)
+ [AWS Lambda C2C 커넥터로서의 함수](#lambda-connector)
+ [관리형 통합 커넥터 워크플로](#c2c-workflow)
+ [C2C(cloud-to-cloud) 커넥터 사용 지침](#c2c-cloud-connector-disclaimer)
+ [C2C(Cloud-to-Cloud) 커넥터 빌드](concepts-building-connector.md)
+ [C2C(Cloud-to-Cloud) 커넥터 사용](use-c2c-create-cloud-connector.md)

## cloud-to-cloud(C2C) 커넥터란 무엇입니까?
<a name="concepts-what-is-c2c-connector"></a>

cloud-to-cloud 커넥터는를 타사 클라우드 공급자의 엔드포인트 AWS 클라우드 에 안전하게 연결하는 사전 구축된 소프트웨어 패키지입니다. 솔루션 공급자는 C2C 커넥터를 사용하여 AWS IoT Device Management의 관리형 통합을 활용하여 타사 클라우드에 연결된 디바이스를 제어할 수 있습니다.

관리형 통합에는 AWS 고객이 통합하려는 커넥터를 보고 선택할 수 있는 커넥터 카탈로그가 포함되어 있습니다. 자세한 내용은 [C2C 커넥터 카탈로그란 무엇입니까?](#concepts-connector-catalog) 섹션을 참조하세요.

관리형 통합을 사용하려면 모든 커넥터를 함수로 AWS Lambda 구현해야 합니다.

## C2C 커넥터 카탈로그란 무엇입니까?
<a name="concepts-connector-catalog"></a>

AWS IoT Device Management 커넥터 카탈로그의 관리형 통합은 AWS IoT Device Management의 관리형 통합과 타사 클라우드 공급자 간의 양방향 통신을 용이하게 하는 C2C 커넥터 모음입니다. AWS Management Console 또는에서 커넥터를 볼 수 있습니다 AWS CLI.

**콘솔을 사용하여 관리형 통합 커넥터 카탈로그를 보려면**

1. [관리형 통합 콘솔](https://console.aws.amazon.com/iot/home#/managed-integrations/intro) 열기

1. 왼쪽 탐색 창에서 **관리형 통합을** 선택합니다.

1. 관리형 통합 콘솔의 왼쪽 탐색 창에서 **카탈로그**를 선택합니다.

## AWS Lambda C2C 커넥터로서의 함수
<a name="lambda-connector"></a>

모든 C2C 커넥터 Lambda 함수는 관리형 통합과 타사 플랫폼의 해당 작업 간에 명령과 이벤트를 변환하고 전송합니다. Lambda에 대한 자세한 내용은 [란 무엇입니까 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)?를 참조하십시오.

예를 들어 최종 사용자가 타사 OEM에서 제조한 스마트 전구를 소유하고 있다고 가정해 보겠습니다. C2C 커넥터를 사용하면 최종 사용자가 관리형 통합 플랫폼을 통해이 조명을 켜거나 끄는 명령을 실행할 수 있습니다. 그러면이 명령이 커넥터에 호스팅된 Lambda 함수로 전달되어 요청을 타사 플랫폼에 대한 API 호출로 변환하여 디바이스를 켜거나 끕니다.

`CreateCloudConnector` API를 호출할 때 Lambda 함수가 필요합니다. Lambda 함수에 배포된 코드는에 언급된 모든 인터페이스와 기능을 구현해야 합니다[C2C(Cloud-to-Cloud) 커넥터 빌드](concepts-building-connector.md).

## 관리형 통합 커넥터 워크플로
<a name="c2c-workflow"></a>

개발자는 관리형 통합에 C2C 커넥터를 등록해야 합니다 AWS IoT Device Management. 이 등록 프로세스는 고객이 커넥터를 사용하기 위해 액세스할 수 있는 논리적 커넥터 리소스를 생성합니다.

**참고**  
C2C 커넥터는 AWS IoT Device Management가 커넥터를 설명하기 위해 관리형 통합 내에서 생성된 메타데이터 세트입니다.

다음 다이어그램은 모바일 애플리케이션에서 클라우드 연결 디바이스로 명령을 전송할 때 C2C 커넥터의 역할을 보여줍니다. C2C 커넥터는 AWS IoT Device Management의 관리형 통합과 타사 클라우드 플랫폼 간의 변환 계층 역할을 합니다.

![\[커넥터 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/app-to-oem-device-workflow.png)


## C2C(cloud-to-cloud) 커넥터 사용 지침
<a name="c2c-cloud-connector-disclaimer"></a>

 생성한 C2C 커넥터는 콘텐츠이고, 액세스한 다른 고객이 생성한 C2C 커넥터는 타사 콘텐츠입니다.는 관리형 통합의 일부로 C2C 커넥터를 생성하거나 관리하지 AWS 않습니다.

 C2C 커넥터를 다른 관리형 통합 고객과 공유할 수 있습니다. 이렇게 하면 서비스 공급자 AWS 가 AWS 콘솔에 해당 C2C 커넥터 및 관련 연락처 정보를 나열할 수 있는 권한을 부여하고 다른 AWS 고객이 연락할 수 있음을 이해합니다. 고객에게 C2C 커넥터에 대한 액세스 권한을 부여하고 다른 AWS 고객의 C2C 커넥터 액세스 권한을 관리하는 모든 조건에 대한 책임은 전적으로 사용자에게 있습니다.

# C2C(Cloud-to-Cloud) 커넥터 빌드
<a name="concepts-building-connector"></a>

다음 섹션에서는 AWS IoT Device Management의 관리형 통합을 위한 C2C(Cloud-to-Cloud) 커넥터를 빌드하는 단계를 다룹니다.

**Topics**
+ [사전 조건](#c2c-connector-prerequisites)
+ [C2C 커넥터 요구 사항](#c2c-connector-requirements)
+ [계정 연결을 위한 OAuth 2.0 요구 사항](concepts-account-linking.md)
+ [C2C 커넥터 인터페이스 작업 구현](connector-operations-overview.md)
+ [C2C 커넥터 호출](allow-iot-smart-home.md)
+ [IAM 역할에 권한 추가](adding-permissions-to-iam-role.md)
+ [C2C 커넥터 수동 테스트](manually-testing-connector.md)

## 사전 조건
<a name="c2c-connector-prerequisites"></a>

C2C(Cloud-to-Cloud) 커넥터를 생성하기 전에 다음이 필요합니다.
+ C2C 커넥터를 호스팅하고 관리형 통합을 통해 등록 AWS 계정 하기 위한 입니다. 자세한 내용은 [생성 단원을 AWS 계정](https://docs.aws.amazon.com//accounts/latest/reference/manage-acct-creating.html)참조하십시오.
+ 커넥터를 빌드할 때는 특정 IAM 권한이 필요합니다. 를 사용하려면 
+ 커넥터가 사용되는 타사 클라우드 공급자가 OAuth 2.0 인증을 지원하는지 확인합니다. 자세한 내용은 [계정 연결을 위한 OAuth 2.0 요구 사항](concepts-account-linking.md) 단원을 참조하십시오.

  또한 커넥터를 테스트하려면 커넥터 개발자에게 다음이 있어야 합니다.
  + C2C 커넥터와 연결할 타사 클라우드의 클라이언트 ID
  + C2C 커넥터와 연결할 타사 클라우드의 클라이언트 보안 암호
  + OAuth 2.0 권한 부여 URL
  + OAuth 2.0 토큰 URL
+ 타사 API에 필요한 모든 API 키
+ 에서 호스팅하는 OAuth 콜백 URL에 대한 타사 API 등록 또는 허용 목록에 필요한 모든 API 키입니다 AWS. 일부 타사는 OAuth 리디렉션 URL을 명시적으로 허용하지만, 다른 타사에는 사용자가 로그인하여 OAuth URL을 등록할 수 있는 워크플로가 있습니다. 관리형 통합 OAuth 리디렉션 엔드포인트를 허용 목록에 등록하는 데 필요한 사항을 이해하려면 특정 타사에 문의하세요.

### 필수 권한
<a name="c2c-connector-required-permissions"></a>

커넥터를 빌드할 때는 특정 IAM 권한이 필요합니다. 작업에 대한 `iotmanagedintegrations:` 권한 외에도 다음 권한이 필요합니다.
+ [CreateAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateAccountAssociation.html), [CreateConnectorDestination](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateConnectorDestination.html), [GetAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetAccountAssociation.html) 및 [StartAccountAssociationRefresh](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_StartAccountAssociationRefresh.html), 필수 `secretsmanager:GetSecretValue`
+ [CreateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateCloudConnector.html)에는 다음이 필요합니다. `lambda:Invoke` 

`iotmanagedintegrations:` 권한 및 작업에 대한 자세한 내용은 [AWS 관리형 통합에서 정의한 작업을 참조하세요](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotmanagedintegrations.html#awsiotmanagedintegrations-actions-as-permissions).

## C2C 커넥터 요구 사항
<a name="c2c-connector-requirements"></a>

개발하는 [C2C 커넥터](concepts-c2c-connector.md#concepts-what-is-c2c-connector)는 AWS IoT Device Management의 관리형 통합과 타사 공급업체 클라우드 간의 양방향 통신을 용이하게 합니다. 커넥터는 AWS IoT Device Management가 최종 사용자를 대신하여 작업을 수행할 수 있도록 관리형 통합을 위한 인터페이스를 구현해야 합니다. 이러한 인터페이스는 최종 사용자 디바이스를 검색하고, AWS IoT Device Management 명령을 시작하고, 액세스 토큰을 기반으로 사용자를 식별하는 기능을 제공합니다. 디바이스 작업을 지원하려면 커넥터가 AWS IoT Device Management의 관리형 통합과 관련 타사 플랫폼 간의 요청 및 응답 메시지 번역을 관리해야 합니다.

**C2C 커넥터에 대한 요구 사항은 다음과 같습니다.**
+ 타사 권한 부여 서버는 OAuth 2.0 표준과에 나열된 구성을 준수해야 합니다[OAuth 구성 요구 사항](concepts-account-linking.md#oauth-config-requirements).
+ Matter Data Model AWS 구현의 식별자를 해석하려면 C2C 커넥터가 필요하며 Matter Data Model AWS 구현을 준수하는 응답과 이벤트를 내보내야 합니다. 자세한 내용은 [AWS Matter 데이터 모델 구현](matter-data-model.md) 섹션을 참조하세요.
+ C2C 커넥터는 AWS IoT Device Management APIs에 대한 관리형 통합을 `SigV4` 인증으로 호출할 수 있어야 합니다. SendConnectorEvent API로 전송되는 비동기 이벤트의 경우 커넥터를 등록하는 데 사용되는 것과 동일한 AWS 계정 자격 증명을 사용하여 관련 SendConnectorEvent 요청에 서명해야 합니다.
+ 커넥터는 `AWS.ActivateUser`, `AWS.DiscoverDevices``AWS.SendCommand`, 및 `AWS.DeactivateUser` 작업을 구현해야 합니다.
+ C2C 커넥터가 디바이스 명령 응답 또는 디바이스 검색과 관련된 타사 이벤트를 수신하면 `SendConnectorEvent` API와의 관리형 통합으로 전달해야 합니다. 이러한 이벤트 및 `SendConnectorEvent` API에 대한 자세한 내용은 [SendConnectorEvent](https://amazonaws.com/iot-mi/latest/APIReference/API_SendConnectorEvent.html)를 참조하세요.

**참고**  
`SendConnectorEvent` API는 관리형 통합 SDK의 일부이며 요청의 수동 구축 및 서명 대신 사용됩니다.

# 계정 연결을 위한 OAuth 2.0 요구 사항
<a name="concepts-account-linking"></a>

모든 C2C 커넥터는 OAuth 2.0 권한 부여 서버를 사용하여 최종 사용자를 인증합니다. 이 서버를 통해 최종 사용자는 타사 계정을 고객의 디바이스 플랫폼과 연결합니다. 계정 연결은 최종 사용자가 C2C 커넥터에서 지원하는 디바이스를 사용하는 데 필요한 첫 번째 단계입니다. 계정 연결 및 OAuth 2.0의 다양한 역할에 대한 자세한 내용은 섹션을 참조하세요[계정 연결 역할](roles-account-linking.md).

C2C 커넥터는 권한 부여 흐름을 지원하기 위해 특정 비즈니스 로직을 구현할 필요는 없지만 C2C 커넥터와 연결된 OAuth2.0 권한 부여 서버는를 충족해야 합니다[OAuth 구성 요구 사항](#oauth-config-requirements).

**참고**  
용 관리형 통합은 권한 부여 코드 흐름이 있는 OAuth 2.0 AWS IoT Device Management 만 지원합니다. 자세한 내용은 [RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1)를 참조하세요.

계정 연결은 관리형 통합 및 커넥터가 액세스 토큰을 사용하여 최종 사용자의 디바이스에 액세스할 수 있도록 허용하는 프로세스입니다. 이 토큰은 최종 사용자의 권한으로 AWS IoT Device Management에 대한 관리형 통합을 제공하므로 커넥터가 API 호출을 통해 최종 사용자의 데이터와 상호 작용할 수 있습니다. 자세한 내용은 [계정 연결 워크플로](account-linking-flow.md) 단원을 참조하십시오.

이러한 민감한 토큰을 로그에 기록하지 않는 것이 좋습니다. 그러나 로그에 저장되는 경우 CloudWatch Logs 데이터 보호 정책을 사용하여 로그의 토큰을 마스킹하는 것이 좋습니다. 자세한 내용은 [Help protect sensitive log data with masking](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/mask-sensitive-log-data.html)을 참조하세요.

에 대한 관리형 통합 AWS IoT Device Management 은 액세스 토큰을 직접 가져오지 않고 권한 부여 코드 부여 유형을 통해 가져옵니다. 먼저 AWS IoT Device Management의 관리형 통합은 권한 부여 코드를 얻어야 합니다. 그런 다음 코드를 액세스 토큰 및 새로 고침 토큰으로 교환합니다. 새로 고침 토큰은 이전 액세스 토큰이 만료될 때 새 액세스 토큰을 요청하는 데 사용됩니다. 액세스 토큰과 새로 고침 토큰이 모두 만료된 경우 계정 연결 흐름을 다시 수행해야 합니다. `StartAccountAssociationRefresh` API 작업을 사용하여이 작업을 수행할 수 있습니다.

**중요**  
발급된 액세스 토큰의 범위는 OAuth 클라이언트가 아닌 사용자별로 지정해야 합니다. 토큰이 클라이언트에 속한 모든 사용자의 모든 디바이스에 대한 액세스를 제공해서는 안 됩니다.  
 권한 부여 서버는 다음 중 하나를 수행해야 합니다.  
JWT 토큰과 같이 추출 가능한 최종 사용자(리소스 소유자) ID가 포함된 액세스 토큰을 발급합니다.
발급된 각 액세스 토큰의 최종 사용자 ID를 반환합니다.

## OAuth 구성 요구 사항
<a name="oauth-config-requirements"></a>

다음 표는 AWS IoT Device Management가 [계정 연결을](account-linking-flow.md) 수행하는 데 필요한 관리형 통합을 위한 OAuth 권한 부여 서버의 필수 파라미터를 보여줍니다.


**OAuth 서버 파라미터**  

|  |  |  | 
| --- |--- |--- |
| 필드 | 필수 | Comment | 
|  `clientId`  |  예  |  애플리케이션의 퍼블릭 식별자입니다. 인증 흐름을 시작하는 데 사용되며 공개적으로 공유할 수 있습니다.  | 
|  `clientSecret`  |  예  |  특히 액세스 토큰에 대한 권한 부여 코드를 교환할 때 권한 부여 서버로 애플리케이션을 인증하는 데 사용되는 보안 키입니다. 기밀을 유지해야 하며 공개적으로 공유해서는 안 됩니다.  | 
|  `authorizationType`  |  예  |  이 권한 부여 구성에서 지원하는 권한 부여 유형입니다. 현재 "OAuth 2.0"만 지원됩니다.  | 
|  `authUrl`  |  예  |  타사 클라우드 공급자의 권한 부여 URL입니다.  | 
|  `tokenUrl`  |  예  |  타사 클라우드 공급자의 토큰 URL입니다.  | 
|  `tokenEndpointAuthenticationScheme`  |  예  |  “HTTP\$1BASIC” 또는 “REQUEST\$1BODY\$1CREDENTIALS”의 인증 체계입니다. HTTP\$1BASIC는 클라이언트 자격 증명이 권한 부여 헤더에 포함되어 있음을 나타내는 반면, 래더는 요청 본문에 포함되어 있음을 나타냅니다.  | 

액세스 토큰 문자열 값이 UTF-8 문자 집합으로 인코딩된 Base64가 되도록 사용하는 OAuth 서버를 구성해야 합니다.

# 계정 연결 역할
<a name="roles-account-linking"></a>

C2C 커넥터를 생성하려면 OAuth 2.0 권한 부여 서버 및 계정 연결이 필요합니다. 자세한 내용은 [계정 연결 워크플로](account-linking-flow.md) 단원을 참조하십시오.

OAuth 2.0은 계정 연결을 구현할 때 다음 네 가지 역할을 정의합니다.

1. 권한 부여 서버

1. 리소스 소유자(최종 사용자)

1. 리소스 서버

1. 클라이언트

다음은 이러한 각 OAuth 역할을 정의합니다.

**권한 부여 서버**  
권한 부여 서버는 타사 클라우드에서 최종 사용자의 자격 증명을 식별하고 인증하는 서버입니다. 이 서버에서 제공하는 액세스 토큰은 AWS 최종 사용자의 고객 플랫폼 계정과 타사 플랫폼 계정을 연결할 수 있습니다. 이 프로세스를 계정 연결이라고 합니다.  
권한 부여 서버는 다음을 제공하여 계정 연결을 지원합니다.  
+ 최종 사용자가 시스템에 로그인할 수 있는 로그인 페이지를 표시합니다. 이를 일반적으로 권한 부여 엔드포인트라고 합니다.
+ 시스템의 최종 사용자를 인증합니다.
+ 최종 사용자를 식별하는 권한 부여 코드를 생성합니다.
+ AWS IoT Device Management의 관리형 통합에 권한 부여 코드를 전달합니다.
+ AWS IoT Device Management의 관리형 통합에서 권한 부여 코드를 수락하고 AWS IoT Device Management의 관리형 통합이 시스템의 최종 사용자 데이터에 액세스하는 데 사용할 수 있는 액세스 토큰을 반환합니다. 이는 일반적으로 토큰 URI 또는 엔드포인트라는 별도의 URI를 통해 완료됩니다.
권한 부여 서버는 AWS IoT Device Management Connector용 관리형 통합과 함께 사용할 OAuth 2.0 권한 부여 코드 흐름을 지원해야 합니다. AWS IoT Device Management용 관리형 통합은 코드 [교환용 증명 키(PKCE)](https://www.rfc-editor.org/rfc/rfc7636)를 통한 권한 부여 코드 흐름도 지원합니다.  
권한 부여 서버는 다음 중 하나를 수행해야 합니다.  
+ JWT 토큰과 같이 추출 가능한 최종 사용자 또는 리소스 소유자 ID가 포함된 액세스 토큰 발급
+ 발급된 각 액세스 토큰에 대한 최종 사용자 ID를 반환할 수 있어야 합니다.
그렇지 않으면 커넥터가 필요한 `AWS.ActivateUser`작업을 지원할 수 없습니다. 이렇게 하면 관리형 통합에서 커넥터 사용을 방지할 수 있습니다.
커넥터 개발자 또는 소유자가 자체 권한 부여 서버를 유지 관리하지 않는 경우 사용되는 권한 부여 서버는 커넥터 개발자 타사 플랫폼에서 관리하는 리소스에 대한 권한을 제공해야 합니다. 즉, 권한 부여 서버에서 관리형 통합으로 수신한 모든 토큰은 디바이스(리소스)에 의미 있는 보안 경계를 제공해야 합니다. 예를 들어 최종 사용자 토큰은 다른 최종 사용자 디바이스에서 명령을 허용하지 않습니다. 토큰에서 제공하는 권한은 플랫폼 내의 리소스에 매핑됩니다. *Lights™* 예제를 생각해 보세요. 최종 사용자가 커넥터와 계정 연결 흐름을 시작하면 권한 부여 서버 앞에 있는* Lights™* 로그인 페이지로 리디렉션됩니다. 로그인하고 클라이언트에 권한을 부여한 후에는 커넥터에 *Lights™* 계정 내의 리소스에 대한 액세스 권한을 부여하는 토큰을 제공합니다.

**리소스 소유자(최종 사용자)**  
리소스 소유자는 계정 연결을 수행하여 계정과 연결된 리소스에 대한 AWS IoT Device Management 고객 액세스를 위한 관리형 통합을 허용합니다. 예를 들어 최종 사용자가 *Lights™* 모바일 애플리케이션에 온보딩한 스마트 전구를 가정해 보겠습니다. 리소스 소유자는 디바이스를 구매하고 온보딩한 최종 사용자 계정을 말합니다. 이 예제에서 리소스 소유자는 *Lights OAuth*OAuth2.0 계정으로 모델링됩니다. 리소스 소유자로서이 계정은 명령을 실행하고 디바이스를 관리할 수 있는 권한을 제공합니다.

**리소스 서버**  
이는 액세스 권한이 필요한 보호된 리소스를 호스팅하는 서버입니다(디바이스 데이터). AWS 고객은 최종 사용자를 대신하여 보호된 리소스에 액세스해야 하며 계정 연결 후 AWS IoT Device Management 커넥터에 대한 관리형 통합을 통해 액세스해야 합니다. 이전의 스마트 전구를 예로 들어보면 리소스 서버는 온보딩된 후 전구를 관리하는 *Lights™*가 소유한 클라우드 기반 서비스입니다. 리소스 서버를 통해 리소스 소유자는 스마트 전구를 켜고 끄는 등의 명령을 스마트 전구에 실행할 수 있습니다. 보호된 리소스는 최종 사용자의 계정 및 최종 사용자가 권한을 제공했을 수 있는 기타 계정/엔터티에만 권한을 제공합니다.

**클라이언트**  
이 컨텍스트에서 클라이언트는 C2C 커넥터입니다. 클라이언트는 최종 사용자를 대신하여 리소스 서버 내의 리소스에 대한 액세스 권한이 부여된 애플리케이션으로 정의됩니다. 계정 연결 프로세스는 커넥터인 클라이언트를 나타내며, 타사 클라우드 내에서 최종 사용자의 리소스에 대한 액세스를 요청합니다.  
커넥터는 OAuth 클라이언트이지만 AWS IoT Device Management의 관리형 통합은 커넥터를 대신하여 작업을 수행합니다. 예를 들어 AWS IoT Device Management의 관리형 통합은 권한 부여 서버에 액세스 토큰을 가져오도록 요청합니다. 커넥터는 리소스 서버의 보호된 리소스(디바이스 데이터)에 액세스하는 유일한 구성 요소이므로 여전히 클라이언트로 간주됩니다.  
최종 사용자가 온보딩한 스마트 전구를 고려합니다. 고객 플랫폼과 *Lights™ *권한 부여 서버 간에 계정 연결이 완료되면 커넥터 자체가 리소스 서버와 통신하여 최종 사용자의 스마트 전구에 대한 정보를 검색합니다. 그러면 커넥터가 최종 사용자로부터 명령을 수신할 수 있습니다. 여기에는* Lights™ *리소스 서버를 통해 조명을 자동으로 켜거나 끄는 작업이 포함됩니다. 따라서 커넥터를 클라이언트로 지정합니다.

# 계정 연결 워크플로
<a name="account-linking-flow"></a>

AWS IoT Device Management 플랫폼용 고객의 관리형 통합이 C2C 커넥터를 통해 타사 플랫폼에서 최종 사용자의 디바이스와 상호 작용할 수 있도록 다음 워크플로를 통해 액세스 토큰을 가져옵니다.

1. 사용자가 고객 애플리케이션을 통해 타사 디바이스의 온보딩을 시작하면 AWS IoT Device Management의 관리형 통합은 권한 부여 URI와 AssociationId를 반환합니다.

1. 애플리케이션 프런트엔드는 AssociationId를 저장하고 최종 사용자를 타사 플랫폼의 로그인 페이지로 리디렉션합니다.

   1. 최종 사용자가 로그인합니다. 최종 사용자는 클라이언트에게 디바이스 데이터에 대한 액세스 권한을 부여합니다.

1. 타사 플랫폼은 권한 부여 코드를 생성합니다. 최종 사용자는 리디렉션 요청에 연결된 코드를 포함하여 AWS IoT Device Management 플랫폼 콜백 URI의 관리형 통합으로 리디렉션됩니다.

1. 관리형 통합은이 코드를 타사 플랫폼 토큰 URI와 교환합니다.

1. 토큰 URI는 권한 부여 코드를 검증하고 최종 사용자와 연결된 OAuth2.0 액세스 토큰 및 새로 고침 토큰을 반환합니다.

1. 관리형 통합은 `AWS.ActivateUser` 작업을 통해 C2C 커넥터를 호출하여 계정 연결 흐름을 완료하고 UserId를 가져옵니다.

1. 관리형 통합은 성공한 인증 페이지의 OAuthRedirectUrl( 커넥터 정책 구성에서)을 고객 애플리케이션에 반환합니다.
**참고**  
장애가 발생할 경우 AWS IoT Device Management의 관리형 통합은 오류 및 error\$1description 쿼리 파라미터를 URL에 추가하여 고객 애플리케이션에 오류 세부 정보를 제공합니다.

1. 고객 애플리케이션은 최종 사용자를 OAuthRedirectUrl로 리디렉션합니다. 이때 애플리케이션 프런트 엔드는 첫 번째 단계에서 연결의 AssociationId를 알고 있습니다.

   디바이스 검색 및 명령 전송 명령과 같이 C2C 커넥터를 통해 타사 클라우드 플랫폼에 대한 AWS IoT Device Management의 관리형 통합에서 이루어진 모든 후속 요청에는 OAuth2.0 액세스 토큰이 포함됩니다.

다음 다이어그램은 계정 연결의 주요 구성 요소 간의 관계를 보여줍니다.

![\[OAuth 권한 부여를 사용한 C2C 커넥터 계정 연결 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/account-linking-workflow.png)


# C2C 커넥터 인터페이스 작업 구현
<a name="connector-operations-overview"></a>

용 관리형 통합은 커넥터로 검증하기 위해 처리 AWS Lambda 해야 하는 4가지 작업을 AWS IoT Device Management 정의합니다. C2C 커넥터는 다음 각 작업을 구현해야 합니다.

1. `AWS.ActivateUser` - AWS IoT Device Management 서비스용 관리형 통합은이 API를 호출하여 제공된 OAuth2.0 토큰과 연결된 전역적으로 고유한 사용자 식별자를 검색합니다. 이 작업은 선택적으로 계정 연결 프로세스에 대한 추가 요구 사항을 수행하는 데 사용할 수 있습니다.

1. `AWS.DiscoverDevices` - AWS IoT Device Management 서비스의 관리형 통합은 사용자의 디바이스를 검색하기 위해이 API를 커넥터에 호출합니다.

1. `AWS.SendCommand` - AWS IoT Device Management 서비스의 관리형 통합은 사용자 디바이스에 대한 명령을 보내기 위해이 API를 커넥터에 호출합니다.

1. `AWS.DeactivateUser` - AWS IoT Device Management 서비스의 관리형 통합은 권한 부여 서버에서 연결을 해제하기 위해 사용자의 액세스 토큰을 비활성화하기 위해이 API를 커넥터로 호출합니다.

용 관리형 통합은 AWS IoT Device Management 작업을 통해 항상 JSON 문자열 페이로드를 사용하여 Lambda 함수를 호출합니다 AWS Lambda `invokeFunction`. 요청 작업은 모든 요청 페이로드에 `operationName` 필드를 포함해야 합니다. 자세한 내용은 AWS Lambda API 참조의 [호출](https://docs.aws.amazon.com//lambda/latest/api/API_Invoke.html)을 참조하세요.

각 호출 제한 시간은 2초로 설정되며, 호출이 실패하면 5회 재시도됩니다.

커넥터에 대해 구현하는 Lambda는 요청 페이로드`operationName`에서를 구문 분석하고 해당 기능을 구현하여 타사 클라우드에 매핑합니다.

```
public ConnectorResponse handleRequest(final ConnectorRequest request) 
        throws OperationFailedException {
    Operation operation;
    try {
        operation = Operation.valueOf(request.payload().operationName());
    } catch (IllegalArgumentException ex) {
        throw new ValidationException(
           "Unknown operation '%s'".formatted(request.payload().operationName()), 
           ex
        );
    }

    return switch (operation) {
        case ActivateUser -> activateUserManager.activateUser(request);
        case DiscoverDevices -> deviceDiscoveryManager.listDevices(request);
        case SendCommand -> sendCommandManager.sendCommand(request);
        case DeactivateUser -> deactivateUser.deactivateUser(request);
    };
}
```

**참고**  
커넥터 개발자는 이전 예제에 나열된 `activateUserManager.activateUser(request)`, `deviceDiscoveryManager.listDevices(request)``sendCommandManager.sendCommand(request)`, 및 `deactivateUser.deactivateUser` 작업을 구현해야 합니다.

다음 예제에서는 모든 필수 인터페이스에 대한 공통 필드가 있는 관리형 통합의 일반 커넥터 요청을 자세히 설명합니다. 예제에서 요청 헤더와 요청 페이로드가 모두 있는 것을 볼 수 있습니다. 요청 헤더는 모든 작업 인터페이스에서 공통적입니다.

```
{
 	"header": {
 		"auth": { 
 			"token": “ashriu32yr97feqy7afsaf”, 
 			"type": “OAuth2.0"
 		}
 	},
 	"payload":{
 		"operationName": "AWS.SendCommand",
 		"operationVersion": "1.0",
 		"connectorId": “exampleId”,
 	…
 	}
}
```

## 기본 요청 헤더
<a name="default-request-headers"></a>

 기본 헤더 필드는 다음과 같습니다.

```
{
    "header": {
        "auth": {                 
            "token": string,    // end user's Access Token
            "type": ENUM ["OAuth2.0"], 
        }
    }
}
```

 커넥터에서 호스팅하는 모든 API는 다음 헤더 파라미터를 처리해야 합니다.


**기본 헤더 및 필드**  

|  |  |  | 
| --- |--- |--- |
| 필드 | 필수/선택 사항 | 설명 | 
|  `header:auth`  |  예  |  커넥터 등록 중에 C2C 커넥터 빌더가 제공하는 권한 부여 정보입니다.  | 
|  `header:auth:token`  |  예  |  타사 클라우드 공급자가 생성하고에 연결된 사용자의 권한 부여 토큰입니다`connectorAssociationID`.  | 
|  `header:auth:type`  |  예  |  필요한 권한 부여 유형입니다.  | 

**참고**  
커넥터에 대한 모든 요청에는 최종 사용자의 액세스 토큰이 연결됩니다. 최종 사용자와 관리형 통합 고객 간의 계정 연결이 이미 발생했다고 가정할 수 있습니다.

## 요청 페이로드
<a name="request-payload"></a>

공통 헤더 외에도 모든 요청에는 페이로드가 있습니다. 이 페이로드에는 모든 작업 유형에 대한 고유한 필드가 있지만 각 페이로드에는 항상 존재하는 기본 필드 세트가 있습니다.

**요청 페이로드 필드:**
+ `operationName`: 지정된 요청의 작업으로, , `AWS.ActivateUser`, `AWS.SendCommand``AWS.DiscoverDevices`, 값 중 하나와 같습니다`AWS.DeactivateUser`.
+ `operationVersion`: 모든 작업은 시간이 지남에 따라 진화하고 타사 커넥터에 대한 안정적인 인터페이스 정의를 제공하도록 버전이 지정됩니다. 관리형 통합은 모든 요청의 페이로드에 버전 필드를 전달합니다.
+ `connectorId`: 요청이 전송된 커넥터의 ID입니다.

## 기본 응답 헤더
<a name="default-response-headers"></a>

모든 작업은 C2C 커넥터가 요청을 수신하고 처리를 시작했음을 확인하는 AWS IoT Device Management의 `ACK` 관리형 통합에 로 응답합니다. 다음은 해당 응답의 일반적인 예입니다.

```
{
 	"header":{
 		"responseCode": 200 
 	},
 	"payload":{
 		"responseMessage": “Example response!”
 	}
}
```

모든 작업 응답에는 다음과 같은 공통 헤더가 있어야 합니다.

```
{
    "header": {
        "responseCode": Integer
    }
}
```

다음 표에는 기본 응답 헤더가 나열되어 있습니다.


**기본 응답 헤더 및 필드**  

|  |  |  | 
| --- |--- |--- |
| 필드 | 필수/선택 사항 | Comment | 
|  `header:responseCode`  |  예  |  요청의 실행 상태를 나타내는 값의 ENUM입니다.  | 

이 문서에 설명된 다양한 커넥터 인터페이스 및 API 스키마 전체에 `responseMessage` 또는 `Message` 필드가 있습니다. 이 필드는 C2C 커넥터 Lambda가 요청 및 실행과 관련된 컨텍스트로 응답하는 데 사용되는 선택적 필드입니다. 가급적이면 이외의 상태 코드를 초래하는 모든 오류에는 오류를 설명하는 메시지 값이 포함되어야 `200` 합니다.

## SendConnectorEvent API를 사용하여 C2C 커넥터 작업 요청에 응답
<a name="connector-operation-requests"></a>

용 관리형 통합은 모든 `AWS.SendCommand` 및 `AWS.DiscoverDevices` 작업에 대해 커넥터가 비동기적으로 작동할 것으로 AWS IoT Device Management 예상합니다. 즉, 이러한 작업에 대한 초기 응답은 단순히 C2C 커넥터가 요청을 수신했음을 “확인”한다는 의미입니다.

`SendConnectorEvent` API를 사용하면 커넥터가 `AWS.DiscoverDevices` 및 `AWS.SendCommand` 작업과 사전 예방적 디바이스 이벤트(예: 수동으로 켜고 끄는 등)를 위해 아래 목록에서 로 이벤트 유형을 전송해야 합니다. 이러한 이벤트 유형 및 사용 사례에 대한 자세한 설명은 [AWS.DiscoverDevices 작업 구현](discover-devices-op.md), [AWS.SendCommand 작업 구현](send-command-op.md)및 단원을 참조하십시오[SendConnectorEvent API를 사용하여 디바이스 이벤트 전송](send-connector-events.md).

예를 들어 C2C 커넥터가 `DiscoverDevices` 요청을 수신하면 AWS IoT Device Management의 관리형 통합은 위에서 정의한 응답 형식과 동기적으로 응답할 것으로 예상합니다. 그런 다음 DEVICE\$1DISCOVERY 이벤트에 [AWS.DiscoverDevices 작업 구현](discover-devices-op.md)대해에 정의된 요청 구조로 `SendConnectorEvent`API를 호출해야 합니다. `SendConnectorEvent` 온 API 호출은 C2C 커넥터 Lambda AWS 계정 자격 증명에 액세스할 수 있는 모든 곳에서 발생할 수 있습니다. AWS IoT Device Management 검색 흐름이 성공하지 못합니다.

**참고**  
또는 필요한 경우 C2C 커넥터 Lambda 호출 응답 전에 `SendConnectorEvent` API 호출이 발생할 수 있습니다. 그러나이 흐름은 소프트웨어 개발을 위한 비동기 모델과 모순됩니다.
+ **SendConnectorEvent** - 커넥터가 AWS IoT Device Management API에 대한이 관리형 통합을 호출하여 AWS IoT Device Management에 대한 관리형 통합으로 디바이스 이벤트를 전송합니다. 관리형 통합에서 허용되는 이벤트 유형은 3가지뿐입니다.
  + "**DEVICE\$1DISCOVERY**" -이 이벤트 작업은 특정 액세스 토큰에 대해 타사 클라우드 내에서 검색된 디바이스 목록을 전송하는 데 사용해야 합니다.
  + **"DEVICE\$1COMMAND\$1RESPONSE**" -이 이벤트 작업은 명령 실행의 결과로 특정 디바이스 이벤트를 전송하는 데 사용해야 합니다.
  + **"DEVICE\$1EVENT**" -이 이벤트 작업은 사용자 기반 명령의 직접적인 결과가 아닌 디바이스에서 시작된 모든 이벤트에 사용해야 합니다. 이는 디바이스 상태 변경 또는 알림을 사전에 보고하는 일반적인 이벤트 유형 역할을 할 수 있습니다.

# AWS.ActivateUser 작업 구현
<a name="activate-user-op"></a>

AWS IoT Device Management가 최종 사용자의 OAuth2.0 토큰에서 사용자 식별자를 검색하려면 관리형 통합에 `AWS.ActivateUser` 작업이 필요합니다. 에 대한 관리형 통합 AWS IoT Device Management 은 요청 헤더 내에 OAuth 토큰을 전달하고 커넥터가 응답 페이로드에 전역적으로 고유한 사용자 식별자를 포함할 것으로 예상합니다. 이 작업은 계정 연결 흐름이 성공한 후 발생합니다.

다음 목록은 성공적인 `AWS.Activate` 사용자 흐름을 촉진하기 위한 커넥터의 요구 사항을 간략하게 설명합니다.
+ C2C 커넥터 Lambda는 AWS IoT Device Management에 대한 관리형 통합의 `AWS.ActivateUser` 작업 요청 메시지를 처리할 수 있습니다.
+ C2C 커넥터 Lambda는 제공된 OAuth2.0 토큰에서 고유한 사용자 식별자를 확인할 수 있습니다. 일반적으로 JWT 토큰인 경우 토큰 자체에서 추출하거나 토큰에 의해 권한 부여 서버에서 요청할 수 있습니다.

**`AWS.ActivateUser` 워크플로**

1. 용 관리형 통합은 다음 AWS IoT Device Management 페이로드를 사용하여 C2C 커넥터 Lambda를 호출합니다.

   ```
   {
      "header": {
           "auth": {                 
               "token": "ashriu32yr97feqy7afsaf",  
               "type": "OAuth2.0"
           }
      },
      "payload": {
           "operationName": "AWS.ActivateUser",
           "operationVersion": "1.0.0",
           "connectorId": "Your-Connector-ID",	
   }
   }
   ```

1. C2C 커넥터는 토큰에서 또는 타사 리소스 서버를 쿼리하여 `AWS.ActivateUser` 응답에 포함할 사용자 ID를 결정합니다.

1. C2C 커넥터는 기본 페이로드와 `userId` 필드 내의 해당 사용자 식별자를 포함하여 `AWS.ActivateUser` 작업 Lambda 호출에 응답합니다.

   ```
   {
        "header": {
             "responseCode":200
        },
        "payload": {
             "responseMessage": "Successfully activated user with connector-id `Your-Connector-Id.”,
             "userId": "123456" 
        }
   }
   ```

# AWS.DiscoverDevices 작업 구현
<a name="discover-devices-op"></a>

디바이스 검색은 최종 사용자가 소유한 물리적 디바이스 목록을 AWS IoT Device Management의 관리형 통합에서 유지 관리하는 최종 사용자 디바이스의 디지털 표현과 일치시킵니다. AWS IoT Device Management에서 AWS 고객이 수행합니다. 디바이스 검색은 AWS IoT Device Management의 관리형 통합이 커넥터를 호출하여 디바이스 검색 요청을 시작하는 비동기 프로세스입니다. C2C 커넥터는 검색된 최종 사용자 디바이스 목록을 관리형 통합에서 생성된 참조 식별자(라고 함`deviceDiscoveryId`)와 비동기적으로 반환합니다.

다음 다이어그램은 AWS IoT Device Management 검색 워크플로를 보여줍니다.

![\[AWS.DiscoverDevices 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/device-discovery-workflow.png)


**AWS.DiscoverDevices 워크플로**

1. 고객은 최종 사용자를 대신하여 디바이스 검색 프로세스를 시작합니다.

1. 용 관리형 통합은 고객이 생성한 디바이스 검색 요청에 `deviceDiscoveryId` 대해 라는 참조 식별자를 AWS IoT Device Management AWS 생성합니다.

1. 용 관리형 통합은 최종 사용자의 유효한 OAuth와를 포함하여 `AWS.DiscoverDevices` 작업 인터페이스를 사용하여 디바이스 검색 요청을 C2C 커넥터`accessToken`로 AWS IoT Device Management 보냅니다`deviceDiscoveryId`.

1. 커넥터는 `DEVICE_DISCOVERY` 이벤트에 포함할 `deviceDiscoveryId`를 저장합니다. 이 이벤트에는 검색된 최종 사용자의 디바이스 목록도 포함되며, `SendConnectorEvent` API를 `DEVICE_DISCOVERY` 이벤트로 사용하여 AWS IoT Device Management의 관리형 통합으로 전송해야 합니다.

1. C2C 커넥터는 리소스 서버를 호출하여 최종 사용자가 소유한 모든 디바이스를 가져와야 합니다.

1. C2C 커넥터 Lambda는 AWS IoT Device Management의 관리형 통합에 대한 ACK 응답으로 Lambda 호출(`invokeFunction`)에 응답하며, 이는 `AWS.DiscoverDevices` 작업에 대한 초기 응답 역할을 합니다. 관리형 통합은 ACK를 통해 고객에게 시작된 디바이스 검색 프로세스에 대해 알립니다.

1. 리소스 서버는 최종 사용자가 소유하고 운영하는 디바이스 목록을 전송합니다.

1. 커넥터는 각 최종 사용자 디바이스를 각 디바이스에 대한 및 `ConnectorDeviceId` `ConnectorDeviceName` 기능 보고서를 포함하여 AWS IoT Device Management 필수 디바이스 형식의 관리형 통합으로 변환합니다.

1. C2C 커넥터는 검색된 디바이스 소유자`UserId`의 도 제공합니다. 리소스 서버 구현에 따라 디바이스 목록의 일부로 또는 별도의 호출로 리소스 서버에서 검색할 수 있습니다.

1. 다음으로 C2C 커넥터는 자격 AWS 계정 증명과 "DEVICE\$1DISCOVERY"로 설정된 작업 파라미터를 사용하여 SigV4를 통해 AWS IoT Device Management API`SendConnectorEvent`,에 대한 관리형 통합을 호출합니다. AWS IoT Device Management `connectorDeviceId`, `connectorDeviceName`및와 같은 디바이스별 파라미터로 표시됩니다`capabilityReport`.

   1. 리소스 서버 응답에 따라 그에 따라 AWS IoT Device Management의 관리형 통합에 알려야 합니다.

     예를 들어 리소스 서버에 최종 사용자의 검색된 디바이스 목록에 대한 페이지 매김 응답이 있는 경우 각 폴링에 대해 `statusCode` 파라미터를 사용하여 개별 `DEVICE_DISCOVERY` 작업 이벤트를 보낼 수 있습니다`3xx`. 디바이스 검색이 아직 진행 중인 경우 5, 6, 7단계를 반복합니다.

1. 용 관리형 통합은가 최종 사용자의 디바이스를 검색했다는 알림을 고객에게 AWS IoT Device Management 보냅니다.

1. C2C 커넥터가 `statusCode` 파라미터가 200으로 업데이트된 `DEVICE_DISCOVERY` 작업 이벤트를 전송하는 경우 관리형 통합은 고객에게 디바이스 검색 워크플로 완료를 알립니다.
**중요**  
원하는 경우 6단계 전에 7\$111단계를 수행할 수 있습니다. 예를 들어 타사 플랫폼에 최종 사용자 디바이스를 나열하는 API가 있는 경우 C2C 커넥터 Lambda가 일반적인 ACK로 응답`SendConnectorEvent`하기 전에 DEVICE\$1DISCOVERY 이벤트를 로 전송할 수 있습니다.

## 디바이스 검색을 위한 C2C 커넥터 요구 사항
<a name="connector-device-discovery-requirements"></a>

다음 목록은 성공적인 디바이스 검색을 용이하게 하기 위한 C2C 커넥터의 요구 사항을 간략하게 설명합니다.
+ C2C 커넥터 Lambda는 AWS IoT Device Management 검색 요청 메시지를 처리하고 `AWS.DiscoverDevices` 작업을 처리할 수 있습니다.
+ C2C 커넥터는 커넥터 등록에 AWS 계정 사용되는의 자격 증명을 사용하여 SigV4를 통해 AWS IoT Device Management APIs에 대한 관리형 통합을 호출할 수 있습니다.

## 디바이스 검색 프로세스
<a name="device-discovery-process"></a>

다음 단계에서는 AWS IoT Device Management를 위한 C2C 커넥터 및 관리형 통합을 사용한 디바이스 검색 프로세스를 간략하게 설명합니다. AWS IoT Device Management

**디바이스 검색 프로세스**

1. 관리형 통합은 디바이스 검색을 트리거합니다.

   1. 다음 JSON 페이로드를 `DiscoverDevices` 사용하여에 POST 요청을 보냅니다.

     ```
     /DiscoverDevices
     {
        "header": {
             "auth": {                 
                 "token": "ashriu32yr97feqy7afsaf",  
                 "type": "OAuth2.0"
             }
        },
        "payload": {
             "operationName": "AWS.DiscoverDevices",
             "operationVersion": "1.0",
             "connectorId": "Your-Connector-Id",
             "deviceDiscoveryId": "12345678"
        }
     }
     ```

1. 커넥터는 검색을 승인합니다.

   1. 커넥터는 다음 JSON 응답과 함께 승인을 전송합니다.

     ```
     {
          "header": {
               "responseCode":200
          },
          "payload": {
               "responseMessage": "Discovering devices for discovery-job-id '12345678' with connector-id `Your-Connector-Id`"
          }
     }
     ```

1. 커넥터가 디바이스 검색 이벤트를 전송합니다.

   1. 다음 JSON 페이로드를 `/connector-event/{your_connector_id}` 사용하여에 POST 요청을 보냅니다.

     ```
     AWS API - /SendConnectorEvent
     URI – POST /connector-event/{your_connector_id}
     {
        "UserId": "6109342",
        "Operation": "DEVICE_DISCOVERY",
        "OperationVersion": "1.0",
        "StatusCode": 200,
        "DeviceDiscoveryId": "12345678",
        "ConnectorId": "Your_connector_Id",
        "Message": "Device discovery for discovery-job-id '12345678' successful",
        "Devices": [
             {
                 "ConnectorDeviceId": "Your_Device_Id_1",
                 "ConnectorDeviceName": "Your-Device-Name",
                 "CapabilityReport": {
      	      		"nodeId":"1",
      			"version":"1.0.0", 
       			"endpoints":[{
      				"id":"1",
      				"deviceTypes":["Camera"],
      				"clusters":[{
      					"id":"0x0006",
      					"revision":1, 
      					"attributes":[{
      						"id":"0x0000",
      					}],
      					"commands":["0x00","0x01"],
      					"events":["0x00"]
      				}]
      			}]
      		} 
             }
         ]
     }
     ```

## DISCOVER\$1DEVICES 이벤트에 대한 CapabilityReport 구성
<a name="capability-report-discover-devices"></a>

위에 정의된 이벤트 구조에서 볼 수 있듯이 `AWS.DiscoverDevices` 작업에 대한 응답으로 사용되는 DISCOVER\$1DEVICES 이벤트에서 보고된 모든 디바이스에는 해당 디바이스의 기능을 설명하는 CapbilityReport가 필요합니다. 'CapabilityReport'는 AWS IoT Device Management 디바이스 기능에 대한 관리형 통합을 Matter 호환 형식으로 알려줍니다. ` CapabilityReport `에 다음 필드를 제공해야 합니다.
+ `nodeId`, 문자열: 다음을 포함하는 디바이스 노드의 식별자입니다. `endpoints` 
+ `version`, 문자열: 커넥터 개발자가 설정한이 디바이스 노드의 버전
+ `endpoints`, List<Cluster>:이 디바이스 엔드포인트에서 지원하는 Matter Data Model의 AWS 구현 목록입니다.
  + `id`, 문자열: 커넥터 개발자가 설정한 엔드포인트 식별자
  + `deviceTypes`, List<String>:이 엔드포인트가 캡처하는 디바이스 유형 목록, 즉 "Camera".
  + `clusters`, List<Cluster>:이 엔드포인트가 지원하는 Matter Data Model의 AWS 구현 목록입니다.
    + `id`, 문자열: Matter 표준에 정의된 클러스터 식별자입니다.
    + `revision`, 정수: Matter 표준에 정의된 클러스터 개정 번호입니다.
    + `attributes`, Map<String, Object>: 항목 표준에 정의된 식별자 및 유효한 값과 함께 속성 식별자 및 해당 현재 디바이스 상태 값의 맵입니다.
      + `id`, 문자열: Matter 데이터 모델의 AWS 구현에서 정의한 속성 ID입니다.
      + `value`, 객체: 속성 ID로 정의된 속성의 현재 값입니다. '값' 유형은 속성에 따라 변경될 수 있습니다. `value` 필드는 각 속성에 대해 선택 사항이며 커넥터 Lambda가 검색 중에 현재 상태를 확인할 수 있는 경우에만 포함되어야 합니다.
    + `commands`, List<String>: Matter 표준에 정의된 대로이 클러스터를 지원하는 명령 IDs.
    + `events`, List<String>: Matter 표준에 정의된 대로이 클러스터를 지원하는 이벤트 IDs.

지원되는 기능의 현재 목록과 [AWS Matter Data Model의 해당 구현은](matter-data-model.md) Data Model 설명서의 최신 릴리스를 참조하세요.

# AWS.SendCommand 작업 구현
<a name="send-command-op"></a>

`AWS.SendCommand` 작업을 통해 AWS IoT Device Management의 관리형 통합은 최종 사용자가 AWS 고객을 통해 시작한 명령을 리소스 서버로 전송할 수 있습니다. 리소스 서버는 각 유형에 자체 응답 모델이 있는 여러 유형의 디바이스를 지원할 수 있습니다. 명령 실행은 AWS IoT Device Management의 관리형 통합이 'traceId'를 사용하여 명령 실행 요청을 보내는 비동기 프로세스로, 커넥터는 'SendConnectorEvent' API를 통해 관리형 통합으로 다시 전송되는 명령 응답에 포함됩니다. AWS IoT Device Management의 관리형 통합은 리소스 서버가 명령이 수신되었음을 승인하지만 명령이 실행되었음을 반드시 나타내는 것은 아닙니다.

다음 다이어그램은 최종 사용자가 집의 조명을 켜려고 하는 예제와 함께 명령 실행 흐름을 보여줍니다.

![\[디바이스 명령 실행 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/send-command-workflow.png)


**디바이스 명령 실행 워크플로**

1. 최종 사용자는 AWS 고객의 애플리케이션을 사용하여 조명을 켜는 명령을 보냅니다.

1. 고객은 최종 사용자의 디바이스 정보와 함께 AWS IoT Device Management의 관리형 통합에 명령 정보를 전달합니다.

1. 관리형 통합은 커넥터가 명령 응답을 서비스로 다시 보내는 동안 사용할 "traceId"를 생성합니다.

1. AWS IoT Device Management의 관리형 통합은 `AWS.SendCommand` 작업 인터페이스를 사용하여 명령 요청을 커넥터로 보냅니다.

   1. 이 인터페이스에서 정의한 페이로드는 디바이스 식별자, Matter endpoints/clusters/commands으로 공식화된 디바이스 명령, 최종 사용자의 액세스 토큰 및 기타 필수 파라미터로 구성됩니다.

1. 커넥터는 명령 응답에 `traceId` 포함할를 저장합니다.

   1. 커넥터는 관리형 통합 명령 요청을 리소스 서버의 적절한 형식으로 변환합니다.

1. 커넥터는 제공된 최종 사용자의 액세스 토큰`UserId`에서 가져와 명령과 연결합니다.

   1. 는 별도의 호출을 사용하여 리소스 서버에서 검색하거나 JWT 및 유사한 토큰의 경우 액세스 토큰에서 추출할 `UserId` 수 있습니다.

   1. 구현은 리소스 서버 및 액세스 토큰 세부 정보에 따라 달라집니다.

1. 커넥터가 리소스 서버를 호출하여 최종 사용자의 조명을 "켜십시오".

1. 리소스 서버는 디바이스와 상호 작용합니다.

   1. 커넥터는 리소스 서버가 명령을 전달한 AWS IoT Device Management의 관리형 통합으로 릴레이되어 초기 동기식 명령 응답으로 ACK로 응답합니다.

   1. 그런 다음 관리형 통합은 이를 고객 애플리케이션으로 다시 릴레이합니다.

1. 디바이스가 켜지면 리소스 서버에서 해당 디바이스 이벤트를 캡처합니다.

1. 리소스 서버가 디바이스 이벤트를 커넥터로 보냅니다.

1. 커넥터는 리소스 서버에서 생성된 디바이스 이벤트를 관리형 통합 DEVICE\$1COMMAND\$1RESPONSE 이벤트 작업 유형으로 변환합니다.

1. 커넥터는 작업을 "DEVICE\$1COMMAND\$1RESPONSE"로 사용하여 `SendConnectorEvent` API를 호출합니다.

   1. 초기 요청에서 AWS IoT Device Management에 대한 관리형 통합에서 `traceId` 제공하는를 연결합니다.

1. 관리형 통합은 고객에게 최종 사용자의 디바이스 상태 변경을 알립니다.

1. 고객은 최종 사용자에게 디바이스의 조명이 켜져 있음을 알립니다.
**참고**  
리소스 서버 구성에 따라 실패한 디바이스 명령 요청 및 응답 메시지를 처리하기 위한 로직이 결정됩니다. 여기에는 명령에 동일한 referenceId를 사용하는 메시지 재시도가 포함됩니다.

## 디바이스 명령 실행을 위한 C2C 커넥터 요구 사항
<a name="connector-device-command-requirements"></a>

다음 목록은 성공적인 디바이스 명령 실행을 용이하게 하기 위한 C2C 커넥터의 요구 사항을 간략하게 설명합니다.
+ C2C 커넥터 Lambda는 AWS IoT Device Management에 대한 관리형 통합의 `AWS.SendCommand` 작업 요청 메시지를 처리할 수 있습니다.
+ C2C 커넥터는 리소스 서버로 전송된 명령을 추적하고 적절한 'traceId'로 매핑해야 합니다.
+ C2C 커넥터를 등록하는 데 AWS 계정 사용되는의 AWS 자격 증명을 사용하여 SigV4를 통해 AWS IoT Device Management 서비스 API에 대한 관리형 통합을 호출할 수 있습니다.

1. 관리형 통합은 명령을 커넥터로 전송합니다(이전 다이어그램의 4단계 참조).

   1. 

     ```
     /Send-Command
     {
          "header": {
               "auth": {                 
                   "token": "ashriu32yr97feqy7afsaf",  
                   "type": "OAuth2.0"
               }
          },
          "payload": {
               "operationName": "AWS.SendCommand",
               "operationVersion": "1.0",
               "connectorId": "Your-Connector-Id",
               "connectorDeviceId": "Your_Device_Id",
               "traceId": "traceId-3241u78123419",
               "endpoints": [{
                   "id": "1",    
                   "clusters": [{
                       "id": "0x0202",
                       "commands": [{
                           "0xff01": 
                               {
                                   "0x0000": "3”
                       		}
                       }]
                   }]
               }]
          }
       }
     ```

1. C2C 커넥터 ACK 명령(커넥터가 AWS IoT Device Management Service의 관리형 통합으로 ACK를 전송하는 이전 다이어그램의 7단계 참조).

   1. 

     ```
     {
          "header":{
               "responseCode":200
          },
          "payload":{
               "responseMessage": "Successfully received send-command request for connector 'Your-Connector-Id' and connector-device-id 'Your_Device_Id'" 
          }
       }
     ```

1. 커넥터는 디바이스 명령 응답 이벤트를 전송합니다(이전 다이어그램의 11단계 참조).

   1. 

     ```
     AWS-API: /SendConnectorEvent
     URI: POST /connector-event/{Your-Connector-Id}
     
     {
        "UserId": "End-User-Id",
        "Operation": "DEVICE_COMMAND_RESPONSE",
        "OperationVersion": "1.0",
        "StatusCode": 200,
        "Message": “Example message”,
        "ConnectorDeviceId": "Your_Device_Id",
        "TraceId": "traceId-3241u78123419",
        "MatterEndpoint": {
             "id": "1",    
             "clusters": [{
                 "id": "0x0202",
                 "attributes": [
                     {
                         "0x0000": “3”
                     }
                 ],
                 "commands": [
                     "0xff01": 
                     {
                         "0x0000": "3”
                     }            
      		]
             }]
         }
     }
     ```
**참고**  
명령 실행의 결과로 인한 디바이스 상태 변경은 SendConnectorEvent API를 통해 해당 DEVICE\$1COMMAND\$1RESPONSE 이벤트를 수신할 때까지 AWS IoT Device Management의 관리형 통합에 반영되지 않습니다. 즉, 관리형 통합이 이전 3단계에서 이벤트를 수신할 때까지 커넥터 호출 응답이 성공을 나타내는지 여부에 관계없이 디바이스 상태는 업데이트되지 않습니다.

## AWS.SendCommand 요청에 포함된 문제 '엔드포인트' 해석
<a name="endpoints-send-command-rqt"></a>

관리형 통합은 디바이스 검색 중에 보고된 디바이스 기능을 사용하여 디바이스가 수락할 수 있는 명령을 결정합니다. 모든 디바이스 기능은 Matter Data Model의 AWS 구현을 통해 모델링되므로 모든 수신 명령은 지정된 클러스터 내의 '명령' 필드에서 파생됩니다. 커넥터는 'endpoints' 필드를 구문 분석하여 해당 Matter 명령을 결정하고 올바른 명령이 디바이스에 도달하도록 변환할 책임이 있습니다. 일반적으로 이는 Matter 데이터 모델을 관련 API 요청으로 변환하는 것을 의미합니다.

명령이 실행된 후 커넥터는 Matter Data Model의 AWS 구현에 의해 정의된 '속성'이 결과적으로 변경되었는지 확인합니다. 그런 다음 이러한 변경 사항은 API와 함께 전송된 API DEVICE\$1COMMAND\$1RESPONSE 이벤트를 통해 AWS IoT Device Management의 관리형 통합에 보고됩니다`SendConnectorEvent`.

다음 예제 `AWS.SendCommand`페이로드에 포함된 '엔드포인트' 필드를 고려합니다.

```
          "endpoints": [{
              "id": "1",    
              "clusters": [{
                  "id": "0x0202",
                  "commands": [{
                      "0xff01": 
                          {
                              "0x0000": "3”
                  		}
                  }]
              }]
          }]
```

**이 객체에서 커넥터는 다음을 확인할 수 있습니다.**

1. 엔드포인트 및 클러스터 정보를 설정합니다.

   1. 엔드포인트를 "1"`id`로 설정합니다.
**참고**  
디바이스가 단일 클러스터(예: 켜기/끄기)가 여러 기능을 제어할 수 있도록 여러 엔드포인트를 정의하는 경우(예: 조명 켜기/끄기 및 스트로브 켜기/끄기)이 ID는 명령을 올바른 기능으로 라우팅하는 데 사용됩니다.

   1. 클러스터를 "0x0202"(Fan Control 클러스터)`id`로 설정합니다.

1. 명령 정보를 설정합니다.

   1. 명령 식별자를 "0xff01"(에서 정의한 상태 업데이트 명령)로 설정합니다 AWS.

   1. 포함된 속성 식별자를 요청에 제공된 값으로 업데이트합니다.

1. 속성을 업데이트합니다.

   1. 속성 식별자를 "0x0000"(FanMode 속성)으로 설정합니다.

   1. 속성 값을 "3"(높은 팬 속도)으로 설정합니다.

관리형 통합은 Matter Data Model의 AWS 구현으로 엄격하게 정의되지 않은 두 가지 “사용자 지정” 명령 유형인 ReadState 및 UpdateState 명령을 정의했습니다. Matter 정의 클러스터 속성을 가져오고 설정하기 위해 관리형 통합은 UpdateState(id: 0xff01) 또는 ReadState(id: 0xff02)`AWS.SendCommand`와 관련된 명령 IDs와 함께 업데이트하거나 읽어야 하는 속성의 해당 파라미터를 사용하여 커넥터를 전송합니다. 이러한 명령은 Matter Data Model의 해당 AWS 구현에서 변경 가능(업데이트 가능) 또는 검색 가능(읽기 가능)으로 설정된 속성의 모든 디바이스 유형에 대해 호출할 수 있습니다.

# SendConnectorEvent API를 사용하여 디바이스 이벤트 전송
<a name="send-connector-events"></a>

## 디바이스 시작 이벤트 개요
<a name="device-initiated-events-overview"></a>

`SendConnectorEvent` API는 `AWS.SendCommand` 및 `AWS.DiscoverDevices` 작업에 비동기적으로 응답하는 데 사용되지만 디바이스 시작 이벤트를 관리형 통합에 알리는 데도 사용됩니다. 디바이스 시작 이벤트는 사용자 시작 명령 없이 디바이스에서 생성된 모든 이벤트로 정의할 수 있습니다. 이러한 디바이스 이벤트에는 디바이스 상태 변경, 모션 감지, 배터리 잔량 등이 포함될 수 있지만 이에 국한되지 않습니다. **DEVICE\$1EVENT** 작업과 함께 `SendConnectorEvent` API를 사용하여 이러한 이벤트를 관리형 통합으로 다시 보낼 수 있습니다.

다음 섹션에서는 홈에 설치된 스마트 카메라를 예로 사용하여 이러한 이벤트의 작업 흐름을 자세히 설명합니다.

![\[디바이스 이벤트 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/device-events-workflow.png)


**디바이스 이벤트 워크플로**

1. 카메라는 리소스 서버로 전송되는 이벤트를 생성하는 모션을 감지합니다.

1. 리소스 서버는 이벤트를 처리하고 C2C 커넥터로 전송합니다.

1. 커넥터는이 이벤트를 AWS IoT Device Management `DEVICE_EVENT` 인터페이스의 관리형 통합으로 변환합니다.

1. C2C 커넥터는 작업이 "DEVICE\$1EVENT"로 설정된 `SendConnectorEvent` API를 사용하여이 디바이스 이벤트를 관리형 통합으로 전송합니다.

1. 관리형 통합은 관련 고객을 식별하고이 이벤트를 고객에게 다시 전달합니다.

1. 고객은이 이벤트를 수신하여 사용자 식별자를 통해 사용자에게 표시합니다.

`SendConnectorEvent` API 작업에 대한 자세한 내용은 AWS IoT Device Management API용 관리형 통합 참조 안내서`SendConnectorEvent`의 섹션을 참조하세요.

## 디바이스 시작 이벤트 요구 사항
<a name="device-events-requirements"></a>

다음은 디바이스 시작 이벤트에 대한 몇 가지 요구 사항입니다.
+ C2C 커넥터 리소스는 리소스 서버에서 비동기 디바이스 이벤트를 수신할 수 있어야 합니다.
+ C2C 커넥터 리소스는 C2C 커넥터를 등록하는 데 AWS 계정 사용되는의 AWS 자격 증명을 사용하여 SigV4를 통해 AWS IoT Device Management 서비스 API에 대한 관리형 통합을 호출할 수 있어야 합니다.

다음 예제에서는 SendConnectorEvent API를 통해 디바이스에서 시작된 이벤트를 전송하는 커넥터를 보여줍니다.

```
AWS-API: /SendConnectorEvent
URI: POST /connector-event/{Your-Connector-Id}

{
   "UserId": "Your-End-User-ID",
   "Operation": "DEVICE_EVENT",
   "OperationVersion": "1.0",
   "StatusCode": 200,
   "Message": None,
   "ConnectorDeviceId": "Your_Device_Id",
   "MatterEndpoint": {
        "id": "1",    
        "clusters": [{
            "id": "0x0202",
            "attributes": [
                {
                    "0x0000": "3"
                }
            ]
        }]
    }]
}
```

다음 예제에서 다음을 볼 수 있습니다.
+ ID가 1인 디바이스 엔드포인트에서 가져옵니다.
+ 이 이벤트와 관련된 디바이스 기능은 팬 제어 문제 클러스터와 관련하여 클러스터 ID가 **0x0202**입니다.
+ 변경된 속성의 ID는 **0x000**이며 클러스터 내의 팬 모드 열거형과 관련이 있습니다. High 값과 관련하여 값 **3**으로 업데이트되었습니다****.
+  `connectorId`는 생성 시 클라우드 서비스에서 반환하는 파라미터이므로 커넥터는 GetCloudConnector를 사용하여 쿼리하고를 기준으로 필터링해야 합니다`lambdaARN`. Lambda 자체`ARN`는 `Lambda.get_function_url_config` API를 사용하여 쿼리됩니다. 이렇게 하면 lambda에서 `CloudConnectorId`에 동적으로 액세스할 수 있으며 이전과 같이 정적으로 구성되지 않습니다.

# AWS.DeactivateUser 작업 구현
<a name="deactive-user-op"></a>

## 사용자 비활성화 개요
<a name="deactivate-user-overview"></a>

고객이 고객 AWS 계정을 삭제하거나 최종 사용자가 시스템의 계정을 AWS 고객의 시스템에서 연결 해제하려는 경우 제공된 사용자 액세스 토큰을 비활성화해야 합니다. 어느 사용 사례에서든 관리형 통합은 C2C 커넥터를 사용하여이 워크플로를 용이하게 해야 합니다.

아래 이미지는 시스템에서 최종 사용자 계정의 연결을 해제하는 방법을 보여줍니다.

![\[사용자 비활성화 워크플로\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/user-deactivate-workflow.png)


**사용자 비활성화 워크플로**

1. 사용자는 AWS 고객의 계정과 C2C 커넥터와 연결된 타사 권한 부여 서버 간에 연결 해제 프로세스를 시작합니다.

1. 고객은 AWS IoT Device Management에 대한 관리형 통합을 통해 사용자 연결 삭제를 시작합니다.

1. 관리형 통합은 `AWS.DeactivateUser` 작업 인터페이스를 사용하여 커넥터에 대한 요청을 통해 비활성화 프로세스를 시작합니다.

   1. /user의 액세스 토큰은 요청의 헤더에 포함됩니다.

1. C2C 커넥터는 요청을 수락하고 권한 부여 서버를 호출하여 토큰과 토큰이 제공하는 모든 액세스를 취소합니다.

   1. 예를 들어 연결되지 않은 사용자 계정의 이벤트는를 수행한 후 더 이상 관리형 통합으로 전송되지 않아야 합니다`AWS.DeactivateUser`.

1. 권한 부여 서버가 액세스를 취소하고 응답을 C2C 커넥터로 다시 보냅니다.

1. C2C 커넥터는 AWS IoT Device Management에 대한 관리형 통합을 사용자의 액세스 토큰이 취소되었다는 ACK로 전송합니다.

1. 관리형 통합은 리소스 서버와 연결된 최종 사용자가 소유한 모든 리소스를 삭제합니다.

1. 관리형 통합은 고객에게 ACK를 전송하여 시스템과 관련된 모든 연결이 삭제되었음을 알립니다.

1. 고객은 최종 사용자에게 플랫폼에서 계정이 연결 해제되었음을 알립니다.

## AWS.DeactivateUser 요구 사항
<a name="deactivate-user-requirements"></a>
+ C2C 커넥터 Lambda 함수는 `AWS.DeactivateUser` 작업을 처리하기 위해 관리형 통합으로부터 요청 메시지를 수신합니다.
+ C2C 커넥터는 제공된 **OAuth2.0** 토큰과 권한 부여 서버 내 사용자의 해당 새로 고침 토큰을 취소해야 합니다.

다음은 커넥터가 수신할 `AWS.DeactivateUser`요청의 예입니다.

```
{
     "header": {
         "auth": {                 
             "token": "ashriu32yr97feqy7afsaf",   
             "type": "OAuth2.0" 
 
         }
     },
     "payload":{
         "operationName": "AWS.DeactivateUser"
         "operationVersion": "1.0"
         "connectorId": "Your-connector-Id"
     }
 }
```

# C2C 커넥터 호출
<a name="allow-iot-smart-home"></a>

AWS Lambda 를 사용하면 리소스 기반 정책이 Lambda를 호출할 수 있는 사용자를 승인할 수 있습니다. AWS IoT Device Management의 관리형 통합은 이므로 관리형 통합이 리소스 정책을 통해 C2C 커넥터 Lambda를 호출하도록 허용 AWS 서비스해야 합니다.

최소한 다음과 같은 최소 권한이 있는 리소스 정책을 C2C 커넥터 Lambda에 연결합니다. 이렇게 하면 Lambda 함수 호출 권한과의 관리형 통합이 제공됩니다. 이 정책에는의 사용 가능성을 의도한 사용자로만 제한`connectorId`하는 데 도움이 되는 `Condition` 키가 포함되어 있습니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "default",
  "Statement": [
    {
      "Sid": "Your-Desired-Policy-ID",
      "Effect": "Allow",
      "Principal": {
        "Service": "iotmanagedintegrations.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:ca-central-1:444455556666:function:connector-lambda-name",
      "Condition": {
        "StringEquals": {
          "aws:SourceArn": "arn:aws:iotmanagedintegrations:ca-central-1:444455556666:account-association/account-association-id"
        }
      }
    }
  ]
}
```

------

# IAM 역할에 권한 추가
<a name="adding-permissions-to-iam-role"></a>

모든 관리형 통합 APIs 호출하려면 AWS sigV4 인증이 필요합니다. SigV4는 자격 AWS 계정 증명을 사용하여 AWS API 요청을 인증하기 위해 프로토콜에 서명합니다. 관리형 통합 APIs를 호출하는 데 사용하는 IAM 역할에는 API를 APIs

```
 	"Version": "2012-10-17",		 	 	 
 	"Statement": [
 	{
 		"Sid": "Statement1",
 		"Effect": "Allow",
 		"Action": [
 			"iotmanagedintegrations:Your-Required-Actions"
 		],
 		"Resource": [
 			"Your-Resource"
 		]
 	}]
}
```

이러한 권한 추가에 대한 자세한 내용은에 문의하십시오 지원.

**추가 리소스**  
C2C 커넥터를 등록하려면 다음이 필요합니다.
+ 등록하려는 커넥터를 지정하는 Lambda ARN입니다.

# C2C 커넥터 수동 테스트
<a name="manually-testing-connector"></a>

C2C 커넥터 end-to-end를 수동으로 테스트하려면 고객과 최종 사용자를 모두 시뮬레이션해야 합니다.

**다음 리소스가 필요합니다.**
+ 테스트하려는 커넥터를 지정하는 AWS Lambda ARN입니다.
+ 클라우드 플랫폼에서 OAuth 2.0 사용자 계정을 테스트합니다.
+ AWS IoT Device Management의 관리형 통합에 등록된 커넥터입니다. 자세한 내용은 [C2C(Cloud-to-Cloud) 커넥터 사용](use-c2c-create-cloud-connector.md) 단원을 참조하십시오.

# C2C(Cloud-to-Cloud) 커넥터 사용
<a name="use-c2c-create-cloud-connector"></a>

 C2C 커넥터는 요청 및 응답 메시지의 번역을 관리하고 관리형 통합과 타사 공급업체 클라우드 간의 통신을 활성화합니다. 다양한 디바이스 유형, 플랫폼 및 프로토콜에서 통합 제어를 용이하게 하여 타사 디바이스를 온보딩하고 관리할 수 있습니다.

다음 절차에서는 C2C 커넥터를 사용하는 단계를 나열합니다.

**C2C 커넥터를 사용하는 단계:**

1. **CreateCloudConnector**

   관리형 통합과 타사 공급업체 클라우드 간의 양방향 통신을 활성화하도록 커넥터를 구성합니다.

   커넥터를 설정할 때 다음 세부 정보를 제공합니다.
   + **이름**: 커넥터에 대한 설명 이름을 선택합니다.
   + **설명**: 커넥터의 용도와 기능에 대한 간략한 요약을 제공합니다.
   + **AWS Lambda ARN**: 커넥터에 전원을 공급하는 AWS Lambda 함수의 Amazon 리소스 이름(ARN)을 지정합니다.

    타사 공급업체 APIs와 통신하는 AWS Lambda 함수를 빌드하고 배포하여 커넥터를 생성합니다. 그런 다음 관리형 통합 내에서 [CreateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateCloudConnector.html) API를 호출하고 등록할 AWS Lambda 함수 ARN을 제공합니다. 관리형 통합에서 커넥터를 생성하는 동일한 AWS 계정에 AWS Lambda 함수가 배포되었는지 확인합니다. 통합을 식별하기 위해 고유한 **커넥터 ID**가 할당됩니다.

   **샘플 CreateCloudConnector API 요청 및 응답:**

   ```
   Request:
   
   {
       "Name": "CreateCloudConnector",
       "Description": "Testing for C2C",
       "EndpointType": "LAMBDA",
       "EndpointConfig": {
           "lambda": {
               "arn": "arn:aws:lambda:us-east-1:xxxxxx:function:TestingConnector"
           }
       },
       "ClientToken": "abc"
   }
   
   Response:
   
   {
       "Id": "string"
   }
   ```

   **생성 흐름:**  
![\[클라우드 커넥터 생성 단계\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/iot-managedintegrations-createcloudconnector.png)
**참고**  
 이 절차의 필요에 따라 [GetCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetCloudConnector.html), [UpdateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_UpdateCloudConnector.html), [DeleteCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteCloudConnector.html) 및 [ListCloudConnectors](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListCloudConnectors.html) APIs를 사용합니다.

1. **CreateConnectorDestination**

   커넥터가 타사 공급업체 클라우드와 보안 연결을 설정하는 데 필요한 설정 및 인증 자격 증명을 제공하도록 대상을 구성합니다. 대상을 사용하여 권한 부여 URL, 인증 체계 및 자격 증명 위치를 포함한 OAuth 2.0 권한 부여 세부 정보와 같은 관리형 통합에 타사 인증 자격 증명을 등록합니다 AWS Secrets Manager.

   **사전 조건**

   **ConnectorDestination**을 생성하기 전에 다음을 수행해야 합니다.
   + [CreateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateCloudConnector.html) API를 호출하여 커넥터를 생성합니다. 함수가 반환하는 ID는 [CreateConnectorDestination](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateConnectorDestination.html) API 호출에 사용됩니다.
   + 커넥터의 3P 플랫폼에 `tokenUrl` 대한를 검색합니다. (**authCode**를 **accessToken**으로 교환할 수 있습니다.)
   + 커넥터의 3P 플랫폼에 대한 **authUrl**을 검색합니다. (최종 사용자는 사용자 이름과 암호를 사용하여 인증할 수 있습니다.)
   + 계정의 보안 암호 관리자에서 `clientId` 및 `clientSecret` (3P 플랫폼에서)를 사용합니다.

   **샘플 CreateConnectorDestination API 요청 및 응답:**

   ```
   Request:
   
   {
       "Name": "CreateConnectorDestination",
       "Description": "CreateConnectorDestination",
       "AuthType": "OAUTH",
       "AuthConfig": {
           "oAuth": {
               "authUrl": "https://xxxx.com/oauth2/authorize",
               "tokenUrl": "https://xxxx/oauth2/token",
               "scope": "testScope",
               "tokenEndpointAuthenticationScheme": "HTTP_BASIC",
               "oAuthCompleteRedirectUrl": "about:blank",
               "proactiveRefreshTokenRenewal": {
                   "enabled": false,
                   "DaysBeforeRenewal": 30
               }
           }
       },
       "CloudConnectorId": "<connectorId>", // The connectorID instance from response of Step 1.
       "SecretsManager": {
           "arn": "arn:aws:secretsmanager:*****:secret:*******",
           "versionId": "********"
       },
       "ClientToken": "***"
   }
   
   Response:
   
   {
       "Id":"string"
   }
   ```

   **클라우드 대상 생성 흐름:**  
![\[CreateConnectorDestination API 호출 단계\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/iot-managedintegrations-createconnectordestination.png)
**참고**  
 이 절차의 필요에 따라 [GetCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetCloudConnector.html), [UpdateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_UpdateCloudConnector.html), [DeleteCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteCloudConnector.html) 및 [ListCloudConnectors](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListCloudConnectors.html) APIs를 사용합니다.

1. **CreateAccountAssociation**

   연결은 최종 사용자의 타사 클라우드 계정과 커넥터 대상 간의 관계를 나타냅니다. 연결을 생성하고 최종 사용자를 관리형 통합에 연결하면 고유한 **연결 ID**를 통해 디바이스에 액세스할 수 있습니다. 이 통합을 통해 디바이스 검색, 명령 전송, 이벤트 수신이라는 세 가지 주요 기능을 사용할 수 있습니다.

   **사전 조건**

   **AccountAssociation**을 생성하기 전에 다음을 완료해야 합니다.
   + [CreateConnectorDestination](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateConnectorDestination.html) API를 호출하여 대상을 생성합니다. 함수가 반환하는 ID는 [CreateAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateAccountAssociation.html) API 호출에 사용됩니다.
   + [CreateAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateAccountAssociation.html) API를 호출합니다.

   **샘플 CreateAccountAssociation API 요청 및 응답:**

   ```
   Request:
   
   {
       "Name": "CreateAccountAssociation",
       "Description": "CreateAccountAssociation",
       "ConnectorDestinationId": "<destinationId>", //The destinationID from destination creation.
       "ClientToken": "***"
   }
           
   Response:
   
   {
       "Id":"string"
   }
   ```
**참고**  
 이 절차의 필요에 따라 [GetCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetCloudConnector.html), [UpdateCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_UpdateCloudConnector.html), [DeleteCloudConnector](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_DeleteCloudConnector.html) 및 [ListCloudConnectors](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListCloudConnectors.html) APIs를 사용합니다.

    **AccountAssociation**에는 [GetAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetAccountAssociation.html) 및 [ListAccountAssociations](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListAccountAssociations.html) APIs. 이러한 APIs **연결**의 상태를 보여줍니다. [StartAccountAssociationRefresh](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_StartAccountAssociationRefresh.html) API를 사용하면 새로 고침 토큰이 만료될 때 **AccountAssociation** 상태를 새로 고칠 수 있습니다.

1. **디바이스 검색**

    각 관리형 사물은 일련 번호 및 데이터 모델과 같은 디바이스별 세부 정보에 연결됩니다. 데이터 모델은 디바이스의 기능을 설명하여 전구, 스위치, 온도 조절기 또는 다른 유형의 디바이스인지 여부를 나타냅니다. 3P 디바이스를 검색하고 3P 디바이스에 대한 managedThing을 생성하려면 아래 단계를 순서대로 따라야 합니다.

   1.  [StartDeviceDiscovery](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_StartDeviceDiscovery.html) API를 호출하여 디바이스 검색 프로세스를 시작합니다.

      **샘플 StartDeviceDiscovery API 요청 및 응답:**

      ```
      Request:
      
      {
          "DiscoveryType": "CLOUD",
          "AccountAssociationId": "*****",
          "ClientToken": "abc"
      }
      
      Response:
      
      {
          "Id": "string",
          "StartedAt": number
      }
      ```

   1.  [GetDeviceDiscovery](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetDeviceDiscovery.html) API를 호출하여 검색 프로세스의 상태를 확인합니다.

   1.  [ListDiscoveredDevices](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_ListDiscoveredDevices.html) API를 호출하여 검색된 디바이스를 나열합니다.

      **샘플 ListDiscoveredDevices API 요청 및 응답:**

      ```
      Request:
      
      //Empty body
      
      Response:
      
      {
          "Items": [
          {
            "Brand": "string",
            "ConnectorDeviceId": "string",
            "ConnectorDeviceName": "string",
            "DeviceTypes": [ "string" ],
            "DiscoveredAt": number,
            "ManagedThingId": "string",
            "Model": "string",
            "Modification": "string"
          }
      ],
          "NextToken": "string"
      }
      ```

   1.  [CreateManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_CreateManagedThing.html) API를 호출하여 검색 목록에서 관리형 통합으로 가져올 디바이스를 선택합니다.

      **샘플 CreateManagedThing API 요청 및 응답:**

      ```
      Request:
                    
      {
          "Role": "DEVICE",
          "AuthenticationMaterial": "CLOUD:XXXX:<connectorDeviceId1>",
          "AuthenticationMaterialType": "DISCOVERED_DEVICE",
          "Name": "sample-device-name"
          "ClientToken": "xxx"
      }
      
      Response:
      
      {
         "Arn": "string", // This is the ARN of the managedThing
         "CreatedAt": number,
         "Id": "string" 
      }
      ```

   1.  [GetManagedThing](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_GetManagedThing.html) API를 호출하여 새로 생성된를 확인합니다`managedThing`. 상태는 입니다`UNASSOCIATED`.

   1.  [RegisterAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterAccountAssociation.html) API를 호출하여 이를 특정 `managedThing`에 연결합니다`accountAssociation`. 성공적인 [RegisterAccountAssociation](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_RegisterAccountAssociation.html) API가 끝나면 상태가 `managedThing` 변경됩니다`ASSOCIATED`.

      **샘플 RegisterAccountAssociation API 요청 및 응답:**

      ```
      Request:
      
      {
          "AccountAssociationId": "string",
          "DeviceDiscoveryId": "string",
          "ManagedThingId": "string"
      }
      
      Response:
      
      {
          "AccountAssociationId": "string",
          "DeviceDiscoveryId": "string",
          "ManagedThingId": "string"
      }
      ```

1. **3P 디바이스로 명령 전송**

    새로 온보딩된 디바이스를 제어하려면 이전에 생성한 **연결 ID**와 함께 [SendManagedThingCommand](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_SendManagedThingCommand.html) API를 사용하고 디바이스에서 지원하는 기능을 기반으로 하는 제어 작업을 사용합니다. 커넥터는 계정 연결 프로세스의 저장된 자격 증명을 사용하여 타사 클라우드로 인증하고 작업에 대한 관련 API 호출을 호출합니다.

   **샘플 SendManagedThingCommand API 요청 및 응답:**

   ```
   Request:
   
   {
       "AccountAssociationId": "string",
       "ConnectorAssociationId": "string",
       "Endpoints": [ 
          { 
             "capabilities": [ 
                { 
                   "actions": [ 
                      { 
                         "actionTraceId": "string",
                         "name": "string",
                         "parameters": JSON value,
                         "ref": "string"
                      }
                   ],
                   "id": "string",
                   "name": "string",
                   "version": "string"
                }
             ],
             "endpointId": "string"
          }
       ]
   }
           
   Response:
           
   {
      "TraceId": "string"
   }
   ```

   **명령을 3P 디바이스 흐름으로 전송합니다.**  
![\[3P 디바이스로 명령 전송\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/iot-managedintegrations-send-to-device.png)

1. **커넥터가 관리형 통합으로 이벤트 전송**

   [SendConnectorEvent](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_SendConnectorEvent.html) API는 커넥터에서 관리형 통합에 이르는 네 가지 유형의 이벤트를 캡처하며, **작업 유형** 파라미터에 대한 다음 열거형 값으로 표시됩니다.
   + **DEVICE\$1COMMAND\$1RESPONSE**: 커넥터가 명령에 대한 응답으로 보내는 비동기 응답입니다.
   + **DEVICE\$1DISCOVERY**: 커넥터는 디바이스 검색 프로세스에 대한 응답으로 검색된 디바이스 목록을 관리형 통합으로 전송하고 [SendConnectorEvent](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_SendConnectorEvent.html) API를 사용합니다.
   + **DEVICE\$1EVENT**: 수신된 디바이스 이벤트를 전송합니다.
   + **DEVICE\$1COMMAND\$1REQUEST**: 디바이스에서 시작된 명령 요청입니다. WebRTC 워크플로를 예로 들 수 있습니다.

    커넥터는 선택적 `userId` 파라미터와 함께 [SendConnectorEvent](https://docs.aws.amazon.com/iot-mi/latest/APIReference/API_SendConnectorEvent.html) API를 사용하여 디바이스 이벤트를 전달할 수도 있습니다.
   + 를 사용하는 디바이스 이벤트의 경우`userId`:

     **샘플 SendConnectorEvent API 요청 및 응답:**

     ```
     Request:
     
     {
         "UserId": "*****",
         "Operation": "DEVICE_EVENT",
         "OperationVersion": "1.0",
         "StatusCode": 200,
         "ConnectorId": "****",
         "ConnectorDeviceId": "***",
         "TraceId": "***",
         "MatterEndpoint": {
             "id": "**",
             "clusters": [{
                 .....
                 }
             }]
         }
     }
     
     Response:
     
     {
         "ConnectorId": "string"
     }
     ```
   + 이 없는 디바이스 이벤트의 경우`userId`:

     **샘플 SendConnectorEvent API 요청 및 응답:**

     ```
     Request:
     
     {
         "Operation": "DEVICE_EVENT",
         "OperationVersion": "1.0",
         "StatusCode": 200,
         "ConnectorId": "*****",
         "ConnectorDeviceId": "****",
         "TraceId": "****",
         "MatterEndpoint": {
             "id": "**",
             "clusters": [{
                 ....
             }]
         }
     }
     
     Response:
     
     {
         "ConnectorId": "string"
     }
     ```

    특정 연결`managedThing`과 계정 연결 간의 링크를 제거하려면 등록 취소 메커니즘을 사용합니다.

   **샘플 DeregisterAccountAssociation API 요청 및 응답:**

   ```
   Request:
   
   {
       "AccountAssociationId": "****",
       "ManagedThingId": "****"
   }
   
   Response:
   
   HTTP/1.1 200 // Empty body
   ```

   **이벤트 흐름 전송:**  
![\[이벤트 전송 흐름\]](http://docs.aws.amazon.com/ko_kr/iot-mi/latest/devguide/images/iot-managedintegrations-send-events.png)

1. **커넥터 상태를 "Listed"로 업데이트하여 다른 관리형 통합 고객에게 표시**

   기본적으로 커넥터는 프라이빗이며 커넥터를 생성한 AWS 계정에만 표시됩니다. 커넥터를 다른 관리형 통합 고객에게 표시하도록 선택할 수 있습니다.

   커넥터를 다른 사용자와 공유하려면 커넥터 세부 정보 페이지의에서 **표시** 옵션을 사용하여 AWS Management Console 검토를 AWS 위해 커넥터 ID를에 제출합니다. 승인되면 동일한의 모든 관리형 통합 사용자가 커넥터를 사용할 수 있습니다 AWS 리전. 또한 커넥터의 연결된 AWS Lambda 함수에서 액세스 정책을 수정하여 특정 AWS 계정 IDs에 대한 액세스를 제한할 수 있습니다. 다른 고객이 커넥터를 사용할 수 있도록 하려면 다른 AWS 계정에서 표시되는 커넥터로 Lambda 함수에 대한 IAM 액세스 권한을 관리합니다.

   커넥터를 다른 관리형 통합 고객에게 표시하기 전에 커넥터 공유 및 액세스 권한을 관리하는 AWS 서비스 용어와 조직의 정책을 검토하세요.