

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

# IDT를 사용하여 AWS IoT Greengrass 검증 제품군 실행
<a name="idt-greengrass-qualification"></a>

 AWS IoT Device Tester for AWS IoT Greengrass V2를 사용하여 AWS IoT Greengrass 코어 소프트웨어가 하드웨어에서 실행되고와 통신할 수 있는지 확인할 수 있습니다 AWS 클라우드. 또한를 사용하여 end-to-end 테스트를 수행합니다 AWS IoT Core. 예를 들어 디바이스에서 구성 요소를 배포하고 업그레이드할 수 있는지 확인합니다.

디바이스 테스트 외에도 IDT for AWS IoT Greengrass V2는 검증 프로세스를 용이하게 AWS 계정 하기 위해에 리소스(예: AWS IoT 사물, 그룹 등)를 생성합니다.

<a name="idt-aws-credentials"></a>이러한 리소스를 생성하기 위해 IDT for AWS IoT Greengrass V2는 `config.json` 파일에 구성된 AWS 자격 증명을 사용하여 사용자를 대신하여 API를 호출합니다. 이러한 리소스는 테스트 중 다양한 시점에서 프로비저닝됩니다.

IDT for AWS IoT Greengrass V2를 사용하여 AWS IoT Greengrass 검증 제품군을 실행할 때 다음 단계를 수행합니다.

1. 디바이스 및 자격 증명 구성을 로드하고 검증합니다.

1. 필수 로컬 및 클라우드 리소스를 사용하여 선택한 테스트를 수행합니다.

1. 로컬 및 클라우드 리소스를 정리합니다.

1. 보드에서 검증에 필요한 테스트를 통과했는지를 나타내는 테스트 보고서를 생성합니다.

## 테스트 제품군 버전
<a name="idt-test-suite-versions"></a>

IDT for AWS IoT Greengrass V2는 테스트를 테스트 제품군과 테스트 그룹으로 구성합니다.<a name="idt-test-suites-groups"></a>
+ 테스트 제품군은 장치가 AWS IoT Greengrass의 특정 버전에서 작동하는지 확인하는 데 사용되는 테스트 그룹 집합입니다.
+ 테스트 그룹은 구성 요소 배포와 같은 특정 특성과 관련된 개별 테스트 집합입니다.

테스트 제품군은 `major.minor.patch` 형식을 사용하여 버전이 지정됩니다(예: `GGV2Q_1.0.0`). IDT를 다운로드하면 패키지에 최신 Greengrass 검증 제품군 버전이 포함됩니다.

**중요**  
지원되지 않는 테스트 제품군 버전의 테스트는 장치 검증에 유효하지 않습니다. IDT는 지원되지 않는 버전에 대한 검증 보고서를 인쇄하지 않습니다. 자세한 내용은 [AWS IoT Device Tester용 AWS IoT Greengrass에 대한 지원 정책](idt-support-policy.md) 단원을 참조하십시오.  
를 실행`list-supported-products`하여 현재 버전의 IDT에서 지원하는 AWS IoT Greengrass 및 테스트 제품군의 버전을 나열할 수 있습니다.

## 테스트 그룹 설명
<a name="dt-test-groups"></a>

**코어 검증을 위한 필수 테스트 그룹**  
이러한 테스트 그룹은 AWS Partner Device Catalog에 대한 AWS IoT Greengrass V2 디바이스를 검증하는 데 필요합니다.    
코어 종속성  
디바이스가 AWS IoT Greengrass 코어 소프트웨어에 대한 모든 소프트웨어 및 하드웨어 요구 사항을 충족하는지 여부를 확인합니다. 이 테스트 그룹에는 다음 테스트 사례가 포함됩니다.    
Java 버전  
테스트 중인 디바이스에 필요한 Java 버전이 설치되어 있는지 확인합니다. Java 8 이상이 AWS IoT Greengrass 필요합니다.  
사전 테스트 검증  
디바이스가 테스트 실행을 위한 소프트웨어 요구 사항을 충족하는지 확인합니다.  
+ Linux 기반 디바이스의 경우 이 테스트는 디바이스가 다음 Linux 명령을 실행할 수 있는지 확인합니다.

  `chmod`, `cp`, `echo`, `grep`, `kill`, `ln`, `mkinfo`, `ps`, `rm`, `sh`, `uname` 
+ Windows 기반 디바이스의 경우 이 테스트는 디바이스에 다음 Microsoft 소프트웨어가 설치되어 있는지 확인합니다.

  [Powershell](https://learn.microsoft.com/en-us/powershell/?view=powershell-7.1) v5.1 이상, [.NET](https://learn.microsoft.com/en-us/dotnet/) v4.6.1 이상, [Visual C\$1\$1](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170) 2017 이상, [PsExec 유틸리티](https://learn.microsoft.com/en-us/sysinternals/downloads/psexec)  
버전 검사기  
 AWS IoT Greengrass 제공된 버전이 사용 중인 AWS IoT 디바이스 테스터 버전과 호환되는지 확인합니다.  
구성 요소  
디바이스가 구성 요소를 배포하고 업그레이드할 수 있는지 확인합니다. 이 테스트 그룹에는 다음 테스트가 포함됩니다.    
클라우드 구성 요소  
클라우드 구성 요소에 대한 디바이스 기능을 검증합니다.  
로컬 구성 요소  
로컬 구성 요소에 대한 디바이스 기능을 검증합니다.  
Lambda  
이 테스트는 Windows 기반 디바이스에 적용되지 않습니다.  
디바이스가 Java 런타임을 사용하는 Lambda 함수 구성 요소를 배포할 수 있고 Lambda 함수가 AWS IoT Core MQTT 주제를 작업 메시지의 이벤트 소스로 사용할 수 있는지 확인합니다.  
MQTT  
디바이스가 AWS IoT Core MQTT 주제를 구독하고 게시할 수 있는지 확인합니다.

**선택적 테스트 그룹**  
이러한 테스트 그룹은 선택 사항으로, Linux 기반 Greengrass 코어 디바이스를 검증하는 데만 사용됩니다. 선택적 테스트를 받기로 선택하면 디바이스 카탈로그에 추가 기능이 있는 AWS Partner 디바이스가 나열됩니다.  
Docker 종속성  
<a name="description-docker"></a>디바이스가 AWS제공 Docker 애플리케이션 관리자(`aws.greengrass.DockerApplicationManager`) 구성 요소를 사용하는 데 필요한 모든 기술 종속성을 충족하는지 확인합니다.  
Docker 애플리케이션 관리자 검증  
<a name="description-docker-app-manager-qual"></a><a name="description-docker-app-manager-qual-phrase"></a>디바이스가 Amazon ECR에서 Docker 컨테이너 이미지를 다운로드할 수 있는지 확인합니다.  
기계 학습 종속성  
기계 학습 선택적 테스트 그룹은 IDT v4.9.3에서만 지원됩니다.
<a name="description-ml"></a>디바이스가 AWS제공 기계 학습(ML) 구성 요소를 사용하는 데 필요한 모든 기술 종속성을 충족하는지 확인합니다.  
기계 학습 추론 테스트  
기계 학습 선택적 테스트 그룹은 IDT v4.9.3에서만 지원됩니다.
<a name="description-ml-inference"></a><a name="description-ml-inference-phrase"></a>디바이스가 [딥 러닝 런타임](https://github.com/neo-ai/neo-ai-dlr) 및 [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) ML 프레임워크를 사용하여 ML 추론을 수행할 수 있는지 확인합니다.  
스트림 관리자 종속성  
스트림 관리자 선택적 테스트 그룹은 IDT v4.9.3에서만 지원됩니다.
<a name="description-sm"></a>디바이스가 [AWS IoT Greengrass 스트림 관리자](manage-data-streams.md)를 다운로드, 설치 및 실행할 수 있는지 확인합니다.  
HSI(하드웨어 보안 통합)  
이 테스트는 Linux 기반 디바이스에 대해서만 IDT v4.9.3 이상에서 사용할 수 있습니다. AWS IoT Greengrass 는 현재 Windows 디바이스에 대한 하드웨어 보안 통합을 지원하지 않습니다.
<a name="description-hsi"></a>디바이스가 하드웨어 보안 모듈(HSM)에 저장된 프라이빗 키와 인증서를 사용하여 AWS IoT 및 AWS IoT Greengrass 서비스에 대한 연결을 인증할 수 있는지 확인합니다. 또한이 테스트는 AWS제공 [PKCS\$111 공급자 구성 요소가](pkcs11-provider-component.md) 공급업체 제공 PKCS\$111 라이브러리를 사용하여 HSM과 인터페이스할 수 있는지 확인합니다. 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 단원을 참조하십시오.

# AWS IoT Greengrass 검증 제품군을 실행하기 위한 사전 조건
<a name="dev-tst-prereqs"></a>

이 섹션에서는 AWS IoT Device Tester 에 (IDT)를 사용하기 위한 사전 조건을 설명합니다 AWS IoT Greengrass.

## 용의 최신 버전 다운로드 AWS IoT Device Tester AWS IoT Greengrass
<a name="install-dev-tst-gg"></a>

[최신 버전](idt-programmatic-download.md)의 IDT를 다운로드하여 읽기/쓰기 권한이 있는 파일 시스템의 위치(*<device-tester-extract-location>*)에 소프트웨어의 압축을 풉니다.

**참고**  
<a name="unzip-package-to-local-drive"></a>여러 사용자가 NFS 디렉터리 또는 Windows 네트워크 공유 폴더와 같은 공유 위치에서 IDT를 실행하는 것은 지원되지 않습니다. 로컬 드라이브에 IDT 패키지의 압축을 풀고 로컬 워크스테이션에서 IDT 바이너리를 실행하는 것이 좋습니다.  
Windows의 경우 260자의 경로 길이 제한이 있습니다. Windows를 사용하는 경우 경로를 260자 제한 아래로 유지하도록 IDT 압축을 `C:\ ` 또는 `D:\` 같은 루트 디렉터리에 풉니다.

## AWS IoT Greengrass 소프트웨어 다운로드
<a name="config-gg"></a>

IDT for AWS IoT Greengrass V2는 디바이스의 특정 버전과의 호환성을 테스트합니다 AWS IoT Greengrass. 다음 명령을 실행하여 AWS IoT Greengrass 코어 소프트웨어를 라는 파일에 다운로드합니다`aws.greengrass.nucleus.zip`. IDT 버전에 [지원되는 nucleus 구성 요소 버전](dev-test-versions.md)으로 *버전*을 바꿉니다.

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

```
curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip > aws.greengrass.nucleus.zip
```

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

```
curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip > aws.greengrass.nucleus.zip
```

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

```
iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip -OutFile aws.greengrass.nucleus.zip
```

------

다운로드한 `aws.greengrass.nucleus.zip` 파일을 `<device-tester-extract-location>/products/` 폴더에 배치합니다.

**참고**  
동일한 운영 체제 및 아키텍처에 대해 이 디렉터리에 여러 파일을 배치하지 마세요.

## 생성 및 구성 AWS 계정
<a name="config-aws-account-for-idt"></a>

 AWS IoT Device Tester for AWS IoT Greengrass V2를 사용하려면 먼저 다음 단계를 수행해야 합니다.

1. [를 설정합니다 AWS 계정.](#create-aws-account-for-idt) 가 이미 있는 경우 2단계로 AWS 계정건너뜁니다.

1. [IDT에 대한 권한을 구성합니다.](#configure-idt-permissions)

이러한 계정 권한을 통해 IDT는 사용자를 대신하여 AWS 서비스에 액세스하고 AWS IoT 사물 및 AWS IoT Greengrass 구성 요소와 같은 AWS 리소스를 생성할 수 있습니다.

<a name="idt-aws-credentials"></a>이러한 리소스를 생성하기 위해 IDT for AWS IoT Greengrass V2는 `config.json` 파일에 구성된 AWS 자격 증명을 사용하여 사용자를 대신하여 API를 호출합니다. 이러한 리소스는 테스트 중 다양한 시점에서 프로비저닝됩니다.

**참고**  
대다수 테스트는 [AWS 프리 티어](https://aws.amazon.com/free) 대상으로 적합하지만, AWS 계정에 가입할 때 신용카드를 등록해야 합니다. 자세한 내용은 [계정에 프리 티어가 적용되는데 결제 방법이 필요한 이유는 무엇입니까?](https://aws.amazon.com/premiumsupport/knowledge-center/free-tier-payment-method/)를 참조하세요.

### 1단계: 설정 AWS 계정
<a name="create-aws-account-for-idt"></a>

이 단계에는 AWS 계정을 생성하고 구성합니다. 이미 AWS 계정이 있으면 [2단계: IDT에 대한 권한 구성](#configure-idt-permissions) 섹션으로 건너뜁니다.

이 없는 경우 다음 단계를 AWS 계정완료하여 생성합니다.

**에 가입하려면 AWS 계정**

1. [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)을 엽니다.

1. 온라인 지시 사항을 따르세요.

   등록 절차 중 전화 또는 텍스트 메시지를 받고 전화 키패드로 확인 코드를 입력하는 과정이 있습니다.

   에 가입하면 AWS 계정*AWS 계정 루트 사용자*이 생성됩니다. 루트 사용자에게는 계정의 모든 AWS 서비스 및 리소스에 액세스할 권한이 있습니다. 보안 모범 사례는 사용자에게 관리 액세스 권한을 할당하고, 루트 사용자만 사용하여 [루트 사용자 액세스 권한이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 수행하는 것입니다.

다음 옵션 중 하나를 선택하여 관리 사용자를 생성합니다.


****  

| 관리자를 관리하는 방법 한 가지 선택 | 목적 | By | 다른 방법 | 
| --- | --- | --- | --- | 
| IAM Identity Center에서 (권장) | 단기 보안 인증 정보를 사용하여 AWS에 액세스합니다.이는 보안 모범 사례와 일치합니다. 모범 사례에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)를 참조하세요. | AWS IAM Identity Center 사용 설명서의 [시작하기](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html) 지침을 따릅니다. | AWS Command Line Interface 사용 설명서에서 [사용하도록 AWS CLI 를 구성 AWS IAM Identity Center](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)하여 프로그래밍 방식 액세스를 구성합니다. | 
| IAM에서 (권장되지 않음) | 장기 보안 인증 정보를 사용하여 AWS에 액세스합니다. | IAM 사용 설명서의 [비상 액세스를 위한 IAM 사용자 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html)에 나와 있는 지침을 따르세요. | IAM 사용 설명서에 나온 [IAM 사용자의 액세스 키 관리](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)를 수행하여 프로그래밍 방식의 액세스를 구성합니다. | 

### 2단계: IDT에 대한 권한 구성
<a name="configure-idt-permissions"></a>

이 단계에서는 IDT for AWS IoT Greengrass V2가 테스트를 실행하고 IDT 사용 데이터를 수집하는 데 사용하는 권한을 구성합니다. [AWS Management Console](#configure-idt-permissions-console) 또는 [AWS Command Line Interface (AWS CLI)](#configure-idt-permissions-cli)를 사용하여 IDT에 대한 IAM 정책 및 테스트 사용자를 생성한 다음에 정책을 사용자에게 연결할 수 있습니다. IDT에 대한 테스트 사용자를 이미 생성했으면 [IDT 테스트를 실행하도록 장치 구성](device-config-setup.md)으로 건너뜁니다.

#### IDT에 대한 권한을 구성하려면(콘솔)
<a name="configure-idt-permissions-console"></a>

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

1. 특정 권한으로 역할을 생성하는 권한을 부여하는 고객 관리형 정책을 만듭니다.

   1. 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

   1. PreInstalled를 사용하지 않는다면 **JSON** 탭에서 다음 정책으로 자리 표시자 내용을 바꿉니다. PreInstalled를 사용한다면 다음 단계로 진행합니다.

      ```
      <a name="customer-managed-policy-cli"></a>{
          "Version":"2012-10-17",		 	 	 
          "Statement":[
          {
            "Sid":"passRoleForResources",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::*:role/idt-*",
            "Condition":{
              "StringEquals":{
                "iam:PassedToService":[
                  "iot.amazonaws.com",
                  "lambda.amazonaws.com",
                  "greengrass.amazonaws.com"
                ]
              }
            }
          },
          {
            "Sid":"lambdaResources",
            "Effect":"Allow",
            "Action":[
              "lambda:CreateFunction",
              "lambda:PublishVersion",
              "lambda:DeleteFunction",
              "lambda:GetFunction"
            ],
            "Resource":[
              "arn:aws:lambda:*:*:function:idt-*"
            ]
          },
          {
            "Sid":"iotResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateThing",
              "iot:DeleteThing",
              "iot:DescribeThing",
              "iot:CreateThingGroup",
              "iot:DeleteThingGroup",
              "iot:DescribeThingGroup",
              "iot:AddThingToThingGroup",
              "iot:RemoveThingFromThingGroup",
              "iot:AttachThingPrincipal",
              "iot:DetachThingPrincipal",
              "iot:UpdateCertificate",
              "iot:DeleteCertificate",
              "iot:CreatePolicy",
              "iot:AttachPolicy",
              "iot:DetachPolicy",
              "iot:DeletePolicy",
              "iot:GetPolicy",
              "iot:Publish",
              "iot:TagResource",
              "iot:ListThingPrincipals",
              "iot:ListAttachedPolicies",
              "iot:ListTargetsForPolicy",
              "iot:ListThingGroupsForThing",
              "iot:ListThingsInThingGroup",
              "iot:CreateJob",
              "iot:DescribeJob",
              "iot:DescribeJobExecution",
              "iot:CancelJob"
            ],
            "Resource":[
              "arn:aws:iot:*:*:thing/idt-*",
              "arn:aws:iot:*:*:thinggroup/idt-*",
              "arn:aws:iot:*:*:policy/idt-*",
              "arn:aws:iot:*:*:cert/*",
              "arn:aws:iot:*:*:topic/idt-*",
              "arn:aws:iot:*:*:job/*"
            ]
          },
          {
            "Sid":"s3Resources",
            "Effect":"Allow",
            "Action":[
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:CreateBucket",
              "s3:ListBucket",
              "s3:ListBucketVersions",
              "s3:DeleteBucket",
              "s3:PutObjectTagging",
              "s3:PutBucketTagging"
            ],
            "Resource":"arn:aws:s3::*:idt-*"
          },
          {
            "Sid":"roleAliasResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateRoleAlias",
              "iot:DescribeRoleAlias",
              "iot:DeleteRoleAlias",
              "iot:TagResource",
              "iam:GetRole"
            ],
            "Resource":[
              "arn:aws:iot:*:*:rolealias/idt-*",
              "arn:aws:iam::*:role/idt-*"
            ]
          },
          {
            "Sid":"idtExecuteAndCollectMetrics",
            "Effect":"Allow",
            "Action":[
              "iot-device-tester:SendMetrics",
              "iot-device-tester:SupportedVersion",
              "iot-device-tester:LatestIdt",
              "iot-device-tester:CheckVersion",
              "iot-device-tester:DownloadTestSuite"
            ],
            "Resource":"*"
          },
          {
            "Sid":"genericResources",
            "Effect":"Allow",
            "Action":[
              "greengrass:*",
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "iot:ListThings",
              "iot:DescribeEndpoint",
              "iot:CreateKeysAndCertificate"
            ],
            "Resource":"*"
          },
          {
            "Sid":"iamResourcesUpdate",
            "Effect":"Allow",
            "Action":[
              "iam:CreateRole",
              "iam:DeleteRole",
              "iam:CreatePolicy",
              "iam:DeletePolicy",
              "iam:AttachRolePolicy",
              "iam:DetachRolePolicy",
              "iam:TagRole",
              "iam:TagPolicy",
              "iam:GetPolicy",
              "iam:ListAttachedRolePolicies",
              "iam:ListEntitiesForPolicy"
            ],
            "Resource":[
              "arn:aws:iam::*:role/idt-*",
              "arn:aws:iam::*:policy/idt-*"
            ]
          }
        ]
      }
      ```

   1. PreInstalled를 사용한다면 **JSON** 탭에서 다음 정책으로 자리 표시자 내용을 바꿉니다. 다음을 확인합니다.
      + 테스트 중 디바이스(DUT)에 Greengrass가 설치되는 동안 생성된 사물 이름과 사물 그룹으로 `iotResources` 문의 *thingName*과 *thingGroup*을 바꾸어 권한을 추가합니다.
      + DUT에 Greengrass가 설치되는 동안 생성된 역할로 `roleAliasResources` 문과 `passRoleForResources` 문의 *passRole*와 *roleAlias*를 바꿉니다.

      ```
      <a name="customer-managed-policy-cli"></a>{
          "Version":"2012-10-17",		 	 	 
          "Statement":[
          {
            "Sid":"passRoleForResources",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::*:role/passRole",
            "Condition":{
              "StringEquals":{
                "iam:PassedToService":[
                  "iot.amazonaws.com",
                  "lambda.amazonaws.com",
                  "greengrass.amazonaws.com"
                ]
              }
            }
          },
          {
            "Sid":"lambdaResources",
            "Effect":"Allow",
            "Action":[
              "lambda:CreateFunction",
              "lambda:PublishVersion",
              "lambda:DeleteFunction",
              "lambda:GetFunction"
            ],
            "Resource":[
              "arn:aws:lambda:*:*:function:idt-*"
            ]
          },
          {
            "Sid":"iotResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateThing",
              "iot:DeleteThing",
              "iot:DescribeThing",
              "iot:CreateThingGroup",
              "iot:DeleteThingGroup",
              "iot:DescribeThingGroup",
              "iot:AddThingToThingGroup",
              "iot:RemoveThingFromThingGroup",
              "iot:AttachThingPrincipal",
              "iot:DetachThingPrincipal",
              "iot:UpdateCertificate",
              "iot:DeleteCertificate",
              "iot:CreatePolicy",
              "iot:AttachPolicy",
              "iot:DetachPolicy",
              "iot:DeletePolicy",
              "iot:GetPolicy",
              "iot:Publish",
              "iot:TagResource",
              "iot:ListThingPrincipals",
              "iot:ListAttachedPolicies",
              "iot:ListTargetsForPolicy",
              "iot:ListThingGroupsForThing",
              "iot:ListThingsInThingGroup",
              "iot:CreateJob",
              "iot:DescribeJob",
              "iot:DescribeJobExecution",
              "iot:CancelJob"
            ],
            "Resource":[
              "arn:aws:iot:*:*:thing/thingName",
              "arn:aws:iot:*:*:thinggroup/thingGroup",
              "arn:aws:iot:*:*:policy/idt-*",
              "arn:aws:iot:*:*:cert/*",
              "arn:aws:iot:*:*:topic/idt-*",
              "arn:aws:iot:*:*:job/*"
            ]
          },
          {
            "Sid":"s3Resources",
            "Effect":"Allow",
            "Action":[
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:CreateBucket",
              "s3:ListBucket",
              "s3:ListBucketVersions",
              "s3:DeleteBucket",
              "s3:PutObjectTagging",
              "s3:PutBucketTagging"
            ],
            "Resource":"arn:aws:s3::*:idt-*"
          },
          {
            "Sid":"roleAliasResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateRoleAlias",
              "iot:DescribeRoleAlias",
              "iot:DeleteRoleAlias",
              "iot:TagResource",
              "iam:GetRole"
            ],
            "Resource":[
              "arn:aws:iot:*:*:rolealias/roleAlias",
              "arn:aws:iam::*:role/idt-*"
            ]
          },
          {
            "Sid":"idtExecuteAndCollectMetrics",
            "Effect":"Allow",
            "Action":[
              "iot-device-tester:SendMetrics",
              "iot-device-tester:SupportedVersion",
              "iot-device-tester:LatestIdt",
              "iot-device-tester:CheckVersion",
              "iot-device-tester:DownloadTestSuite"
            ],
            "Resource":"*"
          },
          {
            "Sid":"genericResources",
            "Effect":"Allow",
            "Action":[
              "greengrass:*",
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "iot:ListThings",
              "iot:DescribeEndpoint",
              "iot:CreateKeysAndCertificate"
            ],
            "Resource":"*"
          },
          {
            "Sid":"iamResourcesUpdate",
            "Effect":"Allow",
            "Action":[
              "iam:CreateRole",
              "iam:DeleteRole",
              "iam:CreatePolicy",
              "iam:DeletePolicy",
              "iam:AttachRolePolicy",
              "iam:DetachRolePolicy",
              "iam:TagRole",
              "iam:TagPolicy",
              "iam:GetPolicy",
              "iam:ListAttachedRolePolicies",
              "iam:ListEntitiesForPolicy"
            ],
            "Resource":[
              "arn:aws:iam::*:role/idt-*",
              "arn:aws:iam::*:policy/idt-*"
            ]
          }
        ]
      }
      ```
**참고**  
테스트 중인 디바이스의 [토큰 교환 역할로 사용자 지정 IAM 역할](set-config.md#custom-token-exchange-role-idt)을 사용하려면 사용자 지정 IAM 역할 리소스가 허용되도록 정책의 `roleAliasResources` 문과 `passRoleForResources` 문을 업데이트해야 합니다.

   1. **정책 검토**를 선택합니다.

   1. **이름**에서 **IDTGreengrassIAMPermissions**을 입력합니다. **Summary(요약)** 아래에서 정책에 의해 부여된 권한을 검토합니다.

   1. **정책 생성**을 선택합니다.

1. IAM 사용자를 만들고 AWS IoT Greengrass용 IDT에 필요한 권한을 연결합니다.

   1. IAM 사용자를 생성합니다. *IAM 사용 설명서*에서 [IAM 사용자 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)의 1\$15단계를 따르세요.

   1. IAM 사용자에게 권한을 연결합니다.

      1. **Set permissions(권한 설정)** 페이지에서 **Attach existing policies to user directly(사용자에게 직접 기존 정책 연결)**를 선택합니다.

      1. 이전 단계에서 만든 **IDTGreengrassIAMPermissions** 정책을 검색합니다. 확인란을 선택합니다.

   1. **다음: 태그**를 선택합니다.

   1. **Next: Review(다음: 검토)**를 선택하여 선택 사항의 요약을 봅니다.

   1. **사용자 생성**을 선택합니다.

   1. 사용자의 액세스 키(액세스 키 ID와 비밀 액세스 키)를 보려면 암호와 액세스 키 옆에 있는 **Show(표시)**를 선택합니다. 액세스 키를 저장하려면 **Download .csv(csv 다운로드)**를 선택한 후 안전한 위치에 파일을 저장합니다. 나중에 이 정보를 사용하여 AWS 자격 증명 파일을 구성합니다.

1. <a name="aws-account-config-next-steps"></a>다음 단계: [물리적 장치](device-config-setup.md)를 구성합니다.

#### IDT에 대한 권한을 구성하려면(AWS CLI)
<a name="configure-idt-permissions-cli"></a>

1. 아직 설치되지 않은 AWS CLI 경우 컴퓨터에를 설치하고 구성합니다. *AWS Command Line Interface 사용 설명서* [AWS CLI설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 단계를 따르세요.
**참고**  
 AWS CLI 는 명령줄 셸의 서비스와 상호 작용하는 데 사용할 수 있는 AWS 오픈 소스 도구입니다.

1. IDT 및 AWS IoT Greengrass 역할을 관리할 수 있는 권한을 부여하는 고객 관리형 정책을 만듭니다.

   1. PreInstalled를 사용하지 않는다면 텍스트 편집기를 열고 다음 정책 내용을 JSON 파일에 저장합니다. PreInstalled를 사용한다면 다음 단계로 진행합니다.

      ```
      <a name="customer-managed-policy-cli"></a>{
          "Version":"2012-10-17",		 	 	 
          "Statement":[
          {
            "Sid":"passRoleForResources",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::*:role/idt-*",
            "Condition":{
              "StringEquals":{
                "iam:PassedToService":[
                  "iot.amazonaws.com",
                  "lambda.amazonaws.com",
                  "greengrass.amazonaws.com"
                ]
              }
            }
          },
          {
            "Sid":"lambdaResources",
            "Effect":"Allow",
            "Action":[
              "lambda:CreateFunction",
              "lambda:PublishVersion",
              "lambda:DeleteFunction",
              "lambda:GetFunction"
            ],
            "Resource":[
              "arn:aws:lambda:*:*:function:idt-*"
            ]
          },
          {
            "Sid":"iotResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateThing",
              "iot:DeleteThing",
              "iot:DescribeThing",
              "iot:CreateThingGroup",
              "iot:DeleteThingGroup",
              "iot:DescribeThingGroup",
              "iot:AddThingToThingGroup",
              "iot:RemoveThingFromThingGroup",
              "iot:AttachThingPrincipal",
              "iot:DetachThingPrincipal",
              "iot:UpdateCertificate",
              "iot:DeleteCertificate",
              "iot:CreatePolicy",
              "iot:AttachPolicy",
              "iot:DetachPolicy",
              "iot:DeletePolicy",
              "iot:GetPolicy",
              "iot:Publish",
              "iot:TagResource",
              "iot:ListThingPrincipals",
              "iot:ListAttachedPolicies",
              "iot:ListTargetsForPolicy",
              "iot:ListThingGroupsForThing",
              "iot:ListThingsInThingGroup",
              "iot:CreateJob",
              "iot:DescribeJob",
              "iot:DescribeJobExecution",
              "iot:CancelJob"
            ],
            "Resource":[
              "arn:aws:iot:*:*:thing/idt-*",
              "arn:aws:iot:*:*:thinggroup/idt-*",
              "arn:aws:iot:*:*:policy/idt-*",
              "arn:aws:iot:*:*:cert/*",
              "arn:aws:iot:*:*:topic/idt-*",
              "arn:aws:iot:*:*:job/*"
            ]
          },
          {
            "Sid":"s3Resources",
            "Effect":"Allow",
            "Action":[
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:CreateBucket",
              "s3:ListBucket",
              "s3:ListBucketVersions",
              "s3:DeleteBucket",
              "s3:PutObjectTagging",
              "s3:PutBucketTagging"
            ],
            "Resource":"arn:aws:s3::*:idt-*"
          },
          {
            "Sid":"roleAliasResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateRoleAlias",
              "iot:DescribeRoleAlias",
              "iot:DeleteRoleAlias",
              "iot:TagResource",
              "iam:GetRole"
            ],
            "Resource":[
              "arn:aws:iot:*:*:rolealias/idt-*",
              "arn:aws:iam::*:role/idt-*"
            ]
          },
          {
            "Sid":"idtExecuteAndCollectMetrics",
            "Effect":"Allow",
            "Action":[
              "iot-device-tester:SendMetrics",
              "iot-device-tester:SupportedVersion",
              "iot-device-tester:LatestIdt",
              "iot-device-tester:CheckVersion",
              "iot-device-tester:DownloadTestSuite"
            ],
            "Resource":"*"
          },
          {
            "Sid":"genericResources",
            "Effect":"Allow",
            "Action":[
              "greengrass:*",
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "iot:ListThings",
              "iot:DescribeEndpoint",
              "iot:CreateKeysAndCertificate"
            ],
            "Resource":"*"
          },
          {
            "Sid":"iamResourcesUpdate",
            "Effect":"Allow",
            "Action":[
              "iam:CreateRole",
              "iam:DeleteRole",
              "iam:CreatePolicy",
              "iam:DeletePolicy",
              "iam:AttachRolePolicy",
              "iam:DetachRolePolicy",
              "iam:TagRole",
              "iam:TagPolicy",
              "iam:GetPolicy",
              "iam:ListAttachedRolePolicies",
              "iam:ListEntitiesForPolicy"
            ],
            "Resource":[
              "arn:aws:iam::*:role/idt-*",
              "arn:aws:iam::*:policy/idt-*"
            ]
          }
        ]
      }
      ```

   1. PreInstalled를 사용한다면 텍스트 편집기를 열고 다음 정책 내용을 JSON 파일에 저장합니다. 다음을 확인합니다.
      + 테스트 중 디바이스(DUT)에 Greengrass가 설치되는 동안 `iotResources` 문의 *thingName*과 *thingGroup*을 바꾸어 권한을 추가합니다.
      + DUT에 Greengrass가 설치되는 동안 생성된 역할로 `roleAliasResources` 문과 `passRoleForResources` 문의 *passRole*와 *roleAlias*를 바꿉니다.

      ```
      <a name="customer-managed-policy-cli"></a>{
          "Version":"2012-10-17",		 	 	 
          "Statement":[
          {
            "Sid":"passRoleForResources",
            "Effect":"Allow",
            "Action":"iam:PassRole",
            "Resource":"arn:aws:iam::*:role/passRole",
            "Condition":{
              "StringEquals":{
                "iam:PassedToService":[
                  "iot.amazonaws.com",
                  "lambda.amazonaws.com",
                  "greengrass.amazonaws.com"
                ]
              }
            }
          },
          {
            "Sid":"lambdaResources",
            "Effect":"Allow",
            "Action":[
              "lambda:CreateFunction",
              "lambda:PublishVersion",
              "lambda:DeleteFunction",
              "lambda:GetFunction"
            ],
            "Resource":[
              "arn:aws:lambda:*:*:function:idt-*"
            ]
          },
          {
            "Sid":"iotResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateThing",
              "iot:DeleteThing",
              "iot:DescribeThing",
              "iot:CreateThingGroup",
              "iot:DeleteThingGroup",
              "iot:DescribeThingGroup",
              "iot:AddThingToThingGroup",
              "iot:RemoveThingFromThingGroup",
              "iot:AttachThingPrincipal",
              "iot:DetachThingPrincipal",
              "iot:UpdateCertificate",
              "iot:DeleteCertificate",
              "iot:CreatePolicy",
              "iot:AttachPolicy",
              "iot:DetachPolicy",
              "iot:DeletePolicy",
              "iot:GetPolicy",
              "iot:Publish",
              "iot:TagResource",
              "iot:ListThingPrincipals",
              "iot:ListAttachedPolicies",
              "iot:ListTargetsForPolicy",
              "iot:ListThingGroupsForThing",
              "iot:ListThingsInThingGroup",
              "iot:CreateJob",
              "iot:DescribeJob",
              "iot:DescribeJobExecution",
              "iot:CancelJob"
            ],
            "Resource":[
              "arn:aws:iot:*:*:thing/thingName",
              "arn:aws:iot:*:*:thinggroup/thingGroup",
              "arn:aws:iot:*:*:policy/idt-*",
              "arn:aws:iot:*:*:cert/*",
              "arn:aws:iot:*:*:topic/idt-*",
              "arn:aws:iot:*:*:job/*"
            ]
          },
          {
            "Sid":"s3Resources",
            "Effect":"Allow",
            "Action":[
              "s3:GetObject",
              "s3:PutObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:CreateBucket",
              "s3:ListBucket",
              "s3:ListBucketVersions",
              "s3:DeleteBucket",
              "s3:PutObjectTagging",
              "s3:PutBucketTagging"
            ],
            "Resource":"arn:aws:s3::*:idt-*"
          },
          {
            "Sid":"roleAliasResources",
            "Effect":"Allow",
            "Action":[
              "iot:CreateRoleAlias",
              "iot:DescribeRoleAlias",
              "iot:DeleteRoleAlias",
              "iot:TagResource",
              "iam:GetRole"
            ],
            "Resource":[
              "arn:aws:iot:*:*:rolealias/roleAlias",
              "arn:aws:iam::*:role/idt-*"
            ]
          },
          {
            "Sid":"idtExecuteAndCollectMetrics",
            "Effect":"Allow",
            "Action":[
              "iot-device-tester:SendMetrics",
              "iot-device-tester:SupportedVersion",
              "iot-device-tester:LatestIdt",
              "iot-device-tester:CheckVersion",
              "iot-device-tester:DownloadTestSuite"
            ],
            "Resource":"*"
          },
          {
            "Sid":"genericResources",
            "Effect":"Allow",
            "Action":[
              "greengrass:*",
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "iot:ListThings",
              "iot:DescribeEndpoint",
              "iot:CreateKeysAndCertificate"
            ],
            "Resource":"*"
          },
          {
            "Sid":"iamResourcesUpdate",
            "Effect":"Allow",
            "Action":[
              "iam:CreateRole",
              "iam:DeleteRole",
              "iam:CreatePolicy",
              "iam:DeletePolicy",
              "iam:AttachRolePolicy",
              "iam:DetachRolePolicy",
              "iam:TagRole",
              "iam:TagPolicy",
              "iam:GetPolicy",
              "iam:ListAttachedRolePolicies",
              "iam:ListEntitiesForPolicy"
            ],
            "Resource":[
              "arn:aws:iam::*:role/idt-*",
              "arn:aws:iam::*:policy/idt-*"
            ]
          }
        ]
      }
      ```
**참고**  
테스트 중인 디바이스의 [토큰 교환 역할로 사용자 지정 IAM 역할](set-config.md#custom-token-exchange-role-idt)을 사용하려면 사용자 지정 IAM 역할 리소스가 허용되도록 정책의 `roleAliasResources` 문과 `passRoleForResources` 문을 업데이트해야 합니다.

   1. 다음 명령을 실행하여 `IDTGreengrassIAMPermissions`라는 고객 관리형 정책을 생성합니다. 이전 단계에서 생성한 JSON 파일의 전체 경로로 `policy.json`을 바꿉니다.

      ```
      aws iam create-policy --policy-name IDTGreengrassIAMPermissions --policy-document file://policy.json
      ```

1. IAM 사용자를 만들고 AWS IoT Greengrass용 IDT에 필요한 권한을 연결합니다.

   1. IAM 사용자를 생성합니다. 이 예제 설정에서 사용자의 이름은 `IDTGreengrassUser`입니다.

      ```
      aws iam create-user --user-name IDTGreengrassUser
      ```

   1. 2단계에서 생성한 `IDTGreengrassIAMPermissions` 정책을 IAM 사용자에게 연결합니다. 명령의 *<account-id>*를의 ID로 바꿉니다 AWS 계정.

      ```
      aws iam attach-user-policy --user-name IDTGreengrassUser --policy-arn arn:aws:iam::<account-id>:policy/IDTGreengrassIAMPermissions
      ```

1. 사용자에 대한 비밀 액세스 키를 만듭니다.

   ```
   aws iam create-access-key --user-name IDTGreengrassUser
   ```

   출력을 안전한 위치에 저장합니다. 나중에이 정보를 사용하여 AWS 자격 증명 파일을 구성합니다.

1. <a name="aws-account-config-next-steps"></a>다음 단계: [물리적 장치](device-config-setup.md)를 구성합니다.

### AWS IoT Device Tester 권한
<a name="gg-idt-managed-policy"></a>

다음 정책은 AWS IoT Device Tester 권한을 설명합니다.

AWS IoT Device Tester 에서는 버전 확인 및 자동 업데이트 기능에 이러한 권한이 필요합니다.
+ `iot-device-tester:SupportedVersion`

  지원되는 제품, 테스트 제품군 및 IDT 버전 목록을 가져올 수 있는 AWS IoT Device Tester 권한을 부여합니다.
+ `iot-device-tester:LatestIdt`

  다운로드할 수 있는 최신 IDT 버전을 가져올 수 있는 AWS IoT Device Tester 권한을 부여합니다.
+ `iot-device-tester:CheckVersion`

  IDT, 테스트 제품군 및 제품의 버전 호환성을 확인할 수 있는 AWS IoT Device Tester 권한을 부여합니다.
+ `iot-device-tester:DownloadTestSuite`

  테스트 제품군 업데이트를 다운로드할 수 있는 AWS IoT Device Tester 권한을 부여합니다.

AWS IoT Device Tester 는 선택적 지표 보고에도 다음 권한을 사용합니다.
+ `iot-device-tester:SendMetrics`

   AWS IoT Device Tester 내부 사용에 대한 지표 AWS 를 수집할 수 있는 권한을 부여합니다. 이 권한을 생략하면 이러한 지표가 수집되지 않습니다.

# IDT 테스트를 실행하도록 장치 구성
<a name="device-config-setup"></a>

IDT에서 디바이스 자격 검증을 위한 테스트를 실행되도록 하려면 디바이스에 액세스하도록 호스트 컴퓨터를 구성하고 디바이스에 대한 사용자 권한을 구성해야 합니다.

## 호스트 컴퓨터의 Java 설치
<a name="install-java-for-idt"></a>

IDT v4.2.0부터에 대한 선택적 검증 테스트를 실행하려면 Java가 AWS IoT Greengrass 필요합니다.

Java 버전 8 이상을 사용할 수 있습니다. [Amazon Corretto](https://aws.amazon.com/corretto/) 또는 [OpenJDK](https://openjdk.java.net/) 장기 지원 버전을 사용하는 것이 좋습니다. 버전 8 이상이 필요합니다.

## 테스트 대상 장치에 액세스하도록 호스트 컴퓨터 구성
<a name="configure-host"></a>

IDT는 호스트 컴퓨터에서 실행되며, SSH를 사용하여 장치에 연결할 수 있어야 합니다. IDT가 테스트 대상 장치에 대한 SSH 액세스를 획득하도록 허용하는 옵션은 두 가지가 있습니다.

1. 여기에서 설명하는 지침에 따라 SSH 키 페어를 생성하고 해당 키가 암호를 지정하지 않고 테스트 대상 장치에 로그인할 수 있도록 권한을 부여합니다.

1. `device.json` 파일의 각 장치에 사용자 이름 및 암호를 제공합니다. 자세한 내용은 [device.json 구성](set-config.md#device-config) 단원을 참조하십시오.

임의의 SSL 구현을 사용하여 SSH 키를 생성할 수 있습니다. 다음 지침은 [SSH-KEYGEN](https://www.ssh.com/ssh/keygen/) 또는 [ PuTTYgen](https://www.ssh.com/ssh/putty/windows/puttygen)(Windows)을 사용하는 방법을 보여줍니다. 다른 SSL 구현을 사용 중인 경우 해당 구현에 대한 설명서를 참조하십시오.

IDT는 SSH 키를 사용하여 테스트 대상 장치에 인증합니다.

**SSH-KEYGEN을 사용하여 SSH 키를 생성하려면**

1. SSH 키를 생성합니다,

   공개 SSH **ssh-keygen** 명령을 사용하여 SSH 키 페어를 생성할 수 있습니다. 이미 호스트 컴퓨터에 SSH 키 페어가 있는 경우 IDT 전용 SSH 키 페어를 생성하는 것이 가장 좋습니다. 그러면 테스트를 완료한 후 호스트 컴퓨터가 더 이상 암호 없이 장치에 연결할 수 없습니다. 또한 원하는 사용자만 원격 장치에 액세스할 수 있도록 제한할 수 있습니다.
**참고**  
Windows에는 SSH 클라이언트가 설치되어 있지 않습니다. Windows에 SSH 클라이언트 설치에 대한 내용은 [SSH 클라이언트 소프트웨어](https://www.ssh.com/ssh/#sec-Download-client-software) 다운로드를 참조하십시오.

   **ssh-keygen** 명령은 키 페어 저장 이름과 경로를 입력하라는 메시지를 표시합니다. 기본적으로 키 페어 파일은 `id_rsa`(프라이빗 키) 및 `id_rsa.pub`(퍼블릭 키)로 이름 지정됩니다. macOS와 Linux에서 이러한 파일의 기본 위치는 `~/.ssh/`입니다. Windows에서 기본 위치는 `C:\Users\<user-name>\.ssh`입니다.

   메시지가 표시되면 SSH 키를 보호하기 위한 키 구문을 입력합니다. 자세한 내용은 [새 SSH 키 생성](https://www.ssh.com/ssh/keygen/)을 참조하십시오.

1. 테스트 대상 장치에 권한 있는 SSH 키를 추가합니다,

   IDT는 SSH 프라이빗 키를 사용하여 테스트 대상 장치에 로그인해야 합니다. 테스트 대상 장치에 로그인하도록 SSH 프라이빗 키를 승인하려면 호스트 컴퓨터의 **ssh-copy-id** 명령을 사용합니다. 이 명령은 테스트 대상 장치에서 `~/.ssh/authorized_keys` 파일에 퍼블릭 키를 추가합니다. 예제:

   **\$1 ssh-copy-id *<remote-ssh-user>*@*<remote-device-ip>***

   여기서 *remote-ssh-user*는 테스트 대상 장치에 로그인하는 데 사용하는 사용자 이름이고, *remote-device-ip*는 테스트를 실행할 테스트 대상 장치의 IP 주소입니다. 예제:

   **ssh-copy-id pi@192.168.1.5**

   메시지가 표시되면 **ssh-copy-id** 명령에서 지정한 사용자 이름에 대한 암호를 입력합니다.

   **ssh-copy-id**는 퍼블릭 키가 `id_rsa.pub`로 이름 지정되고 기본 위치에 저장된다고 가정합니다(macOS와 Linux에서는 `~/.ssh/`, Windows에서는 `C:\Users\<user-name>\.ssh`) 퍼블릭 키의 이름을 다르게 지정하거나 다른 위치에 저장한 경우, **ssh-copy-id**에 **-i** 옵션을 사용하여 SSH 퍼블릭 키의 정규화된 경로를 지정해야 합니다(예: **ssh-copy-id -i \$1/my/path/myKey.pub**). SSH 키 생성 및 퍼블릭 키 복사에 대한 자세한 내용은 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)를 참조하십시오.

**PuTTYgen을 사용하여 SSH 키를 생성하려면(Windows만 해당)**

1. 테스트 대상 장치에 OpenSSH 서버 및 클라이언트가 설치되어 있는지 확인합니다. 자세한 내용은 [OpenSSH](https://www.openssh.com/)를 참조하십시오.

1. 테스트 대상 장치에 [PuTTYgen](https://www.puttygen.com/)을 설치합니다.

1. PuTTYgen을 엽니다.

1. **생성**을 선택하고 마우스를 상자 안으로 이동하여 프라이빗 키를 생성합니다.

1. **Conversions(변환)** 메뉴에서 **Export OpenSSH key(OpenSSH 키 내보내기)**를 선택하고 프라이빗 키를 `.pem` 파일 확장명으로 저장합니다.

1. 테스트 대상 장치에서 `/home/<user>/.ssh/authorized_keys` 파일에 퍼블릭 키를 추가합니다.

   1. PuTTYgen 창에서 퍼블릭 키 텍스트를 복사합니다.

   1. PuTTY를 사용하여 테스트 대상 장치에서 세션을 생성합니다.

      1. 명령 프롬프트 또는 Windows Powershell 창에서 다음 명령을 실행합니다.

          **C:/*<path-to-putty>*/putty.exe -ssh *<user>*@*<dut-ip-address>* ** 

      1. 메시지가 표시되면 장치의 암호를 입력합니다.

      1. vi 또는 다른 텍스트 편집기를 사용하여 테스트 대상 장치의 `/home/<user>/.ssh/authorized_keys` 파일에 퍼블릭 키를 추가합니다.

1. 각 테스트 대상 장치에 대해 사용자 이름, IP 주소, 방금 호스트 컴퓨터에 저장한 프라이빗 키 파일의 경로로 `device.json` 파일을 업데이트합니다. 자세한 내용은 [device.json 구성](set-config.md#device-config) 단원을 참조하십시오. 프라이빗 키에 전체 경로 및 파일 이름을 제공하고 슬래시('/')를 사용해야 합니다. 예를 들어 Windows 경로 `C:\DT\privatekey.pem`의 경우 `device.json` 파일에 `C:/DT/privatekey.pem`을 사용합니다.

## Windows 디바이스에 대한 사용자 자격 증명 구성
<a name="configure-windows-user-for-idt"></a>

Windows 기반 디바이스를 검증하려면 다음 사용자에 대해 테스트 중인 디바이스의 LocalSystem 계정에서 사용자 자격 증명을 구성해야 합니다.
+ 기본 Greengrass 사용자(`ggc_user`).
+ 테스트 중인 디바이스에 연결하는 데 사용하는 사용자입니다. [`device.json` 파일](set-config.md#device-config)에서 이 사용자를 구성합니다.

테스트 중인 디바이스의 LocalSystem 계정에서 각 사용자를 생성한 다음에 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장해야 합니다.<a name="set-up-windows-device-environment-procedure"></a>

**Windows 디바이스에서 사용자를 구성하는 방법**

1. 관리자 권한으로 Windows 명령 프롬프트(`cmd.exe`)를 엽니다.

1. Windows 디바이스의 LocalSystem 계정에서 사용자를 생성합니다. 생성하려는 각 사용자에 대해 다음 명령을 실행합니다. 기본 Greengrass 사용자의 경우 *user-name*을 `ggc_user`로 바꿉니다. *암호*를 안전한 암호로 바꿉니다.

   ```
   net user /add user-name password
   ```

1. Microsoft에서 [PsExec 유틸리티](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)를 다운로드하여 디바이스에 설치합니다.

1. PsExec 유틸리티를 사용하여 기본 사용자의 사용자 이름과 암호를 LocalSystem 계정의 Credential Manager 인스턴스에 저장합니다.

   Credential Manager에서 구성하려는 각 사용자에 대해 다음 명령을 실행합니다. 기본 Greengrass 사용자의 경우 *user-name*을 `ggc_user`로 바꿉니다. 이전에 설정한 사용자의 암호로 *암호*를 바꿉니다.

   ```
   psexec -s cmd /c cmdkey /generic:user-name /user:user-name /pass:password
   ```

   **PsExec License Agreement**가 열리면 **Accept**를 선택하여 라이선스에 동의하고 명령을 실행합니다.
**참고**  
Windows 디바이스에서는 LocalSystem 계정에서 Greengrass nucleus가 실행되며, PsExec 유틸리티를 사용하여 사용자 정보를 LocalSystem 계정에 저장해야 합니다. Credential Manager 애플리케이션을 사용하면 이 정보가 LocalSystem 계정 대신 현재 로그인한 사용자의 Windows 계정에 저장됩니다.

## 장치에서 사용자 권한 구성
<a name="root-access"></a>

IDT는 테스트 대상 장치에서 다양한 디렉터리와 파일에 대해 작업을 수행합니다. 이러한 작업 중 일부는 승격된 권한(**sudo** 사용)이 필요합니다. 이러한 작업을 자동화하려면 IDT for AWS IoT Greengrass V2가 암호를 입력하라는 메시지 없이 sudo로 명령을 실행할 수 있어야 합니다.

암호 입력 메시지 없이 sudo 액세스를 허용하려면 테스트 대상 장치에서 다음 단계를 수행합니다.

**참고**  
`username`은 IDT가 테스트 대상 장치에 액세스하는 데 사용하는 SSH 사용자를 나타냅니다.

**sudo 그룹에 사용자를 추가하려면**

1. 테스트 대상 장치에서 `sudo usermod -aG sudo <username>`을 실행합니다.

1. 변경 사항을 적용하려면 로그아웃했다가 다시 로그인하십시오.

1. 사용자 이름이 성공적으로 추가되었는지 확인하려면 **sudo echo test**를 실행합니다. 암호 입력 메시지가 표시되지 않으면 사용자가 제대로 구성된 것입니다.

1. `/etc/sudoers` 파일을 열고 파일 끝에 다음 줄을 추가합니다.

   `<ssh-username> ALL=(ALL) NOPASSWD: ALL`

## 사용자 지정 토큰 교환 역할 구성
<a name="configure-custom-tes-role-for-idt"></a>

테스트 중인 디바이스가 AWS 리소스와 상호 작용하기 위해 수임하는 토큰 교환 역할로 사용자 지정 IAM 역할을 사용하도록 선택할 수 있습니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서의 [IAM 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) 섹션을 참조하세요.**

IDT에 사용자 지정 IAM 역할 사용을 허용하려면 다음과 같은 요구 사항을 충족해야 합니다. 이 역할에 필요한 최소 정책 작업만 추가하는 것이 좋습니다.
+ [userdata.json](set-config.md#custom-token-exchange-role-idt) 구성 파일을 업데이트하여 `GreengrassV2TokenExchangeRole` 파라미터를 `true`로 설정해야 합니다.
+ 사용자 지정 IAM 역할은 다음 최소 신뢰 정책으로 구성되어야 합니다.

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement":[
        {
           "Effect":"Allow",
           "Principal":{
              "Service":[
                 "credentials.iot.amazonaws.com",
                 "lambda.amazonaws.com", 
                 "sagemaker.amazonaws.com" 
              ]
           },
           "Action":"sts:AssumeRole"
        }
     ]
  }
  ```

------
+ 사용자 지정 IAM 역할은 다음 최소 권한 정책으로 구성되어야 합니다.

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement":[
        {
           "Effect":"Allow",
           "Action":[
              "iot:DescribeCertificate",
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "iot:Connect",
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive",
              "iot:ListThingPrincipals", 
              "iot:GetThingShadow",
              "iot:UpdateThingShadow",
              "s3:GetBucketLocation",
              "s3:GetObject",
              "s3:PutObject",
              "s3:AbortMultipartUpload",
              "s3:ListMultipartUploadParts"
           ],
           "Resource":"*"
        }
     ]
  }
  ```

------
+ 사용자 지정 IAM 역할의 이름은 테스트 사용자의 IAM 권한에서 지정하는 IAM 역할 리소스와 일치해야 합니다. 기본적으로 [테스트 사용자 정책](dev-tst-prereqs.md#configure-idt-permissions)에서는 역할 이름에 `idt-` 접두사가 있는 IAM 역할에 대한 액세스가 허용됩니다. IAM 역할 이름에 이 접두사가 사용되지 않으면 다음 예제와 같이 테스트 사용자 정책의 `roleAliasResources` 문과 `passRoleForResources` 문에 `arn:aws:iam::*:role/custom-iam-role-name` 리소스를 추가합니다.

    
**Example `passRoleForResources` 명령문**  

  ```
  {
     "Sid":"passRoleForResources",
     "Effect":"Allow",
     "Action":"iam:PassRole",
     "Resource":"arn:aws:iam::*:role/custom-iam-role-name",
     "Condition":{
        "StringEquals":{
           "iam:PassedToService":[
              "iot.amazonaws.com",
              "lambda.amazonaws.com",
              "greengrass.amazonaws.com"
           ]
        }
     }
  }
  ```  
**Example `roleAliasResources` 명령문**  

  ```
  {
     "Sid":"roleAliasResources",
     "Effect":"Allow",
     "Action":[
        "iot:CreateRoleAlias",
        "iot:DescribeRoleAlias",
        "iot:DeleteRoleAlias",
        "iot:TagResource",
        "iam:GetRole"
     ],
     "Resource":[
        "arn:aws:iot:*:*:rolealias/idt-*",
        "arn:aws:iam::*:role/custom-iam-role-name"
     ]
  }
  ```

## 선택적 기능을 테스트하도록 장치 구성
<a name="optional-feature-config"></a>

이 섹션에는 선택적 Docker 및 기계 학습(ML) 특성에 대한 IDT 테스트 실행에 대한 디바이스 요구 사항이 설명되어 있습니다. ML 특성은 IDT v4.9.3에서만 지원됩니다. 이러한 특성을 테스트하려는 경우에만 디바이스에서 이러한 요구 사항이 충족되는지 확인해야 합니다. 그렇지 않은 경우 [AWS IoT Greengrass 검증 제품군을 실행하도록 IDT 설정 구성](set-config.md)를 계속 진행합니다.

**Topics**
+ [Docker 검증 요구 사항](#idt-config-docker-components)
+ [ML 검증 요구 사항](#idt-config-ml-components)
+ [HSM 검증 요구 사항](#idt-config-hsm-components)

### Docker 검증 요구 사항
<a name="idt-config-docker-components"></a>

IDT for AWS IoT Greengrass V2는 디바이스가 AWS제공 Docker [애플리케이션 관리자 구성 요소를 사용하여 사용자 지정 Docker](docker-application-manager-component.md) 컨테이너 구성 요소를 사용하여 실행할 수 있는 Docker 컨테이너 이미지를 다운로드할 수 있는지 검증하는 Docker 검증 테스트를 제공합니다. 사용자 지정 Docker 구성 요소 생성에 대한 내용은 [Docker 컨테이너 실행](run-docker-container.md) 섹션을 참조하세요.

Docker 검증 테스트를 실행하려면 테스트 중인 디바이스에서 Docker 애플리케이션 관리자 구성 요소가 배포되도록 다음과 같은 요구 사항이 충족되어야 합니다.
+ <a name="docker-engine-requirement"></a>Greengrass 코어 디바이스에 [Docker Engine](https://docs.docker.com/engine/) 1.9.1 이상이 설치되어 있어야 합니다. 버전 20.10은 AWS IoT Greengrass 코어 소프트웨어에서 작동하는 것으로 확인된 최신 버전입니다. Docker 컨테이너를 실행하는 구성 요소를 배포하기 전에 코어 디바이스에 직접 Docker를 설치해야 합니다.
+ <a name="docker-daemon-requirement"></a>이 구성 요소를 배포하기 전에 Docker 대몬이 코어 디바이스에서 시작되어 실행되고 있습니다.
+ <a name="docker-user-permissions-requirement"></a>Docker 컨테이너 구성 요소를 실행하는 시스템 사용자에게 루트 또는 관리자 권한이 있거나 루트 또는 관리자가 아닌 사용자로 실행하도록 Docker를 구성해야 합니다.
  + Linux 디바이스에서는 `docker` 그룹에 사용자를 추가하여 `sudo` 없이 `docker` 명령을 직접적으로 호출할 수 있습니다.
  + Windows 디바이스에서는 `docker-users` 그룹에 사용자를 추가하여 관리자 권한 없이 `docker` 명령을 직접적으로 호출할 수 있습니다.

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

  Docker 컨테이너 구성 요소를 실행하는 데 사용하는 `ggc_user` 또는 루트 사용자가 아닌 사용자를 `docker` 그룹에 추가하려면 다음 명령을 실행합니다.

  ```
  sudo usermod -aG docker ggc_user
  ```

  자세한 내용은 [루트 사용자가 아닌 사용자로 Docker 관리](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)를 참조하세요.

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

  `ggc_user` 또는 Docker 컨테이너 구성 요소를 실행하는 데 사용하는 사용자를 `docker-users` 그룹에 추가하려면 관리자로 다음 명령을 실행합니다.

  ```
  net localgroup docker-users ggc_user /add
  ```

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

  `ggc_user` 또는 Docker 컨테이너 구성 요소를 실행하는 데 사용하는 사용자를 `docker-users` 그룹에 추가하려면 관리자로 다음 명령을 실행합니다.

  ```
  Add-LocalGroupMember -Group docker-users -Member ggc_user
  ```

------

### ML 검증 요구 사항
<a name="idt-config-ml-components"></a>

**참고**  
기계 학습 특성은 IDT v4.9.3에서만 지원됩니다.

IDT for AWS IoT Greengrass V2는 디바이스가 AWS제공 [기계 학습 구성 요소를](machine-learning-components.md) 사용하여 [딥 러닝 런타임](https://github.com/neo-ai/neo-ai-dlr) 또는 [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) ML 프레임워크를 사용하여 로컬에서 ML 추론을 수행할 수 있는지 검증하는 ML 검증 테스트를 제공합니다. Greengrass 디바이스의 ML 추론 실행에 대한 자세한 내용은 [기계 학습 추론 수행](perform-machine-learning-inference.md) 섹션을 참조하세요.

ML 검증 테스트를 실행하려면 테스트 중인 디바이스에서 기계 학습 구성 요소가 배포되도록 다음과 같은 요구 사항이 충족되어야 합니다.<a name="ml-component-requirements"></a>
+ Amazon Linux 2 또는 Ubuntu 18.04를 실행 중인 Greengrass 코어 디바이스의 경우 [GNU C 라이브러리](https://www.gnu.org/software/libc/)(glibc) 버전 2.27 이상이 디바이스에 설치되어 있어야 합니다.
+ Raspberry Pi와 같은 Armv7l 디바이스에는 디바이스에 OpenCV-Python에 대한 종속성이 설치되어 있어야 합니다. 다음 명령을 실행하여 종속성을 설치합니다.

  ```
  sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
  ```
+ Raspberry Pi OS Bullseye를 실행하는 Raspberry Pi 디바이스는 다음과 같은 요구 사항을 충족해야 합니다.
  + 디바이스에 NumPy 1.22.4 이상이 설치되어 있어야 합니다. Raspberry Pi OS Bullseye에는 이전 버전의 NumPy가 포함되어 있으므로 다음 명령을 실행하여 디바이스에서 NumPy를 업그레이드할 수 있습니다.

    ```
    pip3 install --upgrade numpy
    ```
  + 디바이스에서 레거시 카메라 스택이 활성화되어 있어야 합니다. Raspberry Pi OS Bullseye에는 기본적으로 활성화되어 있지만 호환되지 않는 새 카메라 스택이 포함되어 있으므로 레거시 카메라 스택을 활성화해야 합니다.<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**레거시 카메라 스택을 활성화하려면**

    1. 다음 명령을 실행하여 Raspberry Pi 구성 도구를 엽니다.

       ```
       sudo raspi-config
       ```

    1. **인터페이스 옵션**을 선택합니다.

    1. **레거시 카메라**를 선택하여 레거시 카메라 스택을 활성화합니다.

    1. Raspberry Pi를 재부팅합니다.

### HSM 검증 요구 사항
<a name="idt-config-hsm-components"></a>

AWS IoT Greengrass 는 디바이스의 [PKCS 하드웨어 보안 모듈(HSM)과 통합하기 위한 PKCS\$111 공급자 구성 요소를](pkcs11-provider-component.md) 제공합니다. HSM 설정은 디바이스 및 선택한 HSM 모듈에 따라 다릅니다. [IDT 구성 설정](set-config.md)에 문서화되어 있는 대로 예상 HSM 구성이 제공되는 한 이 선택적 특성 검증 테스트 실행에 필요한 정보가 IDT에 있습니다.

# AWS IoT Greengrass 검증 제품군을 실행하도록 IDT 설정 구성
<a name="set-config"></a>

테스트를 실행하기 전에 호스트 컴퓨터에서 AWS 자격 증명 및 디바이스에 대한 설정을 구성해야 합니다.

## config.json에서 AWS 자격 증명 구성
<a name="cfg-aws-gg"></a>

`<device_tester_extract_location>/configs/config.json` 파일에서 IAM 사용자 보안 인증을 구성해야 합니다. 에서 생성된 IDT for AWS IoT Greengrass V2 사용자의 자격 증명을 사용합니다[생성 및 구성 AWS 계정](dev-tst-prereqs.md#config-aws-account-for-idt). 두 가지 방법 중 하나로 자격 증명을 지정할 수 있습니다.
+ 자격 증명 파일에서
+ 환경 변수로

### AWS 자격 증명 파일을 사용하여 자격 증명 구성
<a name="config-cred-file"></a>

IDT는 AWS CLI와 동일한 자격 증명 파일을 사용합니다. 자세한 내용은 [구성 및 자격 증명 파일](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)을 참조하십시오.

자격 증명 파일의 위치는 사용하는 운영 체제에 따라 달라집니다.
+ macOS, Linux의 경우: `~/.aws/credentials`
+ Windows: `C:\Users\UserName\.aws\credentials`

다음 형식으로 자격 AWS 증명을 `credentials` 파일에 추가합니다.

```
[default]
aws_access_key_id = <your_access_key_id>
aws_secret_access_key = <your_secret_access_key>
```

`credentials` 파일의 AWS 자격 증명을 사용하도록 IDT for AWS IoT Greengrass V2를 구성하려면 다음과 같이 `config.json` 파일을 편집합니다.

```
{
  "awsRegion": "region",
  "auth": {
    "method": "file",
    "credentials": {
      "profile": "default"
    }
  }
}
```

**참고**  
`default` AWS 프로필을 사용하지 않는 경우 `config.json` 파일에서 프로필 이름을 변경해야 합니다. 자세한 내용은 [명명된 프로필](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)을 참조하십시오.

### 환경 변수를 사용하여 AWS 자격 증명 구성
<a name="config-env-vars"></a>

환경 변수는 운영 체제에서 유지 관리하고 시스템 명령에서 사용하는 변수입니다. 이들은 SSH 세션을 닫으면 저장되지 않습니다. IDT for AWS IoT Greengrass V2는 `AWS_ACCESS_KEY_ID` 및 `AWS_SECRET_ACCESS_KEY` 환경 변수를 사용하여 AWS 자격 증명을 저장할 수 있습니다.

Linux, macOS 또는 Unix에서 이러한 변수를 설정하려면 **export**를 사용합니다.

```
export AWS_ACCESS_KEY_ID=<your_access_key_id>
export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

Windows에서 이러한 변수를 설정하려면 **set**을 사용합니다.

```
set AWS_ACCESS_KEY_ID=<your_access_key_id>
set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
```

환경 변수를 사용하도록 IDT를 구성하려면 `config.json` 파일에서 `auth` 섹션을 편집합니다. 다음 예를 참고하세요

```
{
  "awsRegion": "region",
  "auth": {
    "method": "environment"
  }
}
```

## device.json 구성
<a name="device-config"></a>

**참고**  
IDT v4.9.3은 `ml`, `docker`, `streamManagement` 기능 테스트를 지원합니다. IDT v4.9.4 이상 버전은 `docker` 테스트를 지원합니다. 이러한 기능을 테스트하지 않으려면 해당 값을 `no`로 설정합니다.

자격 AWS 증명 외에도 IDT for AWS IoT Greengrass V2에는 테스트가 실행되는 디바이스에 대한 정보가 필요합니다. IP 주소, 로그인 정보, 운영 체제, CPU 아키텍처가 예제 정보가 될 수 있습니다.

` <device_tester_extract_location>/configs/device.json`에 있는 `device.json` 템플릿을 사용하여 이 정보를 제공해야 합니다.

------
#### [ IDT v4.9.3 ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "arch",
        "value": "x86_64 | armv6l | armv7l | aarch64"
      },
      {
        "name": "ml",
        "value": "dlr | tensorflowlite | dlr,tensorflowlite | no"
      },
      {
        "name": "docker",
        "value": "yes | no"
      },
      {
        "name": "streamManagement",
        "value": "yes | no"
      }, 
      {
        "name": "hsi", 
        "value": "hsm | no" 
      }
    ],
    "devices": [
      {
        "id": "<device-id>",
        "operatingSystem": "Linux | Windows",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": 22,
          "publicKeyPath": "<public-key-path>",
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

**참고**  
`method`가 `pki`로 설정된 경우에만 `privKeyPath`를 지정합니다.  
`method`가 `password`로 설정된 경우에만 `password`를 지정합니다.

여기에 설명된 대로 값을 포함하는 모든 속성은 필수입니다.

`id`  
*디바이스 풀*이라고 하는 디바이스 모음을 고유하게 식별하는 사용자 정의 영숫자 ID입니다. 풀에 속한 디바이스의 하드웨어는 서로 동일해야 합니다. 테스트 제품군을 실행할 때 풀에 있는 디바이스는 워크로드를 병렬화하는 데 사용됩니다. 다양한 테스트를 실행하기 위해 여러 디바이스가 사용됩니다.

`sku`  
테스트 대상 장치를 고유하게 식별하는 영숫자 값입니다. SKU는 적격 보드를 추적하는 데 사용됩니다.  
 AWS Partner 디바이스 카탈로그에 디바이스를 나열하려면 여기에서 지정하는 SKU가 나열 프로세스에서 사용하는 SKU와 일치해야 합니다.

`features`  
장치의 지원되는 기능이 포함된 배열입니다. 모든 기능이 필요합니다.    
`arch`  
테스트 실행이 검증하는 지원되는 운영 체제 아키텍처. 유효값은 다음과 같습니다.  
+ `x86_64`
+ `armv6l`
+ `armv7l`
+ `aarch64`  
`ml`  
<a name="description-ml"></a>디바이스가 AWS제공 기계 학습(ML) 구성 요소를 사용하는 데 필요한 모든 기술 종속성을 충족하는지 확인합니다.  
또한 이 기능을 활성화하면 <a name="description-ml-inference-phrase"></a>디바이스가 [딥 러닝 런타임](https://github.com/neo-ai/neo-ai-dlr) 및 [TensorFlow Lite](https://www.tensorflow.org/lite/guide/python) ML 프레임워크를 사용하여 ML 추론을 수행할 수 있는지 검증합니다.  
유효한 값은 `dlr` 및 `tensorflowlite` 또는 `no`의 모든 조합입니다.  
`docker`  
<a name="description-docker"></a>디바이스가 AWS제공 Docker 애플리케이션 관리자(`aws.greengrass.DockerApplicationManager`) 구성 요소를 사용하는 데 필요한 모든 기술 종속성을 충족하는지 확인합니다.  
또한 이 기능을 활성화하면 <a name="description-docker-app-manager-qual-phrase"></a>디바이스가 Amazon ECR에서 Docker 컨테이너 이미지를 다운로드할 수 있는지 검증합니다.  
유효한 값은 `yes` 또는 `no`의 모든 조합입니다.  
`streamManagement`  
<a name="description-sm"></a>디바이스가 [AWS IoT Greengrass 스트림 관리자](manage-data-streams.md)를 다운로드, 설치 및 실행할 수 있는지 확인합니다.  
유효한 값은 `yes` 또는 `no`의 모든 조합입니다.  
`hsi`  
<a name="description-hsi"></a>디바이스가 하드웨어 보안 모듈(HSM)에 저장된 프라이빗 키와 인증서를 사용하여 AWS IoT 및 AWS IoT Greengrass 서비스에 대한 연결을 인증할 수 있는지 확인합니다. 또한이 테스트는 AWS제공 [PKCS\$111 공급자 구성 요소가](pkcs11-provider-component.md) 공급업체 제공 PKCS\$111 라이브러리를 사용하여 HSM과 인터페이스할 수 있는지 확인합니다. 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 단원을 참조하십시오.  
유효한 값은 `hsm` 또는 `no`입니다.
`hsi` 테스트는 IDT v4.9.3 이상 버전에서만 사용할 수 있습니다.

`devices.id`  
테스트 대상 디바이스의 고유한 사용자 정의 식별자입니다.

`devices.operatingSystem`  
디바이스 운영 체제. 지원되는 값은 `Linux` 및 `Windows`입니다.

`connectivity.protocol`  
이러한 디바이스와 통신하는 데 사용되는 통신 프로토콜입니다. 현재 지원되는 유일한 값은 물리적 디바이스에 대한 `ssh` 값입니다.

`connectivity.ip`  
테스트 대상 디바이스의 IP 입니다.  
<a name="connectivity-protocol-ssh-only"></a>이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.

`connectivity.port`  
선택 사항. SSH 연결하는 데 사용하는 포트 번호입니다.  
기본값은 4입니다.  
이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.

`connectivity.publicKeyPath`  
선택 사항. 테스트 대상 디바이스에 대한 연결을 인증하는 데 사용되는 퍼블릭 키의 전체 경로입니다.  
`publicKeyPath`를 지정하면 IDT가 테스트 대상 디바이스에 SSH 연결을 설정할 때 디바이스의 퍼블릭 키를 검증합니다. 이 값을 지정하지 않으면 IDT는 SSH 연결을 생성하지만 디바이스의 퍼블릭 키를 확인하지는 않습니다.  
퍼블릭 키의 경로를 지정하고 안전한 방법을 사용하여 이 퍼블릭 키를 가져오는 것이 좋습니다. 표준 명령줄 기반 SSH 클라이언트의 경우 퍼블릭 키는 `known_hosts` 파일에 제공됩니다. 별도의 퍼블릭 키 파일을 지정하는 경우 이 파일은 `known_hosts` 파일과 동일한 형식, 즉, ` ip-address key-type public-key`을 사용해야 합니다. 동일한 IP 주소가 있는 항목이 여러 개 있는 경우 IDT에서 사용하는 키 유형에 대한 항목이 파일의 다른 항목보다 앞에 있어야 합니다.

`connectivity.auth`  
연결에 대한 인증 정보입니다.  
<a name="connectivity-protocol-ssh-only"></a>이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.    
`connectivity.auth.method`  
지정된 연결 프로토콜을 통해 디바이스에 액세스하는 데 사용되는 인증 방법입니다.  
지원되는 값은 다음과 같습니다.  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
인증에 사용되는 자격 증명입니다.    
`connectivity.auth.credentials.password`  
테스트 대상 디바이스에 로그인하기 위해 사용하는 암호입니다.  
이 값은 `connectivity.auth.method`가 `password`로 설정된 경우에만 적용됩니다.  
`connectivity.auth.credentials.privKeyPath`  
테스트 대상 디바이스에 로그인하는 데 사용하는 프라이빗 키의 전체 경로입니다.  
이 값은 `connectivity.auth.method`가 `pki`로 설정된 경우에만 적용됩니다.  
`connectivity.auth.credentials.user`  
테스트 대상 디바이스에 로그인하기 위한 사용자 이름입니다.

------
#### [ IDT v4.9.4 ]

```
[
  {
    "id": "<pool-id>",
    "sku": "<sku>",
    "features": [
      {
        "name": "arch",
        "value": "x86_64 | armv6l | armv7l | aarch64"
      },
      {
        "name": "docker",
        "value": "yes | no"
      }, 
      {
        "name": "hsi", 
        "value": "hsm | no" 
      }
    ],
    "devices": [
      {
        "id": "<device-id>",
        "operatingSystem": "Linux | Windows",
        "connectivity": {
          "protocol": "ssh",
          "ip": "<ip-address>",
          "port": 22,
          "publicKeyPath": "<public-key-path>",
          "auth": {
            "method": "pki | password",
            "credentials": {
              "user": "<user-name>",
              "privKeyPath": "/path/to/private/key",
              "password": "<password>"
            }
          }
        }
      }
    ]
  }
]
```

**참고**  
`method`가 `pki`로 설정된 경우에만 `privKeyPath`를 지정합니다.  
`method`가 `password`로 설정된 경우에만 `password`를 지정합니다.

여기에 설명된 대로 값을 포함하는 모든 속성은 필수입니다.

`id`  
*디바이스 풀*이라고 하는 디바이스 모음을 고유하게 식별하는 사용자 정의 영숫자 ID입니다. 풀에 속한 디바이스의 하드웨어는 서로 동일해야 합니다. 테스트 제품군을 실행할 때 풀에 있는 디바이스는 워크로드를 병렬화하는 데 사용됩니다. 다양한 테스트를 실행하기 위해 여러 디바이스가 사용됩니다.

`sku`  
테스트 대상 장치를 고유하게 식별하는 영숫자 값입니다. SKU는 적격 보드를 추적하는 데 사용됩니다.  
 AWS Partner 디바이스 카탈로그에 디바이스를 나열하려면 여기에서 지정하는 SKU가 나열 프로세스에서 사용하는 SKU와 일치해야 합니다.

`features`  
장치의 지원되는 기능이 포함된 배열입니다. 모든 기능이 필요합니다.    
`arch`  
테스트 실행이 검증하는 지원되는 운영 체제 아키텍처. 유효값은 다음과 같습니다.  
+ `x86_64`
+ `armv6l`
+ `armv7l`
+ `aarch64`  
`docker`  
<a name="description-docker"></a>디바이스가 AWS제공 Docker 애플리케이션 관리자(`aws.greengrass.DockerApplicationManager`) 구성 요소를 사용하는 데 필요한 모든 기술 종속성을 충족하는지 확인합니다.  
또한 이 기능을 활성화하면 <a name="description-docker-app-manager-qual-phrase"></a>디바이스가 Amazon ECR에서 Docker 컨테이너 이미지를 다운로드할 수 있는지 검증합니다.  
유효한 값은 `yes` 또는 `no`의 모든 조합입니다.  
`hsi`  
<a name="description-hsi"></a>디바이스가 하드웨어 보안 모듈(HSM)에 저장된 프라이빗 키와 인증서를 사용하여 AWS IoT 및 AWS IoT Greengrass 서비스에 대한 연결을 인증할 수 있는지 확인합니다. 또한이 테스트는 AWS제공 [PKCS\$111 공급자 구성 요소가](pkcs11-provider-component.md) 공급업체 제공 PKCS\$111 라이브러리를 사용하여 HSM과 인터페이스할 수 있는지 확인합니다. 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 단원을 참조하십시오.  
유효한 값은 `hsm` 또는 `no`입니다.
`hsi` 테스트는 IDT v4.9.3 이상 버전에서만 사용할 수 있습니다.

`devices.id`  
테스트 대상 디바이스의 고유한 사용자 정의 식별자입니다.

`devices.operatingSystem`  
디바이스 운영 체제. 지원되는 값은 `Linux` 및 `Windows`입니다.

`connectivity.protocol`  
이러한 디바이스와 통신하는 데 사용되는 통신 프로토콜입니다. 현재 지원되는 유일한 값은 물리적 디바이스에 대한 `ssh` 값입니다.

`connectivity.ip`  
테스트 대상 디바이스의 IP 입니다.  
<a name="connectivity-protocol-ssh-only"></a>이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.

`connectivity.port`  
선택 사항. SSH 연결하는 데 사용하는 포트 번호입니다.  
기본값은 4입니다.  
이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.

`connectivity.publicKeyPath`  
선택 사항. 테스트 대상 디바이스에 대한 연결을 인증하는 데 사용되는 퍼블릭 키의 전체 경로입니다.  
`publicKeyPath`를 지정하면 IDT가 테스트 대상 디바이스에 SSH 연결을 설정할 때 디바이스의 퍼블릭 키를 검증합니다. 이 값을 지정하지 않으면 IDT는 SSH 연결을 생성하지만 디바이스의 퍼블릭 키를 확인하지는 않습니다.  
퍼블릭 키의 경로를 지정하고 안전한 방법을 사용하여 이 퍼블릭 키를 가져오는 것이 좋습니다. 표준 명령줄 기반 SSH 클라이언트의 경우 퍼블릭 키는 `known_hosts` 파일에 제공됩니다. 별도의 퍼블릭 키 파일을 지정하는 경우 이 파일은 `known_hosts` 파일과 동일한 형식, 즉, ` ip-address key-type public-key`을 사용해야 합니다. 동일한 IP 주소가 있는 항목이 여러 개 있는 경우 IDT에서 사용하는 키 유형에 대한 항목이 파일의 다른 항목보다 앞에 있어야 합니다.

`connectivity.auth`  
연결에 대한 인증 정보입니다.  
<a name="connectivity-protocol-ssh-only"></a>이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.    
`connectivity.auth.method`  
지정된 연결 프로토콜을 통해 디바이스에 액세스하는 데 사용되는 인증 방법입니다.  
지원되는 값은 다음과 같습니다.  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
인증에 사용되는 자격 증명입니다.    
`connectivity.auth.credentials.password`  
테스트 대상 디바이스에 로그인하기 위해 사용하는 암호입니다.  
이 값은 `connectivity.auth.method`가 `password`로 설정된 경우에만 적용됩니다.  
`connectivity.auth.credentials.privKeyPath`  
테스트 대상 디바이스에 로그인하는 데 사용하는 프라이빗 키의 전체 경로입니다.  
이 값은 `connectivity.auth.method`가 `pki`로 설정된 경우에만 적용됩니다.  
`connectivity.auth.credentials.user`  
테스트 대상 디바이스에 로그인하기 위한 사용자 이름입니다.

------

## userdata.json 구성
<a name="userdata-config"></a>

또한 IDT for AWS IoT Greengrass V2에는 테스트 아티팩트 및 AWS IoT Greengrass 소프트웨어의 위치에 대한 추가 정보가 필요합니다.

` <device_tester_extract_location>/configs/userdata.json`에 있는 `userdata.json` 템플릿을 사용하여 이 정보를 제공해야 합니다.

```
{
    "TempResourcesDirOnDevice": "/path/to/temp/folder",
    "InstallationDirRootOnDevice": "/path/to/installation/folder",
    "GreengrassNucleusZip": "/path/to/aws.greengrass.nucleus.zip",
    "PreInstalled": "yes/no",
    "GreengrassV2TokenExchangeRole": "custom-iam-role-name",
	"hsm": {
        "greengrassPkcsPluginJar": "/path/to/aws.greengrass.crypto.Pkcs11Provider-latest.jar",
        "pkcs11ProviderLibrary": "/path/to/pkcs11-vendor-library",
        "slotId": "slot-id",
        "slotLabel": "slot-label",
        "slotUserPin": "slot-pin",
        "keyLabel": "key-label",
        "preloadedCertificateArn": "certificate-arn"
        "rootCA": "path/to/root-ca"
    }
}
```

여기에 설명된 대로 값을 포함하는 모든 속성은 필수입니다.

`TempResourcesDirOnDevice`  
테스트 아티팩트를 저장할 테스트 대상 디바이스의 임시 폴더 전체 경로. 이 디렉터리에 쓰는 데 sudo 권한이 필요하지 않은지 확인합니다.  
IDT는 테스트 실행이 완료되면 이 폴더의 콘텐츠를 삭제합니다.

`InstallationDirRootOnDevice`  
 AWS IoT Greengrass를 설치할 디바이스의 폴더의 전체 경로. 사전 설치된 Greengrass의 경우 이는 Greengrass 설치 디렉터리의 경로입니다.  
이 폴더에 필요한 파일 권한을 설정해야 합니다. 설치 경로의 각 폴더에 대해 다음 명령을 실행합니다.  

```
sudo chmod 755 folder-name
```

`GreengrassNucleusZip`  
호스트 컴퓨터의 Greengrass nucleus ZIP(`greengrass-nucleus-latest.zip`) 파일의 전체 경로. 이 필드는 사전 설치된 Greengrass를 사용한 테스트에는 필요하지 않습니다.  
용 IDT용 Greengrass nucleus의 지원되는 버전에 대한 자세한 내용은 섹션을 AWS IoT Greengrass참조하세요[AWS IoT Greengrass V2의 최신 IDT 버전](dev-test-versions.md#idt-latest-version). 최신 Greengrass 소프트웨어를 다운로드하려면 [AWS IoT Greengrass 소프트웨어 다운로드를](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-tst-prereqs.html#config-gg) 참조하세요.

`PreInstalled`  
이 기능은 Linux 디바이스의 IDT v4.5.8 이상 버전에서만 사용할 수 있습니다.  
(선택 사항) 값이 *Yes*인 경우 IDT는 `InstallationDirRootOnDevice`에 언급된 경로를 Greengrass가 설치된 디렉터리라고 가정합니다.  
디바이스에 Greengrass를 설치하는 방법에 대한 자세한 내용은 [자동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치](quick-installation.md) 섹션을 참조하세요. [수동 프로비저닝을 사용하여를 설치하는](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html) 경우 AWS IoT 사물을 수동으로 생성할 때 “새 사물 또는 기존 사물 그룹에 [AWS IoT 사물](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html#create-iot-thing) 추가” 단계를 포함합니다. IDT는 설치 설정 중에 사물 그룹이 생성된다고 가정합니다. 이러한 값이 `effectiveConfig.yaml` 파일에 반영되어 있는지 확인합니다. IDT는 `<InstallationDirRootOnDevice>/config/effectiveConfig.yaml`에서 `effectiveConfig.yaml` 파일을 확인합니다.  
HSM을 사용하여 테스트를 실행하려면 `aws.greengrass.crypto.Pkcs11Provider` 필드가 `effectiveConfig.yaml`에서 업데이트되었는지 확인합니다.

  `GreengrassV2TokenExchangeRole`  
(선택 사항) 테스트 중인 디바이스가 AWS 리소스와 상호 작용하기 위해 수임하는 토큰 교환 역할로 사용할 사용자 지정 IAM 역할.  
IDT는 테스트 실행 중에 기본 토큰 교환 역할을 생성하는 대신 이 사용자 지정 IAM 역할을 사용합니다. 사용자 지정 역할을 사용하는 경우 [테스트 사용자에 대한 IAM 권한](dev-tst-prereqs.md#configure-idt-permissions)을 업데이트하여 사용자가 IAM 역할 및 정책을 생성하고 삭제할 수 있도록 허용하는 `iamResourcesUpdate` 문을 제외할 수 있습니다.
사용자 지정 IAM 역할을 토큰 교환 역할로 생성하는 방법에 대한 자세한 내용은 [사용자 지정 토큰 교환 역할 구성](device-config-setup.md#configure-custom-tes-role-for-idt) 섹션을 참조하세요.

`hsm`  
이 기능은 IDT v4.5.1 이상에서 사용할 수 있습니다.  
(선택 사항) AWS IoT Greengrass 하드웨어 보안 모듈(HSM)을 사용하여 테스트하기 위한 구성 정보. 그렇지 않으면 `hsm` 속성을 생략해야 합니다. 자세한 내용은 [하드웨어 보안 통합](hardware-security.md) 단원을 참조하십시오.  
<a name="connectivity-protocol-ssh-only"></a>이 속성은 `connectivity.protocol`이 `ssh`로 설정된 경우에만 적용됩니다.  
하드웨어 보안 모듈이 IDT와 다른 시스템 간에 공유되는 경우 HSM 구성은 민감한 데이터로 간주될 수 있습니다. 이러한 경우 구성 값을 AWS Parameter·Store SecureString 파라미터에 저장하고 테스트 실행 중에 가져오도록 IDT를 구성하여 일반 텍스트로 보호하지 않을 수 있습니다. 자세한 내용은 [AWS 파라미터 스토어에서 구성 가져오기](#fetch-config) 섹션을 참조하세요.  
`hsm.greengrassPkcsPluginJar`  
IDT 호스트 시스템에 다운로드하는 [PKCS\$111 공급자 구성 요소](pkcs11-provider-component.md)의 전체 경로. AWS IoT Greengrass 는 이 구성 요소를 설치하는 중 프로비저닝 플러그인으로 지정하기 위해 다운로드할 수 있는 JAR 파일로 제공합니다. 다음 URL([https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar))에서 최신 버전의 구성 요소 JAR 파일을 다운로드할 수 있습니다.  
`hsm.pkcs11ProviderLibrary`  
하드웨어 보안 모듈(HSM) 공급업체가 HSM과 상호 작용하기 위해 제공하는 PKCS\$111 라이브러리의 전체 경로.  
`hsm.slotId`  
키와 인증서를 로드하는 HSM 슬롯을 식별하는 데 사용되는 슬롯 ID.  
`hsm.slotLabel`  
키와 인증서를 로드하는 HSM 슬롯을 식별하는 데 사용되는 슬롯 레이블.  
`hsm.slotUserPin`  
IDT가 AWS IoT Greengrass 코어 소프트웨어를 HSM에 인증하는 데 사용하는 사용자 PIN입니다.  
보안 모범 사례로 프로덕션 디바이스에서 동일한 사용자 PIN을 사용하지 마세요.  
`hsm.keyLabel`  
하드웨어 모듈에서 키를 식별하는 데 사용되는 레이블입니다. 키와 인증서 모두 동일한 키 레이블을 사용해야 합니다.  
`hsm.preloadedCertificateArn`  
 AWS IoT 클라우드에 업로드한 디바이스 인증서의 Amazon 리소스 이름(ARN).  
이전에 HSM의 키를 사용하여이 인증서를 생성하고 HSM으로 가져온 다음 AWS IoT 클라우드에 업로드해야 합니다. 인증서 생성 및 가져오기에 대한 자세한 내용은 HSM에 대한 설명서를 참조하세요.  
인증서를 [config.json](#cfg-aws-gg)에 제공한 것과 동일한 계정 및 리전에 인증서를 업로드해야 합니다. 인증서를에 업로드하는 방법에 대한 자세한 내용은 *AWS IoT 개발자 안내서*의 [수동으로 클라이언트 인증서 등록](https://docs.aws.amazon.com/iot/latest/developerguide/manual-cert-registration.html)을 AWS IoT참조하세요.  
`hsm.rootCAPath`  
(선택 사항) 인증서를 서명한 루트 인증 기관(CA)에 대한 IDT 호스트 컴퓨터의 전체 경로. 이는 생성한 HSM의 인증서가 Amazon 루트 CA에 의해 서명하지 않은 경우에 필요합니다.

## AWS 파라미터 스토어에서 구성 가져오기
<a name="fetch-config"></a>

AWS IoT 디바이스 테스터(IDT)에는 [AWS Systems Manager 파라미터 스토어](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)에서 구성 값을 가져오는 선택적 기능이 포함되어 있습니다. AWS 파라미터 스토어는 안전하고 암호화된 구성 저장을 허용합니다. 구성된 경우 IDT는 파라미터를 `userdata.json` 파일 내부의 일반 텍스트로 저장하는 대신 파라미터 AWS 스토어에서 파라미터를 가져올 수 있습니다. 이는 암호, PIN, 기타 보안 암호와 같이 암호화된 상태로 저장해야 하는 민감한 데이터에 유용합니다.

1. 이 기능을 사용하려면 [IDT 사용자](https://docs.aws.amazon.com/greengrass/v2/developerguide/dev-tst-prereqs.html)를 생성하는 데 사용되는 권한을 업데이트하여 IDT가 사용하도록 구성된 파라미터에 대한 GetParameter 작업을 허용해야 합니다. 다음은 IDT 사용자에게 추가할 수 있는 권한 문의 예제입니다. 자세한 내용은 [AWS Systems Manager 사용 설명서](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html)를 참조하세요.

   ```
   {
          "Sid":"parameterStoreResources",
          "Effect": "Allow",
           "Action": [
               "ssm:GetParameter"
           ],
           "Resource": "arn:aws:ssm:*:*:parameter/IDT*"
   }
   ```

   위 권한은 와일드카드 문자(`IDT`)를 사용하여 이름이 `*`로 시작하는 모든 파라미터를 가져올 수 있도록 구성되었습니다. 사용 중인 파라미터의 이름에 따라 IDT가 구성되어 있는 파라미터를 가져올 수 있도록 필요에 따라 이를 사용자 지정해야 합니다.

1.  AWS Paramater Store 내에 구성 값을 저장해야 합니다. 이 작업은 AWS 콘솔 또는 AWS CLI에서 수행할 수 있습니다. AWS Parameter Store를 사용하면 암호화되거나 암호화되지 않은 스토리지를 선택할 수 있습니다. 보안 암호, PIN 등 민감한 값을 저장하려면 SecureString의 파라미터 유형인 암호화된 옵션을 사용해야 합니다. AWS CLI를 사용하여 파라미터를 업로드하려면 다음 명령을 사용할 수 있습니다.

   ```
   aws ssm put-parameter --name IDT-example-name --value IDT-example-value --type SecureString
   ```

   다음 명령을 사용하여 파라미터가 저장되었는지 확인할 수 있습니다. (선택 사항) `--with-decryption` 플래그를 사용하여 해독된 SecureString 파라미터를 가져옵니다.

   ```
   aws ssm get-parameter --name IDT-example-name
   ```

    AWS CLI를 사용하면 현재 CLI 사용자의 AWS 리전에 파라미터가 업로드되고 IDT는에 구성된 리전에서 파라미터를 가져옵니다`config.json`. AWS CLI에서 리전을 확인하려면 다음을 사용합니다.

   ```
   aws configure get region
   ```

1.  AWS 클라우드에 구성 값이 있으면 IDT 구성 내의 모든 값을 업데이트하여 AWS 클라우드에서 가져올 수 있습니다. 이렇게 하려면 양식의 IDT 구성에 자리 표시자를 사용하여 파라미터 스토어에서 해당 이름으로 AWS 파라미터를 `{{AWS.Parameter.parameter_name}}` 가져옵니다.

   예를 들어 2단계의 `IDT-example-name` 파라미터를 HSM 구성의 HSM keyLabel로 사용하려는 경우를 가정해 보겠습니다. 이렇게 하려면 다음과 같이 `userdata.json`을 업데이트하면 됩니다.

   ```
   "hsm": {
           "keyLabel": "{{AWS.Parameter.IDT-example-name}}",
           [...]
       }
   ```

   IDT는 2단계에서 `IDT-example-value`로 설정된 런타임에서 이 파라미터의 값을 가져옵니다. 이 구성은 설정과 유사`"keyLabel": "IDT-example-value"`하지만 대신 해당 값은 AWS 클라우드에 암호화된 상태로 저장됩니다.

# AWS IoT Greengrass 검증 제품군 실행
<a name="run-tests"></a>

[필수 구성을 설정](set-config.md)한 후 테스트를 시작할 수 있습니다. 전체 테스트 제품군의 실행 시간은 하드웨어에 따라 다릅니다. 참조를 위해, Raspberry Pi 3B에서 전체 테스트 제품군을 완료하는 데 약 30분이 걸립니다.

다음 `run-suite` 명령을 사용하여 테스트 제품군을 실행합니다.

```
devicetester_[linux | mac | win]_x86-64 run-suite  \\
    --suite-id suite-id  \\
    --group-id group-id  \\
    --pool-id your-device-pool \\
    --test-id test-id  \\
    --update-idt y|n  \\
    --userdata userdata.json
```

모든 옵션은 선택 사항입니다. 예를 들어 `device.json` 파일에 정의된 동일한 디바이스의 세트인 디바이스 풀이 하나만 있는 경우 `pool-id`를 생략할 수 있습니다. 또는 `tests` 폴더에서 최신 테스트 제품군 버전을 실행하려면 `suite-id`를 생략할 수 있습니다.

**참고**  
상위 테스트 제품군 버전이 온라인으로 제공되는 경우 IDT가 메시지를 표시합니다. 자세한 내용은 [테스트 제품군 버전](idt-greengrass-qualification.md#idt-test-suite-versions) 단원을 참조하십시오.

## 자격 제품군을 실행하는 예제 명령
<a name="idt-run-suite-examples"></a>

다음 명령줄 예제에서는 디바이스 풀에 대한 자격 테스트를 실행하는 방법을 설명합니다. `run-suite` 및 기타 IDT 명령에 대한 자세한 내용은 [IDT for AWS IoT Greengrass V2 명령](#bk-cli) 섹션을 참조하십시오.

다음 명령을 사용하여 지정된 테스트 제품군에 있는 모든 테스트 그룹을 실행합니다. `list-suites` 명령은 `tests` 폴더에 있는 테스트 제품군을 나열합니다.

```
devicetester_[linux | mac | win]_x86-64 run-suite \
    --suite-id GGV2Q_1.0.0 \
    --pool-id <pool-id> \
    --userdata userdata.json
```

다음 명령을 사용하여 테스트 제품군의 특정 테스트 그룹을 실행합니다. `list-groups` 명령은 테스트 제품군의 테스트 그룹을 나열합니다.

```
devicetester_[linux | mac | win]_x86-64 run-suite \
    --suite-id GGV2Q_1.0.0 \
    --group-id <group-id> \
    --pool-id <pool-id> \
    --userdata userdata.json
```

다음 명령을 사용하여 테스트 그룹의 특정 테스트 사례를 실행합니다.

```
devicetester_[linux | mac | win]_x86-64 run-suite \
    --group-id <group-id> \
    --test-id <test-id> \
    --userdata userdata.json
```

다음 명령을 사용하여 테스트 그룹의 여러 테스트 사례를 실행합니다.

```
devicetester_[linux | mac | win]_x86-64 run-suite \
    --group-id <group-id> \
    --test-id <test-id1>,<test-id2>
    --userdata userdata.json
```

다음 명령을 사용하여 테스트 그룹의 모든 테스트 사례를 나열합니다.

```
devicetester_[linux | mac | win]_x86-64 list-test-cases --group-id <group-id>
```

테스트 그룹 종속성을 올바른 순서로 실행하는 전체 자격 테스트 제품군을 실행하는 것이 좋습니다. 특정 테스트 그룹을 실행하기로 선택한 경우 관련 테스트 그룹을 실행하기 전에 먼저 종속성 검사기 테스트 그룹을 실행하여 모든 Greengrass 종속성이 설치되어 있는지 확인하는 것이 좋습니다. 예제:
+ 코어 자격 테스트 그룹을 실행하기 전에 `coredependencies`를 실행합니다.

## IDT for AWS IoT Greengrass V2 명령
<a name="bk-cli"></a>

IDT 명령은 `<device-tester-extract-location>/bin` 디렉터리에 있습니다. 테스트 제품군을 실행하려면 다음 형식으로 명령을 입력합니다.

`help`  <a name="idt-command-help"></a>
지정된 명령에 대한 정보를 나열합니다.

`list-groups`  <a name="idt-command-list-groups"></a>
지정된 테스트 제품군에 있는 그룹을 나열합니다.

`list-suites`  <a name="idt-command-list-suites"></a>
사용 가능한 테스트 제품군을 나열합니다.

`list-supported-products`  
지원되는 제품,이 경우 AWS IoT Greengrass 버전 및 현재 IDT 버전에 대한 테스트 제품군 버전을 나열합니다.

`list-test-cases`  
주어진 테스트 그룹의 테스트 사례를 나열합니다. 다음 옵션이 지원됩니다.  
+ `group-id`. 검색할 테스트 그룹입니다. 이 옵션은 필수이며 단일 그룹을 지정해야 합니다.

`run-suite`  
장치의 풀에 대해 테스트 제품군을 실행합니다. 지원되는 몇 가지 옵션은 다음과 같습니다.  
+ `suite-id`. 실행할 테스트 제품군 버전입니다. 지정하지 않으면 IDT는 `tests` 폴더의 최신 버전을 사용합니다.
+ `group-id`. 실행할 테스트 그룹(쉼표로 구분된 목록). 지정되지 않은 경우 IDT는 `device.json`에서 구성된 설정에 따라 테스트 제품군에서 모든 적절한 테스트 그룹을 실행합니다. IDT는 구성된 설정에 따라 디바이스가 지원하지 않는 테스트 그룹이 `group-id` 목록에 지정되어 있더라도 테스트 그룹을 실행하지 않습니다.
+ `test-id`. 실행할 테스트 케이스(쉼표로 구분된 목록). 지정된 경우, `group-id`은(는) 단일 그룹을 지정해야 합니다.
+ `pool-id`. 테스트할 디바이스 풀. `device.json` 파일에 여러 장치 풀이 정의되어 있는 경우 하나의 풀을 지정해야 합니다.
+ `stop-on-first-failure`. 첫 번째 실패 시 IDT가 실행을 중지하도록 구성합니다. 지정된 테스트 그룹을 디버깅하려는 경우 `group-id`와 함께 이 옵션을 사용합니다. 전체 테스트 제품군을 실행하여 검증 보고서를 생성할 때는 이 옵션을 사용하지 마시기 바랍니다.
+ `update-idt`. IDT를 업데이트하라는 프롬프트에 대한 응답을 설정합니다. IDT에서 최신 버전이 있음을 감지하면 `Y` 응답이 테스트 실행을 중지합니다. `N` 응답은 테스트 실행을 계속합니다.
+ `userdata`. 테스트 아티팩트 경로에 대한 정보가 포함되어 있는 `userdata.json` 파일의 전체 경로입니다. 이 옵션은 `run-suite` 명령에 필요합니다. `userdata.json` 파일은 *devicetester\$1extract\$1location*/devicetester\$1ggv2\$1*[win\$1mac\$1linux]* 디렉터리에 있어야 합니다.
`run-suite` 옵션에 대한 자세한 내용은 다음 `help` 옵션을 사용하십시오.  

```
devicetester_[linux | mac | win]_x86-64 run-suite -h
```

# 결과 및 로그 이해
<a name="results-logs"></a>

이 단원에서는 IDT 결과 보고서 및 로그를 보고 해석하는 방법을 설명합니다.

오류를 해결하려면 [IDT for AWS IoT Greengrass V2 문제 해결](idt-troubleshooting.md) 섹션을 참조하세요.

## 결과 보기
<a name="view-results"></a>

실행하는 동안 IDT는 콘솔, 로그 파일 및 테스트 보고서에 오류를 작성합니다. IDT는 자격 테스트 제품군을 완료한 후 두 개의 테스트 보고서를 생성합니다. 이러한 보고서는 `<device-tester-extract-location>/results/<execution-id>/`에 있습니다. 두 보고서 모두 적격성 테스트 제품군을 실행하여 얻은 결과를 캡처합니다.

`awsiotdevicetester_report.xml`은 AWS Partner Device Catalog에 장치를 등록하기 위해AWS에 제출하는 자격 테스트 보고서입니다. 보고서에는 다음 요소가 포함됩니다.
+ IDT 버전
+ 테스트한 AWS IoT Greengrass 버전
+ `device.json` 파일에 지정된 SKU 및 장치 풀 이름
+ `device.json` 파일에 지정된 장치 풀의 기능
+ 테스트 결과의 집계 요약
+ 로컬 리소스 액세스, 섀도, MQTT 등 디바이스 기능을 기반으로 테스트한 라이브러리별 테스트 결과 분석입니다.

`GGV2Q_Result.xml` 보고서는 [JUnit XML 형식](https://llg.cubic.org/docs/junit/)입니다. [Jenkins](https://jenkins.io/), [Bamboo](https://www.atlassian.com/software/bamboo) 등과 같은 지속적 통합 및 배포 플랫폼에 이 보고서를 통합할 수 있습니다. 보고서에는 다음 요소가 포함됩니다.
+ 테스트 결과의 집계 요약
+ 테스트한 AWS IoT Greengrass 기능별 테스트 결과의 분석

## AWS IoT Device Tester 결과 해석
<a name="interpreting-results-gg"></a>

`awsiotdevicetester_report.xml` 또는 `awsiotdevicetester_report.xml`의 보고서 섹션에는 실행된 테스트 및 결과가 나열됩니다.

첫 번째 XML 태그(`<testsuites>`)에는 테스트 실행의 요약이 포함되어 있습니다. 예:

```
<testsuites name="GGQ results" time="2299" tests="28" failures="0" errors="0" disabled="0">
````<testsuites>` 태그에 사용되는 속성

`name`  
테스트 제품군의 이름입니다.

`time`  
자격 제품군을 실행하는 데 걸린 시간(초)입니다.

`tests`  
실행된 테스트 수입니다.

`failures`  
실행되었지만 통과하지 못한 테스트의 수입니다.

`errors`  
IDT에서 실행하지 못한 테스트의 수입니다.

`disabled`  
이 속성을 무시합니다. 사용되지 않습니다.

`awsiotdevicetester_report.xml` 파일에는 테스트하는 제품에 대한 정보와 테스트 제품군을 실행한 후 확인된 제품 기능에 대한 정보를 포함하는 `<awsproduct>` 태그가 포함되어 있습니다.`<awsproduct>` 태그에 사용되는 속성

`name`  
테스트하는 제품의 이름입니다.

`version`  
테스트하는 제품의 버전입니다.

`features`  
확인된 기능입니다. `required`로 표시된 기능은 자격에 대한 보드를 제출하는 데 필요합니다. 다음 코드 조각은 `awsiotdevicetester_report.xml` 파일에 이 정보가 나타나는 방식을 보여 줍니다.  

```
<name="aws-iot-greengrass-v2-core" value="supported" type="required"></feature>
```

필수 기능에 대한 테스트 실패 또는 오류가 없는 경우 장치는 AWS IoT Greengrass를 실행하기 위한 기술 요구 사항을 충족하며 AWS IoT 서비스와 상호 작용할 수 있습니다. AWS Partner Device Catalog에 장치를 나열하려는 경우 이 보고서를 자격 증거로 사용할 수 있습니다.

테스트 실패 또는 오류의 경우 `<testsuites>` XML 태그를 검토하여 실패한 테스트를 식별할 수 있습니다. `<testsuite>` 태그 내부의 `<testsuites>` XML 태그는 테스트 그룹에 대한 테스트 결과 요약을 보여 줍니다. 예:

```
<testsuite name="combination" package="" tests="1" failures="0" time="161" disabled="0" errors="0" skipped="0">
```

형식은 `<testsuites>` 태그와 비슷하지만, 사용되지 않고 무시할 수 있는 `skipped` 속성이 있습니다. 각 `<testsuite>` XML 태그 안에는 테스트 그룹에 대해 실행된 각 테스트에 대한 `<testcase>` 태그가 있습니다. 예:

```
<testcase classname="Security Combination (IPD + DCM) Test Context" name="Security Combination IP Change Tests sec4_test_1: Should rotate server cert when IPD disabled and following changes are made:Add CIS conn info and Add another CIS conn info" attempts="1"></testcase>>
````<testcase>` 태그에 사용되는 속성

`name`  
테스트의 이름입니다.

`attempts`  
IDT가 테스트 사례를 실행한 횟수.

테스트가 실패하거나 오류가 발생하는 경우 문제 해결에 대한 정보와 함께 `<failure>` 또는 `<error>` 태그가 `<testcase>` 태그에 추가됩니다. 예:

```
<testcase classname="mcu.Full_MQTT" name="AFQP_MQTT_Connect_HappyCase" attempts="1">
	<failure type="Failure">Reason for the test failure</failure>
	<error>Reason for the test execution error</error>
</testcase>
```

## 로그 보기
<a name="view-logs-gg"></a>

IDT는 `<devicetester-extract-location>/results/<execution-id>/logs`의 테스트 실행에서 로그를 생성합니다. 두 개의 로그 세트가 생성됩니다.

`test_manager.log`  
AWS IoT Device Tester의 Test Manager 구성 요소(예: 구성 관련 로그, 테스트 시퀀싱, 보고서 생성)에서 생성된 로그입니다.

`<test-case-id>.log (for example, lambdaDeploymentTest.log)`  
테스트 중인 디바이스의 로그를 포함하여 테스트 그룹 내 테스트 사례의 로그입니다. IDT v4.2.0부터는 각 테스트 사례에 대한 테스트 로그를 `<devicetester-extract-location>/results/<execution-id>/logs/<test-group-id>/` 디렉터리 내의 별도의 *<test-case-id>* 폴더에 그룹화합니다.