인증서 공급자를 사용하여 자체 관리형 AWS IoT Core 인증서 서명
AWS IoT 플릿 프로비저닝에서 AWS IoT Core 인증서 서명 요청(CSR)에 서명하는 인증서 공급자를 생성할 수 있습니다. 인증서 공급자는 Lambda 함수와 플릿 프로비저닝을 위한 CreateCertificateFromCsr MQTT API를 참조합니다. Lambda 함수는 CSR을 수락하고 서명된 클라이언트 인증서를 반환합니다.
AWS 계정에 인증서 공급자가 없는 경우 CreateCertificateFromCsr MQTT API가 플릿 프로비저닝에서 직접적으로 호출되어 CSR에서 인증서를 생성합니다. 인증서 공급자를 생성하면 CreateCertificateFromCsr MQTT API의 동작이 변경되고 이 MQTT API에 대한 모든 직접 호출이 인증서 공급자를 간접적으로 호출하여 인증서를 발급합니다.
AWS IoT Core 인증서 공급자를 사용하면 AWS Private CA, 기타 공개적으로 신뢰할 수 있는 CAs 또는 자체 퍼블릭 키 인프라(PKI)와 같은 프라이빗 인증 기관(CA)을 활용하여 CSR에 서명하는 솔루션을 구현할 수 있습니다. 또한 인증서 공급자를 사용하여 유효 기간, 서명 알고리즘, 발급자 및 확장과 같은 클라이언트 인증서의 필드를 사용자 지정할 수 있습니다.
중요
AWS 계정마다 하나의 인증서 공급자만 생성할 수 있습니다. 서명 동작 변경은 AWS 계정에서 인증서 공급자를 삭제할 때까지 CreateCertificateFromCsr MQTT API를 직접적으로 호출하는 전체 플릿에 적용됩니다.
이 주제에서 수행할 작업
플릿 프로비저닝에서 자체 관리형 인증서 서명의 작동 방식
주요 개념
다음 개념은 AWS IoT 플릿 프로비저닝에서 자체 관리형 인증서 서명이 작동하는 방식을 이해하는 데 도움이 되는 세부 정보를 제공합니다. 자세한 내용은 플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스 프로비저닝을 참조하세요.
- AWS IoT 플릿 프로비저닝
-
AWS IoT 플릿 프로비저닝을 사용하는 경우(플릿 프로비저닝의 약자) 디바이스가 처음 AWS IoT Core에 연결될 때 AWS IoT Core에서 디바이스 인증서 및 프라이빗 키를 생성하여 안전하게 해당 디바이스에 전달할 수 있습니다. 플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스를 AWS IoT Core에 연결할 수 있습니다.
- 인증서 서명 요청(CSR)
-
플릿 프로비저닝 프로세스에서 디바이스는 플릿 프로비저닝 MQTT API를 통해 AWS IoT Core에 요청합니다. 이 요청에는 클라이언트 인증서를 생성하기 위해 서명할 인증서 서명 요청(CSR)이 포함됩니다.
- 플릿 프로비저닝에서 AWS 관리형 인증서 서명
-
AWS 관리형은 플릿 프로비저닝에서 인증서 서명을 위한 기본 설정입니다. AWS 관리형 인증서 서명을 통해 AWS IoT Core는 자체 CA를 사용해 CSR에 서명합니다.
- 플릿 프로비저닝에서 서명하는 자체 관리형 인증서
-
자체 관리형은 플릿 프로비저닝에서 인증서 서명을 위한 또 다른 옵션입니다. 자체 관리형 인증서 서명을 사용하면 CSR에 서명할 AWS IoT Core 인증서 공급자를 생성합니다. 자체 관리형 인증서 서명을 사용하여 AWS 프라이빗 CA, 기타 공개적으로 신뢰할 수 있는 CA 또는 자체 퍼블릭 키 인프라(PKI)에서 생성된 CA를 사용하여 CSR에 서명할 수 있습니다.
- AWS IoT Core 인증서 공급자
-
AWS IoT Core 인증서 공급자(인증서 공급자의 약자)는 플릿 프로비저닝에서 자체 관리형 인증서 서명에 사용되는 고객 관리형 리소스입니다.
다이어그램
다음 다이어그램은 AWS IoT 플릿 프로비저닝에서 자체 인증 서명이 작동하는 방식을 간략히 보여줍니다.
-
새 IoT 디바이스가 제조되거나 플릿에 도입되면 AWS IoT Core를 사용하여 자체 인증하려면 클라이언트 인증서가 필요합니다.
-
플릿 프로비저닝 프로세스의 일환으로 디바이스는 플릿 프로비저닝 MQTT API를 통해 AWS IoT Core에 클라이언트 인증서를 요청합니다. 이 요청에는 인증서 서명 요청(CSR)이 포함됩니다.
-
AWS IoT Core는 인증서 공급자를 간접적으로 호출하고 CSR을 공급자에 입력으로 전달합니다.
-
인증서 공급자는 CSR을 입력으로 받아 클라이언트 인증서를 발급합니다.
AWS 관리형 인증서 서명의 경우 AWS IoT Core는 자체 CA를 사용하여 CSR에 서명하고 클라이언트 인증서를 발급합니다.
-
발급된 클라이언트 인증서를 사용하면 디바이스가 플릿 프로비저닝을 계속하고 AWS IoT Core와 보안 연결을 설정합니다.
인증서 공급자 Lambda 함수 입력
AWS IoT Core는 디바이스가 이를 통해 등록될 때 다음 객체를 Lambda 함수에 전송합니다. certificateSigningRequest의 값은 CreateCertificateFromCsr 요청에 제공된 프라이버시 강화 메일(PEM) 형식의 CSR입니다. principalId는 CreateCertificateFromCsr 요청 시 AWS IoT Core에 연결하는 데 사용되는 위탁자의 ID입니다. clientId는 MQTT 연결에 설정된 클라이언트 ID입니다.
{ "certificateSigningRequest": "string", "principalId": "string", "clientId": "string" }
인증서 공급자 Lambda 함수 반환 값
Lambda 함수는 certificatePem 값이 포함된 응답을 반환해야 합니다. 다음은 성공적인 응답의 예입니다. AWS IoT Core는 반환 값(certificatePem)을 사용하여 인증서를 생성합니다.
{ "certificatePem": "string" }
등록에 성공하면 CreateCertificateFromCsr는 CreateCertificateFromCsr 응답에 동일한 certificatePem을 반환합니다. 자세한 내용은 CreateCertificateFromCsr 페이로드 예제를 참조하세요.
Lambda 함수 예제
인증서 공급자를 생성하기 전에 Lambda 함수를 생성하여 CSR에 서명해야 합니다. 다음은 Python의 Lambda 함수에 대한 예제입니다. 이 함수는 프라이빗 CA와 SHA256WITHRSA 서명 알고리즘을 사용하여 입력 CSR에 서명하도록 AWS Private CA를 직접 호출합니다. 반환된 클라이언트 인증서는 1년 동안 유효합니다. AWS Private CA 및 프라이빗 CA 생성 방법에 대한 자세한 내용은 What is AWS Private CA? 및 프라이빗 CA 생성을 참조하세요.
import os import time import uuid import boto3 def lambda_handler(event, context): ca_arn = os.environ['CA_ARN'] csr = (event['certificateSigningRequest']).encode('utf-8') acmpca = boto3.client('acm-pca') cert_arn = acmpca.issue_certificate( CertificateAuthorityArn=ca_arn, Csr=csr, Validity={"Type": "DAYS", "Value": 365}, SigningAlgorithm='SHA256WITHRSA', IdempotencyToken=str(uuid.uuid4()) )['CertificateArn'] # Wait for certificate to be issued time.sleep(1) cert_pem = acmpca.get_certificate( CertificateAuthorityArn=ca_arn, CertificateArn=cert_arn )['Certificate'] return { 'certificatePem': cert_pem }
중요
-
Lambda 함수에서 반환하는 인증서는 인증서 서명 요청(CSR)과 동일한 주제 이름과 퍼블릭 키를 가져야 합니다.
-
Lambda 함수는 5초 후에 실행을 완료해야 합니다.
-
Lambda 함수는 인증서 공급자 리소스와 동일한 AWS 계정 및 리전에 있어야 합니다.
-
AWS IoT 서비스 위탁자에게 Lambda 함수에 대한 간접 호출 권한을 부여해야 합니다. 혼동된 대리자 문제를 방지하려면 호출 권한에 대해
sourceArn및sourceAccount를 설정하는 것이 좋습니다. 자세한 설명은 교차 서비스 혼동된 대리자 예방을 참조하세요.
Lambda에 대한 다음 리소스 기반 정책 예제는 AWS IoT에 Lambda 함수를 간접 호출할 수 있는 권한을 부여합니다.
플릿 프로비저닝을 위한 자체 관리형 인증서 서명
AWS CLI 또는 AWS Management 콘솔을 사용하여 플릿 프로비저닝에 자체 관리형 인증서 서명을 선택할 수 있습니다.
자체 관리형 인증서 서명을 선택하려면 플릿 프로비저닝에서 CSRs에 서명할 AWS IoT Core 인증서 공급자를 생성해야 합니다. AWS IoT Core는 CSR을 입력으로 사용하고 클라이언트 인증서를 반환하는 인증서 공급자를 간접 호출합니다. 인증서 공급자를 생성하려면 CreateCertificateProvider API 작업 또는 create-certificate-provider CLI 명령을 사용합니다.
참고
인증서 공급자를 생성하면 플릿 프로비저닝을 위한 CreateCertificateFromCsr API 동작이 변경되어 CreateCertificateFromCsr에 대한 모든 직접 호출이 인증서 공급자를 간접 호출하여 인증서를 생성합니다. 인증서 공급자가 생성된 후 이 동작이 변경되는 데 몇 분 정도 걸릴 수 있습니다.
aws iot create-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-1\ --accountDefaultForOperations CreateCertificateFromCsr
다음은 이 명령의 예시 출력을 보여줍니다.
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
자세한 내용은 AWS IoT API Reference의 CreateCertificateProvider 섹션을 참조하세요.
AWS Management 콘솔을 사용하여 자체 관리형 인증서 서명을 선택하려면 다음 단계를 따릅니다.
-
AWS IoT 콘솔
로 이동합니다. -
왼쪽 탐색의 보안 아래에서 인증서 서명을 선택합니다.
-
인증서 서명 페이지의 인증서 서명 세부 정보에서 인증서 서명 방법 편집을 선택합니다.
-
인증서 서명 방법 편집 페이지의 인증서 서명 방법에서 자체 관리형을 선택합니다.
-
자체 관리형 설정 섹션에서 인증서 공급자의 이름을 입력한 다음 Lambda 함수를 생성하거나 선택합니다.
-
인증서 서명 업데이트를 선택합니다.
AWS CLI 인증서 공급자에 대한 명령
인증서 공급자 생성
인증서 공급자를 생성하려면 CreateCertificateProvider API 작업 또는 create-certificate-provider CLI 명령을 사용합니다.
참고
인증서 공급자를 생성하면 플릿 프로비저닝을 위한 CreateCertificateFromCsr API 동작이 변경되어 CreateCertificateFromCsr에 대한 모든 직접 호출이 인증서 공급자를 간접 호출하여 인증서를 생성합니다. 인증서 공급자가 생성된 후 이 동작이 변경되는 데 몇 분 정도 걸릴 수 있습니다.
aws iot create-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-1\ --accountDefaultForOperations CreateCertificateFromCsr
다음은 이 명령의 예시 출력을 보여줍니다.
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
자세한 내용은 AWS IoT API Reference의 CreateCertificateProvider 섹션을 참조하세요.
인증서 공급자 업데이트
인증서 공급자를 업데이트하려면 UpdateCertificateProvider API 작업 또는 update-certificate-provider CLI 명령을 사용합니다.
aws iot update-certificate-provider \ --certificateProviderNamemy-certificate-provider\ --lambdaFunctionArnarn:aws:lambda:us-east-1:123456789012:function:my-function-2\ --accountDefaultForOperations CreateCertificateFromCsr
다음은 이 명령의 예시 출력을 보여줍니다.
{ "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" }
자세한 내용을 알아보려면 AWS IoT API Reference의 UpdateCertificateProvider 섹션을 참조하세요.
인증서 공급자 설명
인증서 공급자를 설명하려면 DescribeCertificateProvider API 작업 또는 describe-certificate-provider CLI 명령을 사용합니다.
aws iot describe-certificate-provider --certificateProviderNamemy-certificate-provider
다음은 이 명령의 예시 출력을 보여줍니다.
{ "certificateProviderName": "my-certificate-provider", "lambdaFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "accountDefaultForOperations": [ "CreateCertificateFromCsr" ], "creationDate": "2022-11-03T00:15", "lastModifiedDate": "2022-11-18T00:15" }
자세한 내용은 AWS IoT API Reference의 DescribeCertificateProvider 섹션을 참조하세요.
인증서 공급자 삭제
인증서 공급자를 삭제하려면 DeleteCertificateProvider API 작업 또는 delete-certificate-provider CLI 명령을 사용합니다. 인증서 공급자 리소스를 삭제하면 CreateCertificateFromCsr의 동작이 재개되고 AWS IoT는 CSR에서 AWS IoT가 서명한 인증서를 생성합니다.
aws iot delete-certificate-provider --certificateProviderNamemy-certificate-provider
이 명령은 출력을 생성하지 않습니다.
자세한 내용은 AWS IoT API Reference의 DeleteCertificateProvider 섹션을 참조하세요.
인증서 공급자 나열
AWS 계정 내의 인증서 공급자를 나열하려면 ListCertificateProviders API 작업 또는 list-certificate-providers CLI 명령을 사용합니다.
aws iot list-certificate-providers
다음은 이 명령의 예시 출력을 보여줍니다.
{ "certificateProviders": [ { "certificateProviderName": "my-certificate-provider", "certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider" } ] }
자세한 내용은 AWS IoT API Reference의 ListCertificateProvider 섹션을 참조하세요.