

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

# 인증서 공급자를 사용한 자체 관리형 AWS IoT Core 인증서 서명
<a name="provisioning-cert-provider"></a>

 AWS IoT Core 인증서 공급자를 생성하여 AWS IoT 플릿 프로비저닝에서 인증서 서명 요청(CSRs)에 서명할 수 있습니다. 인증서 공급자는 Lambda 함수와 [플릿 프로비저닝을 위한 `CreateCertificateFromCsr` MQTT API](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)를 참조합니다. Lambda 함수는 CSR을 수락하고 서명된 클라이언트 인증서를 반환합니다.

에 인증서 공급자가 없는 경우 AWS 계정[CreateCertificateFromCsr MQTT API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)가 플릿 프로비저닝에서 호출되어 CSR에서 인증서를 생성합니다. 인증서 공급자를 생성하면 [CreateCertificateFromCsr MQTT API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)의 동작이 변경되고 이 MQTT API에 대한 모든 직접 호출이 인증서 공급자를 간접적으로 호출하여 인증서를 발급합니다.

 AWS IoT Core 인증서 공급자를 사용하면 , [AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)기타 공개적으로 신뢰할 수 있는 CAs 또는 자체 퍼블릭 키 인프라(PKI)와 같은 프라이빗 인증 기관(CAs 활용하여 CSR에 서명하는 솔루션을 구현할 수 있습니다. 또한 인증서 공급자를 사용하여 유효 기간, 서명 알고리즘, 발급자 및 확장과 같은 클라이언트 인증서의 필드를 사용자 지정할 수 있습니다.

**중요**  
 AWS 계정마다 하나의 인증서 공급자만 생성할 수 있습니다. 서명 동작 변경은 AWS 계정에서 인증서 공급자를 삭제할 때까지 [CreateCertificateFromCsr MQTT API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr)를 직접적으로 호출하는 전체 플릿에 적용됩니다.

**Topics**
+ [플릿 프로비저닝에서 자체 관리형 인증서 서명의 작동 방식](#provisioning-cert-provider-how-it-works)
+ [인증서 공급자 Lambda 함수 입력](#provisioning-cert-provider-lambda-input)
+ [인증서 공급자 Lambda 함수 반환 값](#provisioning-cert-provider-lambda-return)
+ [Lambda 함수 예제](#provisioning-cert-provider-lambda)
+ [플릿 프로비저닝을 위한 자체 관리형 인증서 서명](#provisioning-self-certificate-signing)
+ [AWS CLI 인증서 공급자에 대한 명령](#provisioning-cert-provider-cli)

## 플릿 프로비저닝에서 자체 관리형 인증서 서명의 작동 방식
<a name="provisioning-cert-provider-how-it-works"></a>

### 주요 개념
<a name="provisioning-cert-provider-concepts"></a>

다음 개념은 AWS IoT 플릿 프로비저닝에서 자체 관리형 인증서 서명이 작동하는 방식을 이해하는 데 도움이 되는 세부 정보를 제공합니다. 자세한 내용은 [플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스 프로비저닝](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html)을 참조하세요.

**AWS IoT 플릿 프로비저닝**  
 AWS IoT 플릿 프로비저닝(플릿 프로비저닝의 약자)을 사용하면는 디바이스 인증서를 AWS IoT Core 생성하고 디바이스가 처음에 연결할 때 디바이스 AWS IoT Core 에 안전하게 전송합니다. 플릿 프로비저닝을 사용하여 디바이스 인증서가 없는 디바이스를 AWS IoT Core에 연결할 수 있습니다.

**인증서 서명 요청(CSR)**  
플릿 프로비저닝 프로세스에서 디바이스는 [플릿 프로비저닝 MQTT API](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html)를 통해 AWS IoT Core 에 요청합니다. 이 요청에는 클라이언트 인증서를 생성하기 위해 서명할 인증서 서명 요청(CSR)이 포함됩니다.

**AWS 플릿 프로비저닝에서 관리형 인증서 서명**  
AWS 관리형는 플릿 프로비저닝에서 인증서 서명을 위한 기본 설정입니다. AWS 관리형 인증서 서명을 통해 AWS IoT Core 는 자체 CACSRs에 서명합니다. CAs

**플릿 프로비저닝에서 서명하는 자체 관리형 인증서**  
자체 관리형은 플릿 프로비저닝에서 인증서 서명을 위한 또 다른 옵션입니다. 자체 관리형 인증서 서명을 사용하면 CSR에 서명할 AWS IoT Core 인증서 공급자를 생성합니다. 자체 관리형 인증서 서명을 사용하여 AWS 프라이빗 CA, 기타 공개적으로 신뢰할 수 있는 CA 또는 자체 퍼블릭 키 인프라(PKI)에서 생성된 CA를 사용하여 CSR에 서명할 수 있습니다.

**AWS IoT Core 인증서 공급자**  
AWS IoT Core 인증서 공급자(인증서 공급자의 약자)는 플릿 프로비저닝에서 자체 관리형 인증서 서명에 사용되는 고객 관리형 리소스입니다.

### 다이어그램
<a name="provisioning-cert-provider-diagram"></a>

다음 다이어그램은 AWS IoT 플릿 프로비저닝에서 자체 인증서 서명이 작동하는 방식을 간략히 보여줍니다.

![\[AWS IoT Core 플릿 프로비저닝을 위한 인증서 공급자\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ 새 IoT 디바이스가 제조되거나 플릿에 도입되면 자체 인증을 위해 클라이언트 인증서가 필요합니다 AWS IoT Core.
+ 플릿 프로비저닝 프로세스의 일환으로 디바이스는 플[릿 프로비저닝 MQTT APIs](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html)를 통해에 AWS IoT Core 클라이언트 인증서를 요청합니다. 이 요청에는 인증서 서명 요청(CSR)이 포함됩니다.
+ AWS IoT Core 는 인증서 공급자를 호출하고 CSR을 공급자에게 입력으로 전달합니다.
+ 인증서 공급자는 CSR을 입력으로 받아 클라이언트 인증서를 발급합니다.

   AWS 관리형 인증서 서명의 경우는 자체 CA를 사용하여 CSR에 AWS IoT Core 서명하고 클라이언트 인증서를 발급합니다.
+ 발급된 클라이언트 인증서를 사용하면 디바이스가 플릿 프로비저닝을 계속하고 AWS IoT Core와 보안 연결을 설정합니다.

## 인증서 공급자 Lambda 함수 입력
<a name="provisioning-cert-provider-lambda-input"></a>

AWS IoT Core 는 디바이스가 Lambda 함수에 등록할 때 다음 객체를 Lambda 함수로 전송합니다. `certificateSigningRequest`의 값은 `CreateCertificateFromCsr` 요청에 제공된 [프라이버시 강화 메일(PEM) 형식](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html)의 CSR입니다. `principalId`는 `CreateCertificateFromCsr` 요청 AWS IoT Core 시에 연결하는 데 사용되는 보안 주체의 ID입니다. `clientId`는 MQTT 연결에 설정된 클라이언트 ID입니다.

```
{
	"certificateSigningRequest": "string",
	"principalId": "string",
	"clientId": "string"
}
```

## 인증서 공급자 Lambda 함수 반환 값
<a name="provisioning-cert-provider-lambda-return"></a>

Lambda 함수는 `certificatePem` 값이 포함된 응답을 반환해야 합니다. 다음은 성공적인 응답의 예입니다. AWS IoT Core 는 반환 값(`certificatePem`)을 사용하여 인증서를 생성합니다.

```
{
	"certificatePem": "string"
}
```

등록에 성공하면 `CreateCertificateFromCsr`는 `CreateCertificateFromCsr` 응답에 동일한 `certificatePem`을 반환합니다. 자세한 내용은 [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 페이로드 예제를 참조하세요.

## Lambda 함수 예제
<a name="provisioning-cert-provider-lambda"></a>

인증서 공급자를 생성하기 전에 Lambda 함수를 생성하여 CSR에 서명해야 합니다. 다음은 Python의 Lambda 함수에 대한 예제입니다. 이 함수는 프라이빗 CA와 `SHA256WITHRSA` 서명 알고리즘을 사용하여 입력 CSR에 서명하도록 AWS Private CA 를 직접 호출합니다. 반환된 클라이언트 인증서는 1년 동안 유효합니다. AWS Private CA 및 프라이빗 CA 생성 방법에 대한 자세한 내용은 [AWS 프라이빗 CA란 무엇입니까?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) 및 [프라이빗 CA 생성을 참조하세요](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html).

```
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 함수에 대한 호출 권한을 부여해야 합니다. [혼동된 대리자 문제](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)를 방지하려면 호출 권한에 대해 `sourceArn` 및 `sourceAccount`를 설정하는 것이 좋습니다. 자세한 설명은 [교차 서비스 혼동된 대리자 예방](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html)을 참조하세요.

[Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html)에 대한 다음 리소스 기반 정책 예제는 AWS IoT 에 Lambda 함수를 간접 호출할 수 있는 권한을 부여합니다.

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Id": "InvokePermission",
	"Statement": [
		{
			"Sid": "LambdaAllowIotProvider",
			"Effect": "Allow",
			"Principal": {
				"Service": "iot.amazonaws.com"
			},
			"Action": "lambda:InvokeFunction",
			"Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
			"Condition": {
				"StringEquals": {
					"AWS:SourceAccount": "123456789012"
				},
				"ArnLike": {
				"AWS:SourceArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider/my-certificate-provider"
				}
			}
		}
	]
}
```

## 플릿 프로비저닝을 위한 자체 관리형 인증서 서명
<a name="provisioning-self-certificate-signing"></a>

 AWS CLI 또는 AWS Management Console을 사용하여 플릿 프로비저닝에 자체 관리형 인증서 서명을 선택할 수 있습니다.

### AWS CLI
<a name="provisioning-self-certificate-signing-cli"></a>

자체 관리형 인증서 서명을 선택하려면 인증서 공급자를 AWS IoT Core 생성하여 플릿 프로비저닝에서 CSRs에 서명해야 합니다. AWS IoT Core 는 인증서 공급자를 호출하여 CSR을 입력으로 받아 클라이언트 인증서를 반환합니다. 인증서 공급자를 생성하려면 `CreateCertificateProvider` API 작업 또는 `create-certificate-provider` CLI 명령을 사용합니다.

**참고**  
인증서 공급자를 생성하면 [플릿 프로비저닝을 위한 `CreateCertificateFromCsr` API](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 동작이 변경되어 `CreateCertificateFromCsr`에 대한 모든 직접 호출이 인증서 공급자를 간접 호출하여 인증서를 생성합니다. 인증서 공급자가 생성된 후 이 동작이 변경되는 데 몇 분 정도 걸릴 수 있습니다.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` 섹션을 참조하세요.

### AWS Management Console
<a name="provisioning-self-certificate-signing-console"></a>

를 사용하여 자체 관리형 인증서 서명을 선택하려면 다음 단계를 AWS Management Console따릅니다.

1. [AWS IoT 콘솔](https://console.aws.amazon.com//iot/home)로 이동합니다.

1. 왼쪽 탐색의 **보안** 아래에서 **인증서 서명**을 선택합니다.

1. **인증서 서명** 페이지의 **인증서 서명 세부 정보**에서 **인증서 서명 방법 편집**을 선택합니다.

1. **인증서 서명 방법 편집** 페이지의 **인증서 서명 방법**에서 **자체 관리형**을 선택합니다.

1. **자체 관리형 설정** 섹션에서 인증서 공급자의 이름을 입력한 다음 Lambda 함수를 생성하거나 선택합니다.

1. **인증서 서명 업데이트**를 선택합니다.

## AWS CLI 인증서 공급자에 대한 명령
<a name="provisioning-cert-provider-cli"></a>

### 인증서 공급자 생성
<a name="provisioning-create-cert-provider"></a>

인증서 공급자를 생성하려면 `CreateCertificateProvider` API 작업 또는 `create-certificate-provider` CLI 명령을 사용합니다.

**참고**  
인증서 공급자를 생성하면 [플릿 프로비저닝을 위한 `CreateCertificateFromCsr` API](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) 동작이 변경되어 `CreateCertificateFromCsr`에 대한 모든 직접 호출이 인증서 공급자를 간접 호출하여 인증서를 생성합니다. 인증서 공급자가 생성된 후 이 동작이 변경되는 데 몇 분 정도 걸릴 수 있습니다.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` 섹션을 참조하세요.

### 인증서 공급자 업데이트
<a name="provisioning-update-cert-provider"></a>

인증서 공급자를 업데이트하려면 `UpdateCertificateProvider` API 작업 또는 `update-certificate-provider` CLI 명령을 사용합니다.

```
aws iot update-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn: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](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` 섹션을 참조하세요.

### 인증서 공급자 설명
<a name="provisioning-describe-cert-provider"></a>

인증서 공급자를 설명하려면 `DescribeCertificateProvider` API 작업 또는 `describe-certificate-provider` CLI 명령을 사용합니다.

```
aws iot describe-certificate-provider --certificateProviderName my-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](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` 섹션을 참조하세요.

### 인증서 공급자 삭제
<a name="provisioning-delete-cert-provider"></a>

인증서 공급자를 삭제하려면 `DeleteCertificateProvider` API 작업 또는 `delete-certificate-provider` CLI 명령을 사용합니다. 인증서 공급자 리소스를 삭제하면의 동작`CreateCertificateFromCsr`이 재개 AWS IoT 되고 CSR AWS IoT 에서가 서명한 인증서가 생성됩니다.

```
aws iot delete-certificate-provider --certificateProviderName my-certificate-provider
```

이 명령은 출력을 생성하지 않습니다.

자세한 내용은 *AWS IoT* *API Reference*의 `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)` 섹션을 참조하세요.

### 인증서 공급자 나열
<a name="provisioning-list-cert-provider"></a>

내의 인증서 공급자를 나열하려면 `ListCertificateProviders` API 작업 또는 `list-certificate-providers` CLI 명령을 AWS 계정사용합니다.

```
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*의 [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html) 섹션을 참조하세요.