Cloud IoT Core는 JSON 웹 토큰(JWT)을 사용하여 기기별 공개 키/비공개 키 인증을 제공합니다. Cloud IoT Core는 추가 보안을 위해 레지스트리 수준의 CA 인증서와 비교하여 기기 공개키 인증서를 확인할 수 있습니다.
레지스트리 수준 CA 인증서는 추가적인 보안을 위한 선택적 기능이므로 반드시 사용할 필요는 없습니다.
확인된 인증서는 공개 키/비공개 키 쌍이 합법적인 기기에 속해 있음을 증명합니다. 이는 기기 제조업체가 공개 키와 비공개 키를 만들고, 기기에 비공개 키를 저장하고, CA에서 서명한 공개 키를 가지고 있는 경우에 특히 유용합니다.
CA 인증서 생성
Cloud IoT Core는 자체 서명 CA 인증서 및 신뢰할 수 있는 제3자가 생성한 CA 인증서를 기준으로 기기 공개키 인증서를 확인할 수 있습니다. 두 가지 종류의 CA 인증서 모두 동일한 방식으로 사용되지만 각각 다른 방식으로 생성됩니다.
자체 서명 CA 인증서 | 타사 CA 인증서 |
---|---|
기기 비공개 키 소유자가 인증서를 생성할 수 있습니다. | 신뢰할 수 있는 제3자가 인증서를 생성해야 합니다. |
기기 비공개 키 소유자가 인증서에 서명하는 CA 비공개 키를 만들고 소유합니다. | 제3자가 인증서에 서명하는 CA 비공개 키를 만들고 소유합니다. |
무료로 생성할 수 있습니다. | 제3자가 인증서 생성에 대한 비용을 청구하고 CA와 함께 신뢰 체인을 구축합니다. |
자체 서명 CA 인증서
자체 서명 CA 인증서 및 해당 CA 비공개 키를 생성하려면 다음 단계를 완료하세요.
- CA 비공개 키를 만듭니다. CA 비공개 키는 CA 인증서와 고유하게 연결됩니다. 다음 명령어를 사용하여 2,048비트 RSA 비공개 키를 생성할 수 있습니다.
openssl genpkey -algorithm RSA -out ca_private.pem -pkeyopt rsa_keygen_bits:2048
- 자체 서명 CA 인증서를 생성합니다. 다음 명령어는 CA 인증서 요구사항을 충족하는 RS256 인증서를 생성합니다.
openssl req -x509 -new -nodes -key ca_private.pem -sha256 -out ca_cert.pem -subj "/CN=unused"
자세한 예시는 자체 서명 X.509 인증서가 있는 RSA 키 생성 또는 자체 서명 X.509 인증서로 ES256 키 생성을 참조하세요.
타사 CA 인증서
신뢰할 수 있는 제3자로부터 CA 인증서를 가져오려면 CA에 CSR을 제출합니다. CA는 CA 비공개 키로 서명된 해당 기기 공개키 인증서를 포함하는 CA 인증서를 전송합니다. 타사 CA 인증서를 가져오려면 다음 안내를 따르세요.
- 기기 비공개 키를 만듭니다. 다음 명령어를 사용하여 2,048비트 RSA 비공개 키를 생성할 수 있습니다.
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- 기기 비공개 키에서 CSR을 만듭니다. CSR은 비공개 키 보안 비밀을 유지합니다. 다음 명령어는 SHA-256 서명으로 CSR을 생성합니다.
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused"
- CSR을 CA로 보내고 인증서를 적용합니다. CA마다 다른 애플리케이션 프로세스가 있습니다. 예를 들어 CA에 계정을 등록하고 CSR을 온라인 포털에 업로드해야 할 수 있습니다.
CA 인증서 요구사항
모든 레지스트리 수준 CA 인증서는 다음 요구사항을 충족해야 합니다.
- CA 인증서는 X.509v3(RFC 5280) 형식이어야 하며 base64로 인코딩되고
-----BEGIN CERTIFICATE-----
및-----END CERTIFICATE-----
으로 래핑되어야 합니다. - CA 인증서는 지원되는 알고리즘으로 암호화된
.pem
파일이어야 합니다.- 최소 2048비트의 RSA
- NIST P-256
- CA 인증서가 유효해야 합니다. 레지스트리에 기기를 추가하려고 하는데 레지스트리의 인증서가 만료된 경우 Cloud IoT Core가 오류를 반환합니다.
- 원하는 경우 Google Cloud CLI를 사용하여 인증서의 만료 시간을 추적할 수 있습니다.
레지스트리에 CA 인증서 추가
CA 인증서가 있으면 레지스트리에 추가합니다. Cloud IoT Core는 레지스트리 수준에서 CA 인증서를 확인하므로 모든 CA 인증서가 레지스트리와 연결되어야 합니다. 인증서는 여러 레지스트리에 추가할 수 있습니다. Google Cloud 콘솔, API 또는 gcloud를 사용하여 CA 인증서를 추가할 수 있습니다.
콘솔
- Google Cloud 콘솔에서 레지스트리 페이지로 이동합니다.
페이지 상단에서 레지스트리 만들기를 클릭합니다.
CA 인증서 추가를 클릭하여 인증서를 입력하거나 붙여넣거나 인증서
.pem
파일을 업로드합니다. 레지스트리를 처음 만들 때 하나의 인증서만 추가할 수 있지만 나중에 최대 10개까지 인증서를 추가할 수 있습니다.
기기 레지스트리 세부정보 페이지에는 기존 인증서를 표시하고 인증서를 추가할 수 있는 인증서 탭이 있습니다.
gcloud
CA 인증서를 추가하거나 관리하려면 gcloud iot registries credentials
명령어 중 하나를 실행합니다.
레지스트리에 새 인증서를 추가하려면 gcloud iot registries credentials create
명령어를 실행합니다.
gcloud iot registries credentials create \ --path=PATH_TO_CERTIFICATE \ --project=PROJECT_ID \ --registry=REGISTRY_ID \ --region=REGION
API
DeviceRegistry
리소스에는 레지스트리 수준에서 CA 인증서를 정의하기 위한 필드가 포함됩니다.
- 기기 사용자 인증 정보 확인을 위해 최대 10개의 사용자 인증 정보(
RegistryCredential
객체)를 정의할 수 있습니다. - 각
RegistryCredential
객체는 인증서 데이터를 지정하는 데 사용할 수 있는PublicKeyCertificate
객체를 포함하며 출력 전용 필드는 X.509 인증서 세부정보를 제공합니다.
기존 기기에 미치는 영향
인증서를 추가하거나 삭제해도 레지스트리의 기존 기기는 연결 여부에 관계없이 영향을 받지 않습니다. 기기의 연결된 레지스트리 수준 인증서가 취소 또는 삭제되거나 수정된 경우 기기는 레지스트리 수준 인증서가 적용될 때 사용했던 공개키 인증서를 사용할 수 없지만, 이 인증서의 비공개 키로 Cloud IoT Core에 여전히 연결할 수 있습니다.
공개 키 인증서 생성
Cloud IoT Core는 CA 비공개 키로 서명된 기기 공개키 인증서를 확인합니다.
서명된 공개키 인증서를 생성하려면 다음 안내를 따르세요.
- 레지스트리가 자체 서명된 CA 인증서로 구성된 경우 CA 비공개 키로 공개 키에 서명합니다.
- 기기 비공개 키를 만듭니다. 이 키는 CA 인증서 및 CA 비공개 키와 다릅니다. 다음 명령어를 사용하여 2,048비트 RSA 비공개 키를 생성할 수 있습니다.
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
- 기기 비공개 키에서 CSR을 만듭니다. 다음 명령어는 SHA-256 서명으로 CSR을 생성합니다.
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused-device"
- 공개 키를 만들고 CA 비공개 키로 서명합니다. 다음 명령어는 공개키 인증서 요구사항을 충족하는 서명된 RS256 인증서를 생성합니다.
openssl x509 -req -in rsa_cert.csr -CA ca_cert.pem -CAkey ca_private.pem \ -CAcreateserial -sha256 -out rsa_cert.pem
- 기기 비공개 키를 만듭니다. 이 키는 CA 인증서 및 CA 비공개 키와 다릅니다. 다음 명령어를 사용하여 2,048비트 RSA 비공개 키를 생성할 수 있습니다.
- 레지스트리가 타사 CA 인증서로 구성된 경우 CA 인증서에 CA 비공개 키로 서명된 기기 공개키 인증서가 포함됩니다. 다음 명령어를 사용하여 RSA CA 인증서에서 RSA 기기 공개키 인증서를 추출할 수 있습니다.
openssl rsa -in ca_cert.pem -pubout -out rsa_cert.pem
공개 키 인증서 요구사항
레지스트리 수준 CA 인증서와 대조하려면 기기 공개키 인증서가 기기 사용자 인증 정보에 대한 표준 Cloud IoT Core 요구사항과 함께 다음 요구사항을 충족해야 합니다.
- CA 인증서는 X.509v3(RFC 5280) 형식이어야 하며 base64로 인코딩되고
-----BEGIN CERTIFICATE-----
및-----END CERTIFICATE-----
으로 래핑되어야 합니다. - 기기 공개키 인증서는 레지스트리 수준에서 특정 CA 인증서로 서명되어야 합니다. 중개 CA는 지원되지 않습니다.
- 기기 공개키 인증서는 레지스트리 수준 인증서와 동일하지 않아야 합니다.
- 원시 공개 키가 없습니다.
- 지원되는 JWT 알고리즘:
- 기기 공개키 인증서가 유효해야 합니다. 만료된 인증서로 기기를 만들거나 업데이트하려고 하면 Cloud IoT Core에서 오류가 반환됩니다.
- 원하는 경우 Google Cloud CLI를 사용하여 인증서의 만료 시간을 추적할 수 있습니다.
이러한 요구사항은 기기를 만들거나 업데이트할 때 적용됩니다. 레지스트리에 정의된 CA 인증서가 없으면 모든 기기 공개 키가 무조건 허용됩니다.
공개 키 인증서 확인
Cloud IoT Core는 기기를 만들거나 공개 키를 수정할 때 레지스트리 수준 CA 인증서와 비교하여 기기 공개키 인증서를 확인합니다. Google Cloud 콘솔, API 또는 gcloud를 사용하여 기기를 만들 수 있습니다. Google Cloud 콘솔 또는 API를 사용하여 공개 키를 추가, 삭제, 수정할 수 있습니다.
콘솔
- Google Cloud 콘솔에서 레지스트리 페이지로 이동합니다.
기기의 레지스트리 ID를 클릭합니다.
왼쪽의 레지스트리 메뉴에서 기기를 클릭합니다.
기기 만들기를 클릭합니다.
기기의 공개 키를 수정하려면 기기 페이지에서 기기의 ID를 클릭한 다음 페이지 상단에서 기기 수정을 클릭합니다.
기기를 간략하게 설명하거나 식별하는 데 도움이 되는 기기 ID를 입력합니다. (이 필드를 나중에 수정할 수 없습니다.) 기기 이름 지정 및 크기 요구사항에 대한 자세한 내용은 허용되는 문자 및 크기 요구사항을 참조하세요.
기기 통신에 대해 허용 또는 차단을 선택합니다. 이 옵션을 사용하면 필요한 경우(예: 기기가 제대로 작동하지 않을 때) 통신을 차단할 수 있습니다. 대부분의 경우 기기를 처음 만들 때 통신을 허용합니다.
공개 키 형식에서 RS256_X509 또는 ES256_X509를 선택합니다. 공개 키 값 필드에 기기 공개키 인증서를 붙여넣습니다. 또한 키의 만료 날짜를 설정할 수 있습니다.
기존 기기에 키를 추가하려면 기기 세부정보 페이지에서 공개 키 추가를 클릭합니다.
기존 기기에서 키를 삭제하려면 다음 안내를 따르세요.
- 기기 세부정보 페이지에서 키 옆에 있는 박스를 선택합니다.
- 삭제를 클릭하여 키를 삭제합니다.
키를 수정하려면 기기 세부정보 페이지에서 키 옆에 있는 수정 아이콘을 클릭합니다.
기기 공개키 인증서를 입력하는 데 사용할 입력 방법을 선택합니다.
- 수동: 기기 공개키 인증서를 복사하여 공개 키 값 필드에 붙여넣습니다.
- 업로드: 공개 키 값 필드에서 찾아보기를 클릭하여 컴퓨터의 파일을 선택합니다.
키 및 값 필드를 사용하여 일련 번호와 같은 선택적인 기기 메타데이터를 추가합니다. 메타데이터 키-값 이름 지정 및 크기 요구사항에 대한 자세한 내용은 허용되는 문자 및 크기 요구사항을 참조하세요.
Cloud Logging 수준을 선택하여 Cloud Logging으로 전송되는 기기 이벤트를 결정합니다.
만들기를 클릭하여 기기를 만듭니다.
gcloud
기기를 만들려면 gcloud iot devices create
명령어를 실행하세요.
기기 인증서 요구사항을 충족하는 RS256 사용자 인증 정보가 있는 기기를 만들려면 다음 명령어를 실행합니다.
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=rsa_cert.pem,type=rsa-x509-pem
기기 인증서 요구사항을 충족하는 ES256 사용자 인증 정보가 있는 기기를 만들려면 다음 명령어를 실행합니다.
gcloud iot devices create DEVICE_ID \ --project=PROJECT_ID \ --region=REGION \ --registry=REGISTRY_ID \ --public-key path=ec_cert.pem,type=es256-x509-pem
API
다음 메서드를 사용하여 기기를 만들거나 공개 키를 수정합니다.
- 기기
create
메서드는 기기를 레지스트리에 추가합니다. - 기기
patch
메서드를 사용하여 공개 키를 추가, 삭제, 수정
공개 키는 Cloud IoT Core API에서 Device
리소스의 credentials
필드에 지정됩니다. 자세한 내용은 기기 리소스의 DeviceCredential
을 참조하세요.
하나 이상의 레지스트리 수준 인증서가 있으므로 Device
리소스는 기기 인증서 요구사항을 충족해야 합니다.
Device.credentials[i].public_key.key
필드는 기기 공개키 인증서의 콘텐츠(헤더 및 바닥글 포함)로 설정되어야 합니다.Device.credentials[i].public_key.format
필드는RSA_X509_PEM
또는ES256_X509_PEM
으로 설정되어야 합니다.