Je dois donner des clés d'accès temporaires à mes clients pour me connecter aux services IoT (publication, réception, etc.). Pour fournir cet accès, j'ai créé une fonction Lambda qui appelle sts.assumeRole
pour créer des clés STS temporaires. Ces clés sont en cours de création et ont l'air bien.Impossible d'utiliser les informations d'identification temporaires AWS (STS) - interdites
J'utilise assumeRole avec Lambda dans un rôle à la politique en ligne suivante:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iot:Connect",
"iot:Subscribe",
"iot:Publish",
"iot:Receive"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ec2:*"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"sts:AssumeRole"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Note: J'ai ajouté des autorisations EC2 pour essayer un test secondaire (simplifié).
Ce rôle a une relation de confiance ouverte:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
Cependant, dans mon code client (navigateur), je ne peux pas se connecter à IdO et je reçois l'erreur suivante:
WebSocket connection to 'wss://my-endpoint.iot.us-east-1.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-H…Signature=my-signature' failed: Error during WebSocket handshake: Unexpected response code: 403
En essayant un test simplifié, j'ai utilisé EC2, mais j'ai reçu une autre erreur d'autorisation. Le code utilisé ci-dessous (navigateur utilisé pour regrouper dans parcourir).
const AWS = require('aws-sdk');
// connect to Lambda to retrieve accessKeyId and secretAccessKey
$.ajax({
method: 'GET',
url: 'my-url',
success: function(res) {
// connect to EC2
AWS.config.update({accessKeyId: res.accessKeyId, secretAccessKey: res.secretAccessKey, region: res.region});
const ec2 = new AWS.EC2();
ec2.describeInstances({}, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
});
Erreur:
POST https://ec2.us-east-1.amazonaws.com/ 401 (Unauthorized)
Error: AWS was not able to validate the provided access credentials(…) "AuthFailure: AWS was not able to validate the provided access credentials"