하드웨어 보안 통합
참고
이 기능은 Greengrass nucleus 구성 요소의 v2.5.3 이상에서 사용할 수 있습니다. AWS IoT Greengrass는 현재 Windows 코어 디바이스에서 이 기능을 지원하지 않습니다.
PKCS#11 인터페이스
AWS IoT Greengrass 코어 소프트웨어는 프라이빗 키와 X.509 인증서를 사용하여 AWS IoT 및 AWS IoT Greengrass 서비스에 대한 연결을 인증합니다. 보안 암호 관리자 구성 요소는 이 프라이빗 키를 사용하여 Greengrass 코어 디바이스에 배포하는 보안 암호를 안전하게 암호화 및 복호화합니다. HSM을 사용하도록 코어 디바이스를 구성하면 이러한 구성 요소는 HSM에 저장한 프라이빗 키와 인증서를 사용합니다.
Moquette MQTT 브로커 구성 요소 또한 로컬 MQTT 서버 인증서의 프라이빗 키를 저장합니다. 이 구성 요소는 구성 요소의 작업 폴더에 있는 디바이스의 파일 시스템에 프라이빗 키를 저장합니다. 현재 AWS IoT Greengrass에서 이 프라이빗 키 또는 인증서를 HSM에 저장하는 것은 지원되지 않습니다.
작은 정보
AWS 파트너 디바이스 카탈로그
주제
요구 사항
Greengrass 코어 디바이스에서 HSM을 사용하려면 다음과 같은 요구 사항을 충족해야 합니다.
-
Greengrass nucleus v2.5.3 이상이 코어 디바이스에 설치되어야 합니다. 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 호환되는 버전을 선택할 수 있습니다.
-
PKCS#11 공급자 구성 요소가 코어 디바이스에 설치되어야 합니다. 코어 디바이스에 AWS IoT Greengrass 코어 소프트웨어를 설치할 때 이 구성 요소를 다운로드하고 설치할 수 있습니다.
-
PKCS#1 v1.5
서명 체계와 RSA-2048 키 크기(또는 그 이상) 또는 ECC 키를 사용하는 RSA 키가 지원되는 하드웨어 보안 모듈. 참고
ECC 키와 함께 하드웨어 보안 모듈을 사용하려면 Greengrass nucleus v2.5.6 이상을 사용해야 합니다.
하드웨어 보안 모듈 및 보안 암호 관리자를 사용하려면 RSA 키가 있는 하드웨어 보안 모듈을 사용해야 합니다.
-
AWS IoT Greengrass 코어 소프트웨어가 런타임에서 로드(libdl 사용)하여 PKCS#11 함수를 간접적으로 호출할 수 있는 PKCS#11 공급자 라이브러리. PKCS#11 공급자 라이브러리는 다음 PKCS#11 API 작업을 구현해야 합니다.
-
C_Initialize
-
C_Finalize
-
C_GetSlotList
-
C_GetSlotInfo
-
C_GetTokenInfo
-
C_OpenSession
-
C_GetSessionInfo
-
C_CloseSession
-
C_Login
-
C_Logout
-
C_GetAttributeValue
-
C_FindObjectsInit
-
C_FindObjects
-
C_FindObjectsFinal
-
C_DecryptInit
-
C_Decrypt
-
C_DecryptUpdate
-
C_DecryptFinal
-
C_SignInit
-
C_Sign
-
C_SignUpdate
-
C_SignFinal
-
C_GetMechanismList
-
C_GetMechanismInfo
-
C_GetInfo
-
C_GetFunctionList
-
-
하드웨어 모듈은 PKCS#11 사양에 정의된 것처럼 슬롯 레이블로 확인할 수 있어야 합니다.
-
프라이빗 키와 인증서를 동일한 슬롯의 HSM에 저장해야 하고, HSM이 객체 ID를 지원하는 경우 동일한 객체 레이블과 객체 ID를 사용해야 합니다.
-
인증서와 프라이빗 키는 객체 레이블로 확인할 수 있어야 합니다.
-
프라이빗 키에 다음 권한이 있어야 합니다.
-
sign
-
decrypt
-
-
(선택 사항) 보안 암호 관리자 구성 요소를 사용하려면 버전 2.1.0 이상을 사용해야 하며, 프라이빗 키에 다음 권한이 있어야 합니다.
-
unwrap
-
wrap
-
하드웨어 보안 모범 사례
Greengrass 코어 디바이스에서 하드웨어 보안을 구성할 때 다음 모범 사례를 고려하세요.
-
내부 하드웨어 난수 생성기를 사용하여 HSM에서 직접 프라이빗 키를 생성합니다. 프라이빗 키는 HSM 내에 유지되므로 이 접근 방식은 다른 곳에서 생성한 프라이빗 키를 가져오는 것보다 더 안전합니다.
-
변경이 불가능하고 내보내기를 금지하도록 프라이빗 키를 구성합니다.
-
HSM 하드웨어 공급업체에서 하드웨어 보호 프라이빗 키를 사용하여 CSR(인증서 서명 요청)을 생성하는 데 권장하는 프로비저닝 도구를 사용하고, AWS IoT 콘솔 또는 API를 사용하여 클라이언트 인증서를 생성합니다.
참고
HSM에서 프라이빗 키를 생성할 때에는 키 교체 관련 모범 사례가 적용되지 않습니다.
하드웨어 보안이 적용된 AWS IoT Greengrass 코어 소프트웨어 설치
AWS IoT Greengrass 코어 소프트웨어를 설치할 때 HSM에서 생성한 프라이빗 키를 사용하도록 구성할 수 있습니다. 이 접근 방식은 보안 모범 사례를 따라 HSM에서 프라이빗 키를 생성하므로 프라이빗 키가 HSM 내에 유지됩니다.
하드웨어 보안이 적용된 AWS IoT Greengrass 코어 소프트웨어를 설치하려면 다음을 수행합니다.
-
HSM에서 프라이빗 키를 생성합니다.
-
프라이빗 키에서 CSR(인증서 서명 요청)을 생성합니다.
-
CSR에서 인증서를 생성합니다. AWS IoT 또는 다른 루트 CA(인증 기관)에서 서명한 인증서를 생성할 수 있습니다. 다른 루트 CA를 사용하는 방법에 대한 자세한 내용은 AWS IoT Core 개발자 안내서의 자체 클라이언트 인증서 생성을 참조하세요.
-
AWS IoT 인증서를 다운로드하고 HSM으로 가져옵니다.
-
PKCS#11 공급자 구성 요소와 HSM의 프라이빗 키 및 인증서를 사용하도록 지정하는 구성 파일에서 AWS IoT Greengrass 코어 소프트웨어를 설치합니다.
다음 설치 옵션 중 하나를 선택하여 하드웨어 보안이 적용된 AWS IoT Greengrass 코어 소프트웨어를 설치할 수 있습니다.
-
수동 설치
필요한 AWS 리소스를 수동으로 생성하고 하드웨어 보안을 구성하려면 이 옵션을 선택합니다. 자세한 내용은 수동 리소스 프로비저닝으로 AWS IoT Greengrass 코어 소프트웨어 설치 단원을 참조하십시오.
-
사용자 지정 프로비저닝을 사용한 설치
필요한 AWS 리소스를 자동으로 생성하고 하드웨어 보안을 구성하는 사용자 지정 Java 애플리케이션을 개발하려면 이 옵션을 선택합니다. 자세한 내용은 사용자 지정 리소스 프로비저닝으로 AWS IoT Greengrass 코어 소프트웨어 설치 단원을 참조하십시오.
현재 AWS IoT Greengrass는 자동 리소스 프로비저닝 또는 AWS IoT 플릿 프로비저닝을 사용하여 설치할 때 하드웨어 보안이 적용된 AWS IoT Greengrass 코어 소프트웨어 설치를 지원하지 않습니다.
기존 코어 디바이스에서 하드웨어 보안 구성
코어 디바이스의 프라이빗 키와 인증서를 HSM으로 가져와 하드웨어 보안을 구성할 수 있습니다.
고려 사항
-
코어 디바이스의 파일 시스템에 대한 루트 액세스 권한이 있어야 합니다.
-
이 절차에서는 AWS IoT Greengrass 코어 소프트웨어를 종료하므로 하드웨어 보안을 구성하는 동안 코어 디바이스가 오프라인 상태이면서 사용할 수 없습니다.
기존 코어 디바이스에서 하드웨어 보안을 구성하려면 다음을 수행합니다.
-
HSM을 초기화합니다.
-
PKCS#11 공급자 구성 요소를 코어 디바이스에 배포합니다.
-
AWS IoT Greengrass 코어 소프트웨어를 중지합니다.
-
코어 디바이스의 프라이빗 키와 인증서를 HSM으로 가져옵니다.
-
AWS IoT Greengrass 코어 소프트웨어의 구성 파일을 업데이트하여 HSM의 프라이빗 키와 인증서를 사용합니다.
-
AWS IoT Greengrass 코어 소프트웨어를 시작합니다.
1단계: 하드웨어 보안 모듈 초기화
다음 단계를 완료하여 코어 디바이스에서 HSM을 초기화합니다.
하드웨어 보안 모듈 초기화
-
HSM에서 PKCS#11 토큰을 초기화하고, 토큰의 슬롯 ID와 사용자 PIN을 저장합니다. HSM의 설명서를 확인하여 토큰을 초기화하는 방법을 알아보세요. 나중에 PKCS#11 공급자 구성 요소를 배포 및 구성할 때 슬롯 ID와 사용자 PIN을 사용합니다.
2단계: PKCS#11 공급자 구성 요소 배포
다음 단계를 완료하여 PKCS#11 공급자 구성 요소를 배포 및 구성합니다. 구성 요소를 하나 이상의 코어 디바이스에 배포할 수 있습니다.
-
AWS IoT Greengrass 콘솔
탐색 메뉴에서 구성 요소를 선택합니다. -
구성 요소 페이지의 퍼블릭 구성 요소 탭을 선택한 다음 aws.greengrass.crypto.Pkcs11Provider를 선택합니다.
-
aws.greengrass.crypto.Pkcs11Provider 페이지에서 배포를 선택합니다.
-
배포에 추가에서 수정할 기존 배포를 선택하거나 새 배포 생성을 선택하고 다음을 선택합니다.
-
새 배포 생성을 선택한 경우 배포의 대상 코어 디바이스 또는 사물 그룹을 선택합니다. 대상 지정 페이지의 배포 대상 에서 코어 디바이스 또는 사물 그룹을 선택하고 다음을 선택합니다.
-
구성 요소 선택 페이지의 퍼블릭 구성 요소에서 aws.greengrass.crypto.Pkcs11Provider를 선택하고 다음을 선택합니다.
-
구성 요소 구성 페이지에서 aws.greengrass.crypto.Pkcs11Provider를 선택하고 다음을 수행합니다.
-
구성 요소 구성을 선택합니다.
-
구성 aws.greengrass.crypto.Pkcs11Provider 모달에서 구성 업데이트 아래의 병합할 구성에 다음 구성 업데이트를 입력합니다. 다음 구성 파라미터를 대상 코어 디바이스의 값으로 업데이트합니다. 앞서 PKCS#11 토큰을 초기화한 슬롯 ID와 사용자 PIN을 지정합니다. 나중에 프라이빗 키와 인증서를 HSM의 이 슬롯으로 가져옵니다.
name
-
PKCS#11 구성의 이름입니다.
library
-
AWS IoT Greengrass 코어 소프트웨어가 libdl로 로드할 수 있는 PKCS#11 구현 라이브러리의 절대 파일 경로입니다.
slot
-
프라이빗 키와 디바이스 인증서가 포함된 슬롯의 ID입니다. 이 값은 슬롯 인덱스 또는 슬롯 레이블과 다릅니다.
userPin
-
슬롯 액세스에 사용할 사용자 PIN입니다.
{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
-
확인을 선택하여 모달을 닫고 다음을 선택합니다.
-
-
고급 설정 구성 페이지에서 기본 구성 설정을 유지하고 다음을 선택합니다.
-
검토 페이지에서 배포를 선택합니다.
배포를 완료하는 데 1분 정도 걸릴 수 있습니다.
PKCS#11 공급자 구성 요소를 배포하려면 components
객체에 aws.greengrass.crypto.Pkcs11Provider
를 포함하는 배포 문서를 생성하고 구성 요소에 대한 구성 업데이트를 지정합니다. 배포 만들기의 지침에 따라 새 배포를 생성하거나 기존 배포를 수정합니다.
다음 예제 부분 배포 문서를 통해 PKCS#11 공급자 구성 요소를 배포하고 구성하도록 지정합니다. 다음 구성 파라미터를 대상 코어 디바이스의 값으로 업데이트합니다. 프라이빗 키와 인증서를 HSM으로 가져올 때 나중에 사용할 슬롯 ID와 사용자 PIN을 저장합니다.
name
-
PKCS#11 구성의 이름입니다.
library
-
AWS IoT Greengrass 코어 소프트웨어가 libdl로 로드할 수 있는 PKCS#11 구현 라이브러리의 절대 파일 경로입니다.
slot
-
프라이빗 키와 디바이스 인증서가 포함된 슬롯의 ID입니다. 이 값은 슬롯 인덱스 또는 슬롯 레이블과 다릅니다.
userPin
-
슬롯 액세스에 사용할 사용자 PIN입니다.
{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{
...
, "components": {...
, "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }
배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다. AWS IoT Greengrass 서비스를 사용하여 배포 상태를 확인할 수 있습니다. AWS IoT Greengrass 코어 소프트웨어 로그를 확인하여 PKCS#11 공급자 구성 요소가 성공적으로 배포되었는지 확인할 수 있습니다. 자세한 내용은 다음 자료를 참조하세요.
배포에 실패하면 각 코어 디바이스에서 배포 문제를 해결할 수 있습니다. 자세한 내용은 AWS IoT Greengrass V2 문제 해결 단원을 참조하십시오.
3단계: 코어 디바이스에서 구성 업데이트
AWS IoT Greengrass 코어 소프트웨어는 디바이스의 작동 방식을 지정하는 구성 파일을 사용합니다. 이 구성 파일에는 디바이스가 AWS 클라우드에 연결하는 데 사용하는 프라이빗 키와 인증서를 찾을 수 있는 위치가 포함됩니다. 다음 단계를 완료하여 코어 디바이스의 프라이빗 키 및 인증서를 HSM으로 가져오고 HSM을 사용하도록 구성 파일을 업데이트합니다.
하드웨어 보안을 사용하도록 코어 디바이스의 구성 업데이트
-
AWS IoT Greengrass 코어 소프트웨어를 중지합니다. systemd를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 구성한 경우 다음 명령을 실행하여 소프트웨어를 중지할 수 있습니다.
sudo systemctl stop greengrass.service
-
코어 디바이스의 프라이빗 키 및 인증서 파일을 찾습니다.
의
/config/effectiveConfig.yaml/greengrass/v2
system.privateKeyPath
및system.certificateFilePath
속성을 확인하여 이러한 파일의 위치를 찾을 수도 있습니다. -
프라이빗 키와 인증서를 HSM으로 가져옵니다. 프라이빗 키와 인증서를 가져오는 방법을 알아보려면 HSM 설명서를 확인하세요. 앞서 PKCS#11 토큰을 초기화한 슬롯 ID와 사용자 PIN을 사용하여 프라이빗 키와 인증서를 가져옵니다. 프라이빗 키와 인증서에 동일한 객체 레이블과 객체 ID를 사용해야 합니다. 각 파일을 가져올 때 지정한 객체 레이블을 저장합니다. AWS IoT Greengrass 코어 소프트웨어 구성을 업데이트하여 HSM의 프라이빗 키와 인증서를 사용할 때 이 레이블을 사용합니다.
-
AWS IoT Greengrass 코어 구성을 업데이트하여 HSM의 프라이빗 키와 인증서를 사용합니다. 구성을 업데이트하려면 AWS IoT Greengrass 코어 구성 파일을 수정하고 업데이트된 구성 파일로 AWS IoT Greengrass 코어 소프트웨어를 실행하여 새 구성을 적용합니다.
다음을 따릅니다.
-
AWS IoT Greengrass 코어 구성 파일의 백업을 생성합니다. 하드웨어 보안을 구성할 때 문제가 발생하면 이 백업을 사용하여 코어 디바이스를 복원할 수 있습니다.
sudo cp
/config/effectiveConfig.yaml ~/ggc-config-backup.yaml/greengrass/v2
-
텍스트 편집기에서 AWS IoT Greengrass 코어 구성 파일을 엽니다. 예를 들어 다음 명령을 실행하여 GNU nano를 사용해 파일을 편집할 수 있습니다.
를 Greengrass 루트 폴더의 경로로 바꿉니다./greengrass/v2
sudo nano
/config/effectiveConfig.yaml/greengrass/v2
-
system.privateKeyPath
의 값을 HSM의 프라이빗 키에 대한 PKCS#11 URI로 바꿉니다.iotdevicekey
를 앞서 프라이빗 키와 인증서를 가져온 객체 레이블로 바꿉니다.pkcs11:object=
iotdevicekey
;type=private -
system.certificateFilePath
의 값을 HSM의 인증서에 대한 PKCS#11 URI로 바꿉니다.iotdevicekey
를 앞서 프라이빗 키와 인증서를 가져온 객체 레이블로 바꿉니다.pkcs11:object=
iotdevicekey
;type=cert
이 단계를 완료한 후 AWS IoT Greengrass 코어 구성 파일의
system
속성은 다음 예제와 비슷해야 합니다.system: certificateFilePath: "pkcs11:object=
iotdevicekey
;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey
;type=private" rootCaPath: "
/rootCA.pem" rootpath: "/greengrass/v2
" thingName: "/greengrass/v2
MyGreengrassCore
" -
-
업데이트된
effectiveConfig.yaml
파일에 구성을 적용합니다.--init-config
파라미터로Greengrass.jar
을 실행하여effectiveConfig.yaml
에 구성을 적용합니다.
를 Greengrass 루트 폴더의 경로로 바꿉니다./greengrass/v2
sudo java -Droot="
" \ -jar/greengrass/v2
/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config/greengrass/v2
/config/effectiveConfig.yaml/greengrass/v2
-
AWS IoT Greengrass 코어 소프트웨어를 시작합니다. systemd를 사용하여 AWS IoT Greengrass 코어 소프트웨어를 시스템 서비스로 구성한 경우 다음 명령을 실행하여 소프트웨어를 시작할 수 있습니다.
sudo systemctl start greengrass.service
자세한 내용은 AWS IoT Greengrass 코어 소프트웨어 실행 단원을 참조하십시오.
-
AWS IoT Greengrass 코어 소프트웨어 로그를 확인하여 소프트웨어가 시작되고 AWS 클라우드에 연결되어 있는지 확인합니다. AWS IoT Greengrass 코어 소프트웨어는 프라이빗 키와 인증서를 사용하여 AWS IoT 및 AWS IoT Greengrass 서비스에 연결합니다.
sudo tail -f
/logs/greengrass.log/greengrass/v2
다음 INFO 수준 로그 메시지는 AWS IoT Greengrass 코어 소프트웨어가 AWS IoT 및 AWS IoT Greengrass 서비스에 성공적으로 연결되었음을 나타냅니다.
2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
-
(선택 사항) AWS IoT Greengrass 코어 소프트웨어가 HSM의 프라이빗 키 및 인증서로 작동하는지 확인한 후 디바이스의 파일 시스템에서 프라이빗 키 및 인증서 파일을 삭제합니다. 다음 명령을 실행하고 파일 경로를 프라이빗 키 및 인증서 파일의 경로로 바꿉니다.
sudo rm
sudo rm
/privKey.key/greengrass/v2
/thingCert.crt/greengrass/v2
PKCS#11 지원 기능이 없는 하드웨어 사용
PKCS#11 라이브러리는 일반적으로 하드웨어 공급업체가 제공하고 오픈 소스입니다. 예를 들어, 표준 호환 하드웨어(예: TPM1.2)를 사용하면 기존 오픈 소스 소프트웨어를 사용할 수 있습니다. 그러나 하드웨어에 해당하는 PKCS#11 라이브러리 구현이 없는 경우 또는 사용자 지정 PKCS#11 공급자를 쓰려는 경우 통합과 관련해 궁금한 점이 있으면 Amazon Web Services Enterprise Support 담당자에게 문의해야 합니다.