기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자습서: 신뢰할 수 있는 플랫폼 모듈(TPM)을 사용하여 Greengrass Nucleus 보호
참고
이 자습서의 메커니즘은 수동 리소스 프로비저닝을 사용하여 AWS IoT Greengrass 코어 소프트웨어 설치에서만 지원됩니다.
이 자습서에는 TPM2 칩을 하드웨어 보안 모듈(HSM)로 사용하여 프라이빗 키와 CSR을 생성하는 방법에 대한 지침이 포함되어 있습니다. 이것은 사물 인증서 생성에 사용됩니다.
이 자습서에서는 PKCS#11 인터페이스를 사용하여 신뢰할 수 있는 플랫폼 모듈(TPM)로 AWS IoT Greengrass 코어 소프트웨어(Greengrass Nucleus)를 구성하여 디바이스 보안을 강화하는 방법을 보여줍니다. 이 TPM 통합은 디바이스 자격 증명 및에 연결하는 데 사용되는 프라이빗 키와 인증서를 변조 방지 하드웨어에 AWS IoT Core 안전하게 저장하여 위장 또는 기타 악의적인 활동을 위한 추출을 방지합니다.
이 통합을 완료하면 Greengrass 코어 디바이스는 ID 및 AWS IoT 서비스와의 통신에 TPM 보호 프라이빗 키를 사용합니다.
Greengrass 디바이스 보안에 대한 자세한 내용은 의 보안 AWS IoT Greengrass 섹션을 참조하세요.
사전 조건
이 자습서를 완료하려면 다음이 필요합니다.
-
TPM 2.0 하드웨어 또는 펌웨어 TPM 2.0이 있는 Linux 호환 디바이스.
-
이 자습서의 지침은 Ubuntu 24.04 LTS를 기준으로 정의됩니다.
-
Linux TPM2 소프트웨어 스택
을 지원하는 모든 Linux 배포판에서 이 메커니즘 지원이 가능합니다.
-
-
가 AWS CLI 설치되고 다음과 같은 권한이 있는 개발자 시스템입니다.
-
AWS IoT 리소스 생성 및 관리
-
IAM 역할 및 정책 생성 및 관리
-
-
디바이스에 설치된 Java 런타임 환경(JRE) 버전 8 이상.
-
디바이스에 설치된 다음 소프트웨어 패키지:
-
curl
-
jq
-
-
디바이스에서 루트 권한 또는 sudo 권한.
1단계: TPM2 도구 및 종속성 설치
이 단계에서는 필요한 TPM2 소프트웨어 도구와 라이브러리를 설치합니다.
-
패키지 관리자를 업데이트하고 다음 명령을 실행하여 TPM2 도구와 종속성을 설치합니다.
sudo apt-get update && sudo apt-get install tpm2-tools \ tpm2-abrmd \ tpm2-tss-engine-tools \ gnutls-bin \ libtpm2-pkcs11-1 \ libtpm2-pkcs11-tools \ libtpm2-pkcs11-1-dev \ python3-tpm2-pkcs11-tools \ libengine-pkcs11-openssl \ libtss2-tcti-tabrmd0 -
OpenSSL 엔진 3을 사용하는 OpenSSL TPM2 공급자 패키지를 Ubuntu 24.04에 설치합니다.
sudo apt-get install tpm2-openssl
2단계: PKCS#11 저장소 초기화 및 슬롯 생성
-
데이터를 저장할 디렉터리를 생성합니다.
sudo mkdir -p /etc/tpm2_pkcs11 -
저장 위치를 환경 변수로 설정합니다. 스토어 계층 구조에 대한 자세한 내용은 초기화
를 참조하세요. export TPM2_PKCS11_STORE=/etc/tpm2_store -
기본 객체를 사용하여 TPM2 토큰을 초기화합니다.
sudo tpm2_ptool init사용 가능한 옵션은 다음과 같습니다.
hierarchy-auth HIERARCHY_AUTH-
계층 구조에 기본 객체를 추가할 때 사용하는 인증 비밀번호.
primary-auth PRIMARY_AUTH-
기존 프라이머리 키 객체에 대한 인증 값.
기본값은 빈 인증 값입니다.
primary-handle [PRIMARY_HANDLE]-
기존 프라이머리 키 객체를 사용합니다.
기본값:
0x81000001 transient-parents-
지정된 템플릿의 임시 기본 객체를 사용합니다.
값:
tpm2-tools-default,tpm2-tools-ecc-default,tss2-engine-key path PATH-
스토어 디렉터리의 위치입니다. 지정한 경우 디렉터리가 존재해야 합니다. 지정하지 않으면 환경 변수
TPM2_PKCS11_STORE를 확인하여 검색합니다. 환경 변수도 설정되어 있지 않으면/etc/tpm2_pkcs11을 확인합니다. 해당 디렉터리를 찾을 수 없거나 생성할 수 없으면 기본적으로 현재 작업 디렉터리로 설정됩니다.
3단계: 토큰 및 키 생성
-
PKCS#11 토큰을 생성합니다.
sudo tpm2_ptool addtoken —pid=1 —userpin=USERPIN—sopin=SOPIN—label=greengrass사용 가능한 옵션은 다음과 같습니다.
--pid PID-
이 토큰과 연결할 기본 객체 ID입니다.
--sopin SOPIN-
관리자 핀입니다. 이 핀은 객체 복구에 사용됩니다.
--userpin USERPIN-
사용자 핀입니다. 이 핀은 객체 사용을 위한 인증에 사용됩니다.
--label LABEL-
사용 중인 프로파일을 식별하는 고유 레이블은 고유해야 합니다.
--hierarchy-auth HIERARCHY_AUTH
-
ECC 키 객체를 생성합니다.
sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey--label LABEL-
키를 가져올 토큰의 레이블을 지정합니다.
--key-label KEY_LABEL-
가져온 키의 레이블을 지정합니다. 기본값은 정수 값입니다.
--id ID-
키 ID입니다. 기본값은 8바이트의 무작위 16진수입니다.
--attr-always-authenticate-
CKA_ALWAYS_AUTHENTICATE 속성을 CK_TRUE로 설정합니다.
--hierarchy-auth HIERARCHY_AUTH-
임시 객체에 필요한 계층 인증을 지정합니다.
--sopin SOPIN-
관리자 핀입니다.
--userpin USERPIN-
사용자 핀입니다.
--algorithm-
{rsa1024,rsa2048,rsa3072,rsa4096,aes128,aes256,ecc224,ecc256,ecc384,ecc521,hmac:sha1,hmac:sha256,hmac:sha384,hmac:sha512}
키 유형입니다.
-
토큰에서 TPM2-TSS 개체를 내보내 인증 데이터를 캡처합니다.
yaml_ecc0=$(sudo tpm2_ptool export —label="greengrass" —key-label="greenkey" —userpin="******")출력 예시:
> echo $yaml_ecc0 object-auth: 706c1cad8a5238871b30149705255926 primary-object: auth: '' hierarchy: owner is_transient: false참고
이 명령을 실행한 디렉토리에는 TSS2 프라이빗 키인 `greenkey.pem`이라는 파일이 함께 생성됩니다. 이 키를 사용하여 `tpm2` OpenSSL 공급자로 CSR을 생성할 수 있습니다. TSS2 PRIVATE KEY 파일은 TPM에 의해 보호되며 다른 시스템에서 사용할 수 없습니다. TSS2 키와 OpenSSL 관련 자세한 내용은 프라이빗 또는 퍼블릭 키 저장
을 참조하세요. -
TSS 프라이빗 키의 인증 데이터를 캡처합니다.
auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)
4단계: 인증서 서명 요청(CSR) 생성
이 단계에서는 TPM2로 보호된 프라이빗 키를 사용하여 CSR을 생성합니다.
-
TPM2 공급자를 사용하여 CSR을 생성합니다.
sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csrCSR 생성을 진행하면 다음 정보를 입력하라는 메시지가 표시됩니다.
-
국가명(2자리 코드)
-
주 또는 지방 이름
-
시 이름
-
조직 이름
-
조직 단위 이름
-
일반 이름
-
이메일 주소
또는 OpenSSL 구성 파일을 사용하여 무인으로 CSR을 생성할 수도 있습니다. 자세한 내용은 OpenSSL 설명서
를 참조하세요. -
-
동일한 시스템에서 CSR을 생성하지 않는 경우 생성된 CSR을 AWS 자격 증명이 구성된 시스템에 복사합니다.
5단계: 사물 인증서 생성
AWS IoT 사물 인증서를 생성합니다. 사물 인증서 요청을 승인하는 방법에 대한 자세한 내용은 사물 인증서 생성 섹션을 참조하세요.
6단계: 사물 인증서를 TPM에 가져오기
-
사물 인증서를 디바이스에 복사합니다.
-
사물 인증서를 Greengrass 토큰에 추가합니다.
sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt사용 가능한 옵션은 다음과 같습니다.
--help-
도움말 메시지를 표시하고 종료합니다.
--label LABEL-
제거할 프로파일 레이블을 지정합니다.
--key-label KEY_LABEL-
관련된 프라이빗 키 레이블을 지정합니다.
--key-id KEY_ID-
관련된 프라이빗 키 ID를 16진수로 지정합니다.
cert-
추가할 X.509 PEM 인증서를 지정합니다.
7단계: PKCS#11 객체 URL 캡처
gnutls-bin 패키지에서 제공하는 p11tool을 사용하여 PKCS#11 토큰 URL 및 객체 URL을 가져옵니다.
-
Greengrass 토큰의 토큰 URL을 캡처합니다.
TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass" -
Greengrass 토큰의 객체 URL을 가져옵니다. 3단계에서 사용한 것과 동일한 핀을 사용합니다.
sudo p11tool --login --list-all "${TOKEN}"출력 예시:
Token 'greengrass' with URL 'pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass' requires user PIN Enter PIN: WARNING: Needed CKA_VALUE but didn't find encrypted blob Object 0: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=private Type: Private key (EC/ECDSA-SECP256R1) Label: greenkey Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE; ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 1: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=public Type: Public key (EC/ECDSA-SECP256R1) Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 Object 2: URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=cert Type: X.509 Certificate (EC/ECDSA-SECP256R1) Expires: Fri Dec 31 18:59:59 2049 Label: greenkey ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31 -
프라이빗 키 및 인증서의 객체 URL을 캡처합니다.
8단계: TPM2 지원을 사용하여 Greengrass 구성 및 설치
-
사물 인증서를 구성합니다. 자세한 내용은 사물 인증서 구성을 참조하세요.
-
의 HSM에 프라이빗 키와 인증서를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 설치하는 지침을 완료합니다AWS IoT Greengrass 코어 소프트웨어 설치. 그런 후, 다음 단계를 따라 PKCS#11 인터페이스를 통해 TPM2를 활용하도록 설치 구성을 진행합니다.
-
Greengrass 설치 프로그램 위치에 PKCS#11 공급자 구성 요소가 다운로드되어 저장되어 있는지 확인합니다.
-
텍스트 편집기를 사용하여
config.yaml구성 파일을 생성하고 설치 관리자에 제공합니다. 예를 들어 Linux 기반 시스템에서 다음 명령을 실행하면 GNUnano를 사용하여 파일을 생성할 수 있습니다.nano GreengrassInstaller/config.yaml -
다음 YAML 내용을 파일에 복사합니다. 이 부분 구성 파일은 시스템 파라미터, Greengrass nucleus 파라미터 및 PKCS#11 공급자 파라미터를 지정합니다.
--- system: certificateFilePath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=cert" privateKeyPath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=private" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "myThing" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.14.0" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" aws.greengrass.crypto.Pkcs11Provider: configuration: name: "tpm2_pkcs11" library: "/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so" slot: 1 userPin: "123456" -
설치 환경에 맞는 파라미터로 파일을 편집합니다.
-
7단계에서 캡처한 PKCS#11 URL을 사용하여 certificateFilePath 및 privateKeyPath를 Update certificateFilePath 및 privateKeyPath로 업데이트합니다.
-
AWS IoT 엔드포인트를 기반으로 iotDataEndpoint 및 iotCredEndpoint를 업데이트합니다.
-
aws.greengrass.crypto.Pkcs11Provider구성에서 플랫폼을 기반으로 라이브러리를 업데이트합니다.참고
위 예시는 x86_64 아키텍처 기준입니다. ARM64 디바이스의 경우 파일 경로가 유사하나 다를 수 있습니다.
-
-
AWS IoT Greengrass 코어 소프트웨어 설치에서 Greengrass 설치 단계를 완료합니다.
9단계: 설치 확인
이 단계에서는 TPM2 통합이 적용된 Greengrass가 올바르게 실행되고 있는지를 확인합니다.
-
Greengrass 서비스 상태를 확인합니다.
sudo systemctl status greengrass.service -
오류가 없는지 확인하기 위해 Greengrass 로그를 확인합니다.
sudo tail -f /greengrass/v2/logs/greengrass.log -
AWS IoT 콘솔
에서 디바이스 연결 상태를 확인합니다. -
AWS IoT Greengrass 콘솔
에 로그인합니다. -
관리에서 Greengrass 디바이스를 확장하고 코어 디바이스를 선택합니다.
-
디바이스가 연결되어 있는지 확인합니다. 디바이스가 연결되어 있으면 상태가
HEALTHY로 표시됩니다. 자세한 내용은 Greengrass 코어 디바이스 상태 확인 단원을 참조하십시오.
-
문제 해결
TPM2가 활성화된 Greengrass 디바이스 설정 또는 작동 중에 문제가 발생하면 다음 문제 해결 단계를 시도하세요.
-
주요 Greengrass 로그 파일을 확인합니다.
sudo tail -f /greengrass/v2/logs/greengrass.log -
PKCS#11 공급자 구성을 확인합니다.
sudo cat /greengrass/v2/config/effectiveConfig.yaml -
TPM2 서비스가 실행 중인지 확인합니다.
sudo systemctl status tpm2-abrmd.service -
TPM2 키에 액세스할 수 있는지 확인합니다.
sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects -
운영 체제에서 Clevis 또는 systemd-cryptenroll과 같은 TPM2 저장소 루트 키를 사용하는 전체 디스크 암호화가 설정되어 있는 경우, 이 도구들이 사용하는 영구 핸들과 동일한 핸들을 사용하지 않았는지 확인합니다. 동일한 핸들을 사용할 경우, 디스크 암호화 메커니즘에 영향을 줄 수 있습니다. 모든 생성 및 사용 중인 영구 핸들을 확인하려면 다음 명령을 실행합니다.
sudo tpm2_getcap handles-persistent
다음 단계
TPM2가 통합된 Greengrass 코어 디바이스 구성을 성공적으로 완료했으므로, 이제 다음 작업을 수행할 수 있습니다.
-
보안이 강화된 Greengrass 디바이스에 구성 요소를 배포합니다. 자세한 내용은 디바이스에 AWS IoT Greengrass 구성 요소 배포 섹션을 참조하세요.
-
TPM2 통합이 적용된 Greengrass 디바이스를 추가로 설정합니다.
Greengrass 디바이스 보안에 대한 자세한 내용은 의 보안 AWS IoT Greengrass 섹션을 참조하세요.