

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Signature de certificats autogérée à l'aide d' AWS IoT Core un fournisseur de certificats
<a name="provisioning-cert-provider"></a>

Vous pouvez créer un fournisseur de AWS IoT Core certificats pour signer les demandes de signature de certificats (CSRs) lors du provisionnement de AWS IoT flotte. Un fournisseur de certificats fait référence à une fonction Lambda et à l'[API `CreateCertificateFromCsr` MQTT pour le provisionnement](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) de flottes. La fonction Lambda accepte un CSR et renvoie un certificat client signé.

Lorsque vous n'avez pas de fournisseur de certificats Compte AWS, l'[API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) est appelée lors du provisionnement de la flotte pour générer le certificat à partir d'un CSR. Après avoir créé un fournisseur de certificats, le comportement de l'[API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) changera et tous les appels à cette API MQTT appelleront le fournisseur de certificats pour émettre le certificat.

Avec le fournisseur de AWS IoT Core certificats, vous pouvez mettre en œuvre des solutions qui utilisent des autorités de certification privées (CAs) telles que [AWS CA privée](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)d'autres autorités publiques fiables CAs ou votre propre infrastructure à clé publique (PKI) pour signer le CSR. En outre, vous pouvez utiliser le fournisseur de certificats pour personnaliser les champs de votre certificat client tels que les périodes de validité, les algorithmes de signature, les émetteurs et les extensions.

**Important**  
Vous ne pouvez créer qu'un seul fournisseur de certificats par Compte AWS. Le changement de comportement de signature s'applique à l'ensemble du parc qui appelle l'[API CreateCertificateFromCsr MQTT](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) jusqu'à ce que vous supprimiez le fournisseur de certificats de votre Compte AWS.

**Topics**
+ [Comment fonctionne la signature de certificats autogérés dans le cadre de l'approvisionnement de flottes](#provisioning-cert-provider-how-it-works)
+ [Entrée de la fonction Lambda du fournisseur de certificats](#provisioning-cert-provider-lambda-input)
+ [Valeur renvoyée par la fonction Lambda du fournisseur de certificats](#provisioning-cert-provider-lambda-return)
+ [Exemple de fonction Lambda](#provisioning-cert-provider-lambda)
+ [Signature de certificats autogérée pour le provisionnement de la flotte](#provisioning-self-certificate-signing)
+ [AWS CLI commandes pour le fournisseur de certificats](#provisioning-cert-provider-cli)

## Comment fonctionne la signature de certificats autogérés dans le cadre de l'approvisionnement de flottes
<a name="provisioning-cert-provider-how-it-works"></a>

### Concepts clés
<a name="provisioning-cert-provider-concepts"></a>

Les concepts suivants fournissent des détails qui peuvent vous aider à comprendre le fonctionnement de la signature de certificats autogérés dans le cadre du provisionnement de AWS IoT flottes. Pour plus d'informations, consultez la section [Provisionnement d'appareils qui ne possèdent pas de certificat d'appareil à l'aide du provisionnement de flotte](https://docs.aws.amazon.com//iot/latest/developerguide/provision-wo-cert.html).

**AWS IoT approvisionnement de flotte**  
Le provisionnement de AWS IoT flotte (abréviation de fleet provisioning) permet de AWS IoT Core générer et de délivrer en toute sécurité des certificats d'appareils à vos appareils lorsqu'ils se connectent AWS IoT Core pour la première fois. Vous pouvez utiliser le provisionnement du parc pour connecter des appareils qui ne possèdent pas de certificat d'appareil à AWS IoT Core. 

**Demande de signature de certificat (CSR)**  
Au cours du processus de provisionnement de flotte, un appareil fait une demande AWS IoT Core via le MQTT de [provisionnement de flotte](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). APIs Cette demande inclut une demande de signature de certificat (CSR), qui sera signée pour créer un certificat client. 

**AWS signature de certificats gérés dans le cadre de l'approvisionnement de la flotte**  
AWS géré est le paramètre par défaut pour la signature des certificats dans le cadre du provisionnement de flotte. Avec la signature de certificat AWS gérée, elle AWS IoT Core signera CSRs en utilisant sa propre signature CAs.

**Signature de certificats autogérés dans le cadre du provisionnement de la flotte**  
L'autogestion est une autre option pour la signature de certificats dans le cadre de l'approvisionnement de flottes. Avec la signature de certificats autogérée, vous créez un fournisseur de AWS IoT Core certificats à signer CSRs. Vous pouvez utiliser la signature de certificat autogérée pour signer CSRs avec une autorité de certification générée par une autorité de certification AWS privée, une autre autorité de certification approuvée par le public ou votre propre infrastructure à clé publique (PKI).

**AWS IoT Core fournisseur de certificats**  
AWS IoT Core un fournisseur de certificats (abréviation de fournisseur de certificats) est une ressource gérée par le client qui est utilisée pour la signature autogérée de certificats dans le cadre de l'approvisionnement de flottes.

### Schéma
<a name="provisioning-cert-provider-diagram"></a>

Le schéma suivant illustre de manière simplifiée le fonctionnement de la signature automatique des certificats dans le cadre du provisionnement de AWS IoT flottes.

![\[AWS IoT Core fournisseur de certificats pour l'approvisionnement de flottes\]](http://docs.aws.amazon.com/fr_fr/iot/latest/developerguide/images/provisioning-cert-provider.png)

+ Lorsqu'un nouvel appareil IoT est fabriqué ou introduit dans le parc, il a besoin de certificats clients pour s'authentifier. AWS IoT Core
+ Dans le cadre du processus de provisionnement de la flotte, l'appareil fait une demande de certificats client par le biais du MQTT de [provisionnement de la flotte](https://docs.aws.amazon.com//iot/latest/developerguide/fleet-provision-api.html). AWS IoT Core APIs Cette demande inclut une demande de signature de certificat (CSR).
+ AWS IoT Core invoque le fournisseur de certificats et transmet le CSR en entrée au fournisseur.
+ Le fournisseur de certificats prend le CSR en entrée et émet un certificat client.

  Pour la signature de certificats AWS gérés, AWS IoT Core signe le CSR à l'aide de sa propre autorité de certification et émet un certificat client.
+ Avec le certificat client émis, l'appareil poursuivra le provisionnement de la flotte et établira une connexion sécurisée avec AWS IoT Core.

## Entrée de la fonction Lambda du fournisseur de certificats
<a name="provisioning-cert-provider-lambda-input"></a>

AWS IoT Core envoie l'objet suivant à la fonction Lambda lorsqu'un appareil s'enregistre auprès de cette fonction. La valeur de `certificateSigningRequest` est le CSR au [format PEM (Privacy-Enhanced Mail)](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html) fourni dans la demande. `CreateCertificateFromCsr` `principalId`Il s'agit de l'ID du principal utilisé pour se connecter AWS IoT Core lors de la `CreateCertificateFromCsr` demande. `clientId`est l'ID client défini pour la connexion MQTT.

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

## Valeur renvoyée par la fonction Lambda du fournisseur de certificats
<a name="provisioning-cert-provider-lambda-return"></a>

La fonction Lambda doit renvoyer une réponse contenant la `certificatePem` valeur. Voici un exemple de réponse réussie. AWS IoT Core utilisera la valeur de retour (`certificatePem`) pour créer le certificat.

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

Si l'enregistrement est réussi, il `CreateCertificateFromCsr` renverra la même chose `certificatePem` dans la `CreateCertificateFromCsr` réponse. Pour plus d'informations, consultez l'exemple de charge utile de réponse de [CreateCertificateFromCsr](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr).

## Exemple de fonction Lambda
<a name="provisioning-cert-provider-lambda"></a>

Avant de créer un fournisseur de certificats, vous devez créer une fonction Lambda pour signer un CSR. Voici un exemple de fonction Lambda en Python. Cette fonction appelle AWS CA privée à signer le CSR d'entrée, à l'aide d'une autorité de certification privée et de l'algorithme de `SHA256WITHRSA` signature. Le certificat client retourné sera valide pendant un an. Pour plus d'informations sur AWS CA privée et comment créer une autorité de certification privée, voir [Qu'est-ce qu'une autorité de certification AWS privée ?](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) et [Création d'une autorité de certification privée](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
    }
```

**Important**  
Les certificats renvoyés par la fonction Lambda doivent avoir le même nom d'objet et la même clé publique que la demande de signature de certificat (CSR).
La fonction Lambda doit s'exécuter dans 5 secondes.
La fonction Lambda doit se trouver dans la même région que Compte AWS la ressource du fournisseur de certificats.
Le principal du AWS IoT service doit disposer de l'autorisation d'appel pour la fonction Lambda. Pour éviter toute [confusion liée aux adjoints](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html), nous vous recommandons de définir `sourceArn` et `sourceAccount` pour les autorisations d'appel. Pour plus d’informations, consultez [Prévention du problème de l’adjoint confus entre services](https://docs.aws.amazon.com//iot/latest/developerguide/cross-service-confused-deputy-prevention.html).

L'exemple de politique basée sur les ressources suivant pour [Lambda](https://docs.aws.amazon.com//lambda/latest/dg/access-control-resource-based.html) accorde AWS IoT l'autorisation d'invoquer la fonction 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"
				}
			}
		}
	]
}
```

## Signature de certificats autogérée pour le provisionnement de la flotte
<a name="provisioning-self-certificate-signing"></a>

Vous pouvez choisir la signature de certificat autogérée pour le provisionnement de la flotte à l'aide AWS CLI de ou. AWS Management Console

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

Pour choisir la signature de certificats autogérée, vous devez créer un fournisseur de AWS IoT Core certificats pour vous connecter CSRs au provisionnement du parc. AWS IoT Core invoque le fournisseur de certificats, qui prend un CSR en entrée et renvoie un certificat client. Pour créer un fournisseur de certificats, utilisez l'opération `CreateCertificateProvider` API ou la commande `create-certificate-provider` CLI.

**Note**  
Une fois que vous avez créé un fournisseur de certificats, le comportement de l'[`CreateCertificateFromCsr`API pour le provisionnement de la flotte](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) changera, de sorte que tous les appels vers `CreateCertificateFromCsr` invoqueront le fournisseur de certificats pour créer les certificats. La modification de ce comportement peut prendre quelques minutes après la création d'un fournisseur de certificats.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Voici un exemple de sortie pour cette commande :

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Pour plus d'informations, consultez la *référence `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` de *AWS IoT*l'API*.

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

Pour choisir la signature autogérée des certificats à l'aide de AWS Management Console, procédez comme suit :

1. Accédez à la [console AWS IoT](https://console.aws.amazon.com//iot/home).

1. Dans le menu de navigation de gauche, sous **Sécurité**, choisissez **Signature du certificat**.

1. Sur la page de **signature du certificat**, sous **Détails de signature du certificat**, choisissez **Modifier la méthode de signature du certificat**.

1. Sur la page **Modifier la méthode de signature du certificat**, sous **Méthode de signature du certificat**, sélectionnez **Autogéré**.

1. Dans la section **Paramètres autogérés**, entrez le nom du fournisseur de certificats, puis créez ou choisissez une fonction Lambda.

1. Choisissez **Mise à jour de la signature du certificat**.

## AWS CLI commandes pour le fournisseur de certificats
<a name="provisioning-cert-provider-cli"></a>

### Création d'un fournisseur de certificats
<a name="provisioning-create-cert-provider"></a>

Pour créer un fournisseur de certificats, utilisez l'opération `CreateCertificateProvider` API ou la commande `create-certificate-provider` CLI. 

**Note**  
Une fois que vous avez créé un fournisseur de certificats, le comportement de l'[`CreateCertificateFromCsr`API pour le provisionnement de la flotte](https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html#create-cert-csr) changera, de sorte que tous les appels vers `CreateCertificateFromCsr` invoqueront le fournisseur de certificats pour créer les certificats. La modification de ce comportement peut prendre quelques minutes après la création d'un fournisseur de certificats.

```
aws iot create-certificate-provider \
                --certificateProviderName my-certificate-provider \
                --lambdaFunctionArn arn:aws:lambda:us-east-1:123456789012:function:my-function-1 \
                --accountDefaultForOperations CreateCertificateFromCsr
```

Voici un exemple de sortie pour cette commande :

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Pour plus d'informations, consultez la *référence `[CreateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateCertificateProvider.html)` de *AWS IoT*l'API*.

### Mettre à jour le fournisseur de certificats
<a name="provisioning-update-cert-provider"></a>

Pour mettre à jour un fournisseur de certificats, utilisez l'opération `UpdateCertificateProvider` API ou la commande `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
```

Voici un exemple de sortie pour cette commande :

```
{
	"certificateProviderName": "my-certificate-provider",
	"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
}
```

Pour plus d'informations, consultez la *référence `[UpdateCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateCertificateProvider.html)` de *AWS IoT*l'API*.

### Décrire le fournisseur de certificats
<a name="provisioning-describe-cert-provider"></a>

Pour décrire un fournisseur de certificats, utilisez l'opération `DescribeCertificateProvider` API ou la commande `describe-certificate-provider` CLI.

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

Voici un exemple de sortie pour cette commande :

```
{
	"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"
}
```

Pour plus d'informations, consultez la *référence `[DescribeCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeCertificateProvider.html)` de *AWS IoT*l'API*.

### Supprimer le fournisseur de certificats
<a name="provisioning-delete-cert-provider"></a>

Pour supprimer un fournisseur de certificats, utilisez l'opération `DeleteCertificateProvider` API ou la commande `delete-certificate-provider` CLI. Si vous supprimez la ressource du fournisseur de certificats, le comportement de `CreateCertificateFromCsr` AWS IoT reprendra et des certificats signés par AWS IoT un CSR seront créés.

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

Cette commande ne produit aucune sortie. 

Pour plus d'informations, consultez la *référence `[DeleteCertificateProvider](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteCertificateProvider.html)` de *AWS IoT*l'API*.

### Liste des fournisseurs de certificats
<a name="provisioning-list-cert-provider"></a>

Pour répertorier les fournisseurs de certificats qu' Compte AWS il contient, utilisez l'opération `ListCertificateProviders` API ou la commande `list-certificate-providers` CLI.

```
aws iot list-certificate-providers
```

Voici un exemple de sortie pour cette commande :

```
{
	"certificateProviders": [
		{
			"certificateProviderName": "my-certificate-provider",
			"certificateProviderArn": "arn:aws:iot:us-east-1:123456789012:certificateprovider:my-certificate-provider"
		}
	]
}
```

Pour plus d'informations, consultez la *référence [https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html](https://docs.aws.amazon.com//iot/latest/apireference/API_ListCertificateProviders.html)de *AWS IoT*l'API*.