

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.

# Autorisation avec les identités Amazon Cognito
<a name="cog-iot-policies"></a>

Il existe deux types d'identités Amazon Cognito : non authentifiées et authentifiées. Si votre application prend en charge les identités Amazon Cognito non authentifiées, aucune authentification n'est effectuée, vous ne sauriez donc pas qui est l'utilisateur. 

**Unauthenticated Identities :** Pour les identités Amazon Cognito non authentifiées, vous accordez des autorisations en attachant un rôle IAM à une réserve d'identités non authentifiées. Nous vous recommandons d'accorder uniquement l'accès aux ressources que vous souhaitez rendre accessibles aux utilisateurs inconnus.

**Important**  
Pour les utilisateurs non authentifiés d'Amazon Cognito qui se connectent AWS IoT Coreà, nous vous recommandons de donner accès à des ressources très limitées dans les politiques IAM.

**Identités authentifiées** : pour les identités Amazon Cognito authentifiées, vous devez spécifier les autorisations à deux endroits : 
+ Attachez une Politique IAM au réserve d'identités Amazon Cognito authentifié et
+ Associez une AWS IoT Core politique à l'identité Amazon Cognito (utilisateur authentifié).

## Exemples de politiques pour les utilisateurs authentifiés et non authentifiés d'Amazon Cognito qui se connectent à AWS IoT Core
<a name="cog-iot-policies-auth-unauth-examples"></a>

L'exemple suivant montre les autorisations dans la Politique IAM et IoT d'une identité Amazon Cognito. L'utilisateur authentifié souhaite publier sur un sujet spécifique à l'appareil (par exempledevice/DEVICE\$1ID/status).

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/Client_ID"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/device/Device_ID/status"
            ]
        }
    ]
}
```

L'exemple suivant montre les autorisations dans une Politique IAM d'un rôle non authentifié Amazon Cognito. L'utilisateur non authentifié souhaite publier sur des rubriques non spécifiques à un appareil qui ne nécessitent pas d'authentification.

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:client/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iot:Publish"
            ],
            "Resource": [
                "arn:aws:iot:us-east-1:123456789012:topic/non_device_specific_topic"
            ]
        }
    ]
}
```

## GitHub exemples
<a name="cog-iot-policies-github"></a>

Les exemples d'applications Web suivants GitHub montrent comment intégrer l'attachement aux politiques des utilisateurs authentifiés dans le processus d'inscription et d'authentification des utilisateurs.
+ [Application Web MQTT publish/subscribe React utilisant AWS Amplify et Kit SDK des appareils AWS IoT pour JavaScript](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp)
+ [Application Web MQTT publish/subscribe React utilisant AWS AmplifyKit SDK des appareils AWS IoT pour JavaScript, la et une fonction Lambda](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda)

Amplify est un ensemble d'outils et de services qui vous aident à créer des applications Web et mobiles qui s'intègrent aux AWS services. Pour plus d’informations sur Amplify, consultez [Documentation du Cadre Amplify,](https://docs.amplify.aws/).

Les deux exemples effectuent les étapes suivantes.

1. Lorsqu'un utilisateur crée un compte, l'application crée un groupe d'utilisateurs et une identité Amazon Cognito.

1. Lorsqu'un utilisateur s'authentifie, l'application crée et attache une stratégie à l'identité. Cela donne à l'utilisateur des autorisations de publication et d'abonnement.

1. L'utilisateur peut utiliser l'application pour publier et s'abonner à des rubriques MQTT.

Le premier exemple utilise l’opération API `AttachPolicy` directement dans l’opération d’authentification. L'exemple suivant montre comment implémenter cet appel d'API dans une application Web React qui utilise Amplify et le Kit SDK des appareils AWS IoT pour JavaScript.

```
function attachPolicy(id, policyName) {
    var Iot = new AWS.Iot({region: AWSConfiguration.region, apiVersion: AWSConfiguration.apiVersion, endpoint: AWSConfiguration.endpoint});
    var params = {policyName: policyName, target: id};

    console.log("Attach IoT Policy: " + policyName + " with cognito identity id: " + id);
    Iot.attachPolicy(params, function(err, data) {
         if (err) {
               if (err.code !== 'ResourceAlreadyExistsException') {
                  console.log(err);
               }
          }
         else  {
            console.log("Successfully attached policy with the identity", data);
         }
     });
}
```

Ce code apparaît dans le fichier [AuthDisplay.js.](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-cp/blob/d1c307b36357be934db9dda020140fa337709cd9/src/AuthDisplay.js#L45)

Le deuxième exemple implémente l'opération API `AttachPolicy` dans une fonction Lambda. L'exemple suivant montre comment Lambda utilise cet appel d'API.

```
iot.attachPolicy(params, function(err, data) {
     if (err) {
           if (err.code !== 'ResourceAlreadyExistsException') {
              console.log(err);
              res.json({error: err, url: req.url, body: req.body});
           }
      }
     else  {
        console.log(data);
        res.json({success: 'Create and attach policy call succeed!', url: req.url, body: req.body});
     }
 });
```

Ce code apparaît à l'intérieur de la fonction `iot.GetPolicy` dans le fichier [app.js](https://github.com/aws-samples/aws-amplify-react-iot-pub-sub-using-lambda/blob/e493039581d2aff0faa3949086deead20a2c5385/amplify/backend/function/amplifyiotlambda/src/app.js#L50).

**Note**  
Lorsque vous appelez la fonction avec les AWS informations d'identification que vous obtenez via les pools Amazon Cognito Identity, l'objet de contexte de votre fonction Lambda contient une valeur pour. `context.cognito_identity_id` Pour plus d’informations, consultez les rubriques suivantes.   
[AWS Lambda objet de contexte dans Node.js](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-context.html)
[AWS Lambda objet de contexte en Python](https://docs.aws.amazon.com/lambda/latest/dg/python-context.html)
[AWS Lambda objet de contexte dans Ruby](https://docs.aws.amazon.com/lambda/latest/dg/ruby-context.html)
[AWS Lambda objet de contexte en Java](https://docs.aws.amazon.com/lambda/latest/dg/java-context.html)
[AWS Lambda objet de contexte dans Go](https://docs.aws.amazon.com/lambda/latest/dg/golang-context.html)
[AWS Lambda objet de contexte en C\$1](https://docs.aws.amazon.com/lambda/latest/dg/csharp-context.html)
[AWS Lambda objet de contexte dans PowerShell](https://docs.aws.amazon.com/lambda/latest/dg/powershell-context.html)