

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

# 자습서: 신뢰할 수 있는 플랫폼 모듈(TPM)을 사용하여 AWS IoT Greengrass Nucleus Lite 보호
<a name="gg-lite-with-tpm-tutorial"></a>

이 자습서에서는 AWS IoT Greengrass nucleus lite에 대한 신뢰할 수 있는 플랫폼 모듈(TPM) 지원을 활성화하고 구성하는 방법을 설명합니다. TPM은 보안 키 스토리지를 위한 하드웨어 기반 신뢰 루트를 제공합니다. 이 보안 기능은 암호화 작업과 민감한 자격 증명을 보호하여 디바이스 보안 및 무결성을 향상시킵니다.

이 통합을 완료하면 AWS IoT Greengrass 코어 디바이스는 ID 및 AWS IoT 서비스와의 통신에 TPM 보호 프라이빗 키를 사용합니다.

 AWS IoT Greengrass 디바이스의 보안에 대한 자세한 내용은 섹션을 참조하세요[의 보안 AWS IoT Greengrass](security.md).

## 사전 조건
<a name="lite-tpm-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ TPM 2.0 하드웨어 또는 [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html)이 있는 Linux 호환 디바이스
+ Greengrass Nucleus Lite가 설치된 개발자 시스템입니다. 자세한 내용은 [AWS IoT Greengrass 코어 소프트웨어 설치(콘솔)를 참조하세요](https://docs.aws.amazon.com//greengrass/v2/developerguide/install-greengrass-v2-console.html).
+ 이 자습서의 지침은 Ubuntu 24.04 LTS를 기준으로 정의됩니다.
+ [Linux TPM2 소프트웨어 스택](https://tpm2-software.github.io/)을 지원하는 모든 Linux 배포판에서 이 메커니즘 지원이 가능합니다.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)가 설치되고 다음 권한으로 구성된 개발용 머신:
  +  AWS IoT 리소스 생성 및 관리
  + IAM 역할 및 정책 생성 및 관리
+ 디바이스에서 루트 권한 또는 sudo 권한.

이 자습서에는 TPM2 칩을 하드웨어 보안 모듈(HSM)로 사용하여 프라이빗 키와 AWS IoT 사물 인증서를 생성하는 데 사용되는 CSR을 생성하는 방법에 대한 지침이 포함되어 있습니다.

## 1단계: NitroTPM 인스턴스 설정
<a name="lite-tpm-step1"></a>

1. NitroTPM 인스턴스를 설정합니다. 자세한 내용은 [NitroTPM](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/enable-nitrotpm-support-on-ami.html)을 참조하세요.

1. 이전 단계에서 생성한 사용자 지정 AMI를 사용하여 최종 인스턴스를 시작합니다.
**중요**  
SSH에 연결할 때는 대신 `ubuntu` 사용자를 사용합니다`root`.

1. 다음 명령을 실행하여 TPM 디바이스가 있고 작동하는지 확인합니다.

   ```
   ls -la /dev/tpm*
   ```

   `/dev/tpm0` 및 `/dev/tpmrm0` 디바이스가 표시되어야 합니다.

## 2단계: TPM 도구 설치 및 구성
<a name="lite-tpm-step2"></a>

1. 다음 명령을 실행하여 필요한 패키지를 설치합니다.

   ```
   sudo apt update
   sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
   ```

1. 다음 명령을 실행하여 TPM 디바이스의 권한을 확인합니다.

   ```
   ls -l /dev/tpm0    # Should be owned by tss:root with permissions 0660
   ls -l /dev/tpmrm0  # Should be owned by tss:tss with permissions 0660
   ```

## 3단계: OpenSSL TPM2 공급자 구성
<a name="lite-tpm-step3"></a>

1. OpenSSL 구성 파일을 편집합니다.

   ```
   sudo vi /etc/ssl/openssl.cnf
   ```

1. 다음 구성을 추가합니다.

   ```
   [openssl_init]
   providers = provider_sect
   
   [provider_sect]
   default = default_sect
   tpm2 = tpm2_sect
   
   [default_sect]
   activate = 1
   
   [tpm2_sect]
   identity = tpm2
   module = /usr/local/lib64/tpm2.so
   activate = 1
   ```

1. 필요에 따라 모듈 경로를 조정합니다. 다음을 사용하여 올바른 경로를 찾을 수 있습니다.

   ```
   find /usr -name "tpm2.so"
   ```

## 4단계: 영구 TPM 키 생성
<a name="lite-tpm-step4"></a>

1. 다음 명령을 실행하여 기본 키를 생성합니다.

   ```
   sudo tpm2_createprimary -C o -c primary.ctx
   ```

1. 다음 명령을 실행하여 ECC 키 객체를 생성합니다.

   ```
   sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
   ```

1. 다음 명령을 실행하여 키를 로드합니다.

   ```
   sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
   ```

1. 다음 명령을 실행하여 키를 영구화합니다.

   ```
   sudo tpm2_evictcontrol -C o -c device.ctx 0x81000002
   ```

   이렇게 하면 핸들(예: )이 있는 영구 키가 생성됩니다`0x81000002`.

## 5단계: 인증서 서명 요청(CSR) 생성
<a name="lite-tpm-step5"></a>

이 단계에서는 TPM2-protected 프라이빗 키를 사용하여 인증서 서명 요청(CSR)을 생성합니다.

1. TPM 키를 사용하여 CSR을 생성합니다.

   ```
   openssl req -new -provider tpm2 -key "handle:0x81000002" \
       -out device.csr \
       -subj "/CN=TPMThing"
   ```

1. `0x81000002`를 선택한 핸들 값으로 바꾸고 `TPMThing`를 원하는 사물 이름으로 바꿉니다.

## 6단계: CSR에서 인증서 생성
<a name="lite-tpm-step6"></a>

1. 개발 컴퓨터에서 AWS IoT 사물에 대한 인증서를 다운로드한 폴더를 생성합니다.

   ```
   mkdir greengrass-v2-certs
   ```

1. CSR 파일을 사용하여 AWS IoT 사물에 대한 인증서를 생성하고 개발 컴퓨터에 다운로드합니다.

   ```
   aws iot create-certificate-from-csr \
     --set-as-active \
     --certificate-signing-request file://{{path_to_device.csr}} \
     --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   요청에 성공하는 경우 응답은 다음 예제와 비슷하게 보입니다.

   ```
   {
   "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

## 7단계: TPM 지원으로 Greengrass Nucleus Lite 설정
<a name="lite-tpm-step7"></a>

Greengrass Nucleus Lite에서 TPM 지원을 활성화하려면 다음과 같이 변경합니다.

1. TPM 액세스를 위해 `tss` 그룹에 `ggcore` 사용자를 추가하여 사용자 권한을 구성합니다.

   ```
   sudo usermod -a -G tss ggcore
   ```

1. 다음 단계를 완료하여 자격 증명 디렉터리를 업데이트합니다.
   + 자격 증명 디렉터리에서 프라이빗 키 파일을 제거합니다.
     + 영구 TPM 키를 사용하므로 프라이빗 키 파일을 복사할 필요가 없습니다.
   + 새를 해당 자격 증명 디렉터리`device.pem.crt`에 복사합니다.

1. 다음 TPM별 구성`config.yaml`으로를 편집합니다.

   ```
   system:
       privateKeyPath: "handle:0x81000002" # Use your chosen handle
       certificateFilePath: "" # Replace with the path of device.pem.crt
       ...
   ```

1. 다음 명령을 실행하여 Greengrass Nucleus Lite를 재부팅합니다.

   ```
   systemctl restart greengrass-lite.target
   ```

## 문제 해결
<a name="lite-tpm-troubleshooting"></a>

TPM2-enabled AWS IoT Greengrass 디바이스를 설정하거나 작동하는 동안 문제가 발생하면 다음 문제 해결 단계를 시도하세요.

**TPM 디바이스를 찾을 수 없음(NitroTPM 사용 시)**

`/dev/tpm0`이 없는 경우 다음 단계를 수행합니다.

1. NitroTPM 지원 인스턴스 유형을 사용하고 있는지 확인합니다.

1. 를 사용하여 AMI가 생성되었는지 확인합니다`--tpm-support v2.0`.

1. 인스턴스가 사용자 지정 AMI에서 시작되었는지 확인합니다.

**권한 거부 오류**

TPM 액세스 오류가 발생하면 다음을 수행합니다.

1. 사용자가 `tss` 그룹에 있는지 확인합니다`groups $USER`.

1. 다음 명령을 사용하여 TPM 디바이스의 권한을 확인합니다.

   ```
   ls -l /dev/tpm*
   ```

1. `tss` 그룹에를 추가한 후 로그아웃했다가 다시 로그인했는지 확인합니다.

**OpenSSL 공급자 문제**

TPM 공급자를 찾을 수 없는 경우 다음을 수행합니다.

1. 에서 `tpm2.so` 경로를 확인합니다`/etc/ssl/openssl.cnf`.

1. 다음 명령을 실행하여 공급자 설치를 확인합니다.

   ```
   openssl list -providers
   ```

1. `tpm2-openssl` 패키지가 제대로 설치되었는지 확인합니다.

## 다음 단계
<a name="lite-tpm-next-steps"></a>

이제 AWS IoT Greengrass 코어 디바이스를 TPM2와 성공적으로 통합했으므로 다음을 수행할 수 있습니다.
+ 보안 AWS IoT Greengrass 디바이스에 구성 요소 배포
+ TPM2 통합을 사용하여 추가 AWS IoT Greengrass 디바이스 설정

 AWS IoT Greengrass 디바이스의 보안에 대한 자세한 내용은 섹션을 참조하세요[의 보안 AWS IoT Greengrass](security.md).