

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 証明書プロバイダーを使用したセルフマネージド 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 証明書プロバイダーを使用すると、、他のパブリックに信頼された CAs[AWS Private CA](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)、または独自のパブリックキーインフラストラクチャ (PKI) などのプライベート認証機関 (CAs) を利用して CSR に署名するソリューションを実装できます。さらに、証明書プロバイダーを使用して、有効期間、署名アルゴリズム、発行者、拡張機能などのクライアント証明書のフィールドをカスタマイズできます。

**重要**  
作成できる証明書プロバイダーは、 AWS アカウントごとに 1 つだけです。署名動作の変更は、 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 managed は、フリートプロビジョニングでの証明書署名のデフォルト設定です。 AWS マネージド証明書署名では、 AWS IoT Core は独自の CA を使用して CSRs に署名します。 CAs

**フリートプロビジョニングでのセルフマネージド証明書署名**  
セルフマネージドは、フリートプロビジョニングで証明書に署名するためのもう 1 つのオプションです。セルフマネージド証明書署名では、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/ja_jp/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ 新しい IoT デバイスが製造またはフリートに導入された場合、それ自体を認証するにはクライアント証明書が必要です AWS IoT Core。
+ フリートプロビジョニングプロセスの一環として、デバイスはフリートプロビジョニング MQTT API を通じてクライアント証明書を AWS IoT Core にリクエストします。 [ APIs](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html) このリクエストには、証明書署名リクエスト (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>

証明書プロバイダーを作成する前に、CSR に署名するための Lambda 関数を作成する必要があります。次のコードは、Python での Lambda 関数の例です。この関数は AWS Private CA を呼び出して、プライベート CA と `SHA256WITHRSA` 署名アルゴリズムを使用して入力 CSR に署名します。返されたクライアント証明書は 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) の次のリソースベースのポリシー例では、Lambda 関数を呼び出すアクセス許可を AWS IoT に付与します。

****  

```
{
	"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 マネジメントコンソールを使用して、フリートプロビジョニング用のセルフマネージド証明書署名を選択できます。

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

セルフマネージド証明書署名を選択するには、フリートプロビジョニングで CSRs に署名する証明書プロバイダーを作成 AWS IoT Core する必要があります。 は証明書プロバイダーを 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 リファレンス*」の「`[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)`」を参照してください。

### AWS マネジメントコンソール
<a name="provisioning-self-certificate-signing-console"></a>

を使用したセルフマネージド証明書署名を選択するには AWS マネジメントコンソール、次の手順に従います。

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 リファレンス*」の「`[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 リファレンス*」の「`[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 リファレンス*」の「`[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`が再開され、CSR AWS IoT から によって署名された証明書 AWS IoT が作成されます。

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

このコマンドでは、出力が生成されません。

詳細については、「*AWS IoT* *API リファレンス*」の「`[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)`」を参照してください。

### 証明書プロバイダーを一覧表示する
<a name="provisioning-list-cert-provider"></a>

内の証明書プロバイダーを一覧表示するには 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 リファレンス*」の「[https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html)」を参照してください。