Infrastructure de sécurité : Authentification | Mesures de correction
Envisager d’utiliser un mécanisme d’authentification standard pour l’application web
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | L’authentification désigne le processus dans lequel une entité prouve son identité, généralement par le biais d’informations d’identification, comme le nom d’utilisateur et le mot de passe. Il existe plusieurs protocoles d’authentification disponibles à prendre en compte. Certains d’entre eux sont répertoriés ci-dessous :
Envisagez d’utiliser un mécanisme d’authentification standard pour identifier le processus source. |
Les applications doivent gérer les scénarios d’authentification ayant échoué en toute sécurité
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | Les applications qui authentifient explicitement les utilisateurs doivent gérer de manière sécurisée des scénarios d’authentification ayant échoué. Le mécanisme d’authentification doit :
Test des éléments suivants :
|
Activer l’authentification adaptative ou avancée
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | Vérifiez que l’application dispose d’une autorisation supplémentaire (comme une authentification adaptative ou avancée via l’authentification multifacteur, par exemple l’envoi d’OTP par SMS, e-mail, etc. ou une invite de nouvelle authentification) pour que l’utilisateur soit interrogé avant qu’un accès à des informations sensibles ne lui soit octroyé. Cette règle s’applique également pour les modifications critiques d’une action ou d’un compte. Cela signifie également que l’adaptation de l’authentification doit être implémentée de manière que l’application applique correctement l’autorisation sensible au contexte pour interdire les manipulations non autorisées via la falsification de paramètres par exemple. |
Garantir que les interfaces d’administration sont correctement verrouillées
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | La première solution consiste à accorder l’accès uniquement à partir d’une certaine plage d’adresses IP source à l’interface d’administration. Si cette solution n’est pas envisageable, il est toujours recommandé d’appliquer une authentification adaptative ou par étapes pour la connexion à l’interface d’administration |
Implémenter des fonctionnalités de mot de passe oublié en toute sécurité
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | La première chose consiste à vérifier que les chemins de mot de passe oublié ou autres chemins de récupération envoient un lien incluant un jeton d’activation à durée limitée plutôt que le mot de passe lui-même. Une authentification supplémentaire basée sur les jetons logiciels (par exemple, jeton SMS, applications mobiles natives, etc.) peut être utilisée avant l’envoi du lien. Ensuite, vous ne devez pas verrouiller les comptes des utilisateurs tant que le processus d’obtention d’un nouveau mot de passe est en cours. Cela peut entraîner une attaque par déni de service lorsqu’un pirate décide de verrouiller intentionnellement les utilisateurs avec une attaque automatisée. Puis, lorsque la demande de nouveau mot de passe est en cours, le message que vous affichez doit être généralisé afin d’éviter l’énumération de nom d’utilisateur. Enfin, interdisez toujours l’utilisation des anciens mots de passe et implémentez une stratégie de mot de passe forte. |
Garantir que la stratégie de compte et de mot de passe est implémentée
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Détails | Une stratégie de compte et de mot de passe conforme à la stratégie et aux bonnes pratiques de l’organisation doit être implémentée. Pour se défendre contre les attaques en force brute et les vols basés sur le dictionnaire : une stratégie de mot de passe forte doit être implémentée pour garantir que les utilisateurs créent des mots de passe complexes (par exemple, longueur minimale de 12 caractères, caractères spéciaux et alphanumériques). Les stratégies de verrouillage de compte peuvent être implémentées de la manière suivante :
Pour se défendre contre les attaques sur les comptes par défaut et prévisibles, vérifiez que toutes les clés et que tous les mots de passe sont remplaçables et qu’ils sont générés ou remplacés après l’installation. Si l’application doit générer automatiquement des mots de passe, assurez-vous que les mots de passe générés sont aléatoires et ont une entropie élevée. |
Implémenter des contrôles pour empêcher l’énumération de nom d’utilisateur
Intitulé | Détails |
---|---|
Composant | Application Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Étapes | Tous les messages d’erreur doivent être généralisés afin d’éviter l’énumération de nom d’utilisateur. En outre, parfois, vous ne pouvez pas éviter une fuite d’informations dans des fonctionnalités comme une page d’inscription. Ici, vous devez utiliser des méthodes de limite de débit comme CAPTCHA pour empêcher une attaque automatisée par un pirate. |
Si possible, utiliser l’authentification Windows pour la connexion à SQL Server
Intitulé | Détails |
---|---|
Composant | Base de données |
Phase SDL | Build |
Technologies applicables | Local |
Attributs | Version SQL - Toutes |
Informations de référence | SQL Server - Choisir un mode d’authentification |
Étapes | L’authentification Windows utilise le protocole de sécurité Kerberos, met en œuvre des stratégies de mot de passe portant sur la validation de la complexité des mots de passe forts et prend en charge le verrouillage des comptes et l’expiration des mots de passe. |
Quand cela est possible, utilisez l’authentification Microsoft Entra pour la connexion à SQL Database
Titre | Détails |
---|---|
Composant | Base de données |
Phase SDL | Build |
Technologies applicables | SQL Azure |
Attributs | Version SQL - V12 |
Informations de référence | Se connecter à SQL Database à l’aide de l’authentification Microsoft Entra |
Étapes | Version minimum : Azure SQL Database V12 est nécessaire pour autoriser Azure SQL Database à utiliser l’authentification Microsoft Entra sur Microsoft Directory |
Lorsque le mode d’authentification SQL est utilisé, garantir que la stratégie de compte et de mot de passe est appliquée sur SQL Server
Intitulé | Détails |
---|---|
Composant | Base de données |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Stratégie de mot de passe SQL Server |
Étapes | Lorsque vous utilisez l’authentification SQL Server, les connexions sont créées dans SQL Server et ne sont pas basées sur des comptes d’utilisateur Windows. Le nom d’utilisateur et le mot de passe sont créés à l’aide de SQL Server et stockés dans SQL Server. SQL Server peut utiliser des mécanismes de stratégie de mot de passe Windows. Il peut appliquer la même complexité et les mêmes stratégies d’expiration utilisées dans Windows pour les mots de passe utilisés dans SQL Server. |
Ne pas utiliser l’authentification SQL dans des bases de données à relation contenant-contenu
Intitulé | Détails |
---|---|
Composant | Base de données |
Phase SDL | Build |
Technologies applicables | Local, SQL Azure |
Attributs | Version SQL - MSSQL2012, Version SQL - V12 |
Informations de référence | Meilleures pratiques de sécurité recommandées avec les bases de données autonomes |
Étapes | L’absence de stratégie de mot de passe peut augmenter la probabilité de faibles informations d’identification établies dans une base de données autonome. Utilisez l’authentification Windows. |
Utiliser les informations d’authentification par appareil à l’aide des jetons SAP
Intitulé | Détails |
---|---|
Composant | Azure Event Hubs |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Présentation du modèle de sécurité et de l’authentification Event Hubs |
Étapes | Le modèle de sécurité Event Hubs est basé sur une combinaison de jetons de signature d’accès partagé (SAP) et d’éditeurs d’événements. Le nom de l’éditeur représente l’ID de l’appareil qui reçoit le jeton. Cela permet d’associer les jetons générés aux appareils respectifs. Tous les messages sont marqués avec le donneur d’ordre côté service autorisant la détection de tentatives d’usurpation d’origine en charge utile. Lors de l’authentification des appareils, générez un jeton SAP par appareil limité à un éditeur unique. |
Activer l’authentification multifacteur Microsoft Entra pour les Administrateurs Azure
Titre | Détails |
---|---|
Composant | Délimitation d’approbation Azure |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Qu’est-ce que l’authentification multifacteur Microsoft Entra ? |
Étapes | L’authentification multifacteur (MFA) est une méthode d’authentification qui nécessite plus d’une méthode de vérification et ajoute une deuxième couche de sécurité critique aux connexions et transactions des utilisateurs. Cette authentification fonctionne en nécessitant au minimum deux des méthodes de vérification suivantes :
|
Restreindre l’accès anonyme au cluster Service Fabric
Intitulé | Détails |
---|---|
Composant | Délimitation d’approbation Service Fabric |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | Environnement - Azure |
Informations de référence | Scénarios de sécurité d’un cluster Service Fabric |
Étapes | Les clusters doivent toujours être sécurisés pour empêcher les utilisateurs non autorisés de se connecter à votre cluster, surtout quand des charges de travail sont en cours d’exécution sur ce dernier. Lors de la création d’un cluster Service Fabric, assurez-vous que le mode de sécurité est défini sur la valeur « sécurisé » et configurez le certificat de serveur X.509 requis. La création d’un cluster « non sécurisé » permettra à tout utilisateur anonyme de s’y connecter si les points de terminaison de gestion sont exposés sur l’Internet public. |
Garantir que le certificat client à nœud Service Fabric est différent du certificat nœud à nœud
Intitulé | Détails |
---|---|
Composant | Délimitation d’approbation Service Fabric |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | Environnement - Azure, environnement - Autonome |
Informations de référence | Sécurité par certificat de client à nœud, Se connecter à un cluster sécurisé à l’aide d’un certificat client |
Étapes | La configuration de la sécurité par certificat de client à nœud s’effectue lors de la création du cluster (par le biais du Portail Azure, des modèles Resource Manager ou d’un modèle JSON autonome) en spécifiant un certificat client d’administration et/ou un certificat de client utilisateur. Les certificats client d’administration et client utilisateur que vous spécifiez doivent être différents des certificats primaires et secondaires que vous spécifiez pour la sécurité de nœud à nœud. |
Utiliser Microsoft Entra ID pour authentifier les clients sur les clusters Service Fabric
Titre | Détails |
---|---|
Composant | Délimitation d’approbation Service Fabric |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | Environnement - Azure |
Informations de référence | Scénarios de sécurité d’un cluster - Recommandations en matière de sécurité |
Étapes | Les clusters s’exécutant sur Azure peuvent également sécuriser l’accès aux points de terminaison de gestion à l’aide de Microsoft Entra ID, en plus des certificats client. Pour les clusters Azure, nous vous recommandons d’utiliser la sécurité Microsoft Entra pour authentifier les clients et les certificats, pour une sécurité de nœud à nœud. |
Garantir que les certificats Service Fabric proviennent d’une autorité de certification approuvée
Intitulé | Détails |
---|---|
Composant | Délimitation d’approbation Service Fabric |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | Environnement - Azure |
Informations de référence | Certificats X.509 et Service Fabric |
Étapes | Service Fabric utilise des certificats de serveur X.509 pour l’authentification des clients et des nœuds. Voici quelques éléments importants à prendre en compte lors de l’utilisation de certificats dans Service Fabric :
|
Utiliser des scénarios d’authentification standard pris en charge par IdentityServer
Intitulé | Détails |
---|---|
Composant | IdentityServer |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | IdentityServer3 - The Big Picture (IdentityServer3 - Vue d’ensemble) |
Étapes | Vous trouverez ci-dessous les interactions classiques prises en charge par IdentityServer :
|
Remplacer le cache de jetons IdentityServer par défaut par une solution évolutive
Intitulé | Détails |
---|---|
Composant | IdentityServer |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Identity Server Deployment - Caching (Déploiement d’IdentityServer - Mise en cache) |
Étapes | IdentityServer a un cache en mémoire intégré simple. Bien que cette fonction soit utile pour les applications natives à petite échelle, elle n’est pas adaptée pour les applications de serveur principal et de niveau intermédiaire pour les raisons suivantes :
|
Garantir que les fichiers binaires de l’application déployée sont signés numériquement
Intitulé | Détails |
---|---|
Composant | Délimitation d’approbation machine |
Phase SDL | Déploiement |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Étapes | Assurez-vous que les fichiers binaires de l’application déployée sont signés numériquement afin que l’intégrité des fichiers binaires puisse être vérifiée. |
Activer l’authentification lors de la connexion aux files d’attente MSMQ dans WCF
Intitulé | Détails |
---|---|
Composant | WCF |
Phase SDL | Build |
Technologies applicables | Générique, NET Framework 3 |
Attributs | N/A |
Informations de référence | MSDN |
Étapes | Le programme ne parvient pas à activer l’authentification lors de la connexion aux files d’attente MSMQ, un pirate peut envoyer anonymement des messages à la file d’attente pour traitement. Si l’authentification n’est pas utilisée pour se connecter à une file d’attente MSMQ pour remettre un message à un autre programme, un pirate pourrait envoyer un message malveillant anonyme. |
Exemple
L’élément <netMsmqBinding/>
du fichier de configuration WCF ci-dessous indique à WCF de désactiver l’authentification lors de la connexion à une file d’attente MSMQ pour la remise du message.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""None"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
Configurez MSMQ pour exiger l’authentification de certificat ou de domaine Windows à tout moment pour les messages entrants ou sortants.
Exemple
L’élément <netMsmqBinding/>
du fichier de configuration WCF ci-dessous indique à WCF d’activer l’authentification de certificat lors de la connexion à une file d’attente MSMQ. Le client est authentifié à l’aide de certificats X.509. Le certificat client doit être présent dans le magasin de certificats du serveur.
<bindings>
<netMsmqBinding>
<binding>
<security>
<transport msmqAuthenticationMode=""Certificate"" />
</security>
</binding>
</netMsmqBinding>
</bindings>
WCF - Ne pas définir clientCredentialType du message sur la valeur « aucun »
Intitulé | Détails |
---|---|
Composant | WCF |
Phase SDL | Build |
Technologies applicables | .NET Framework 3 |
Attributs | Type d’informations d’identification client - Aucun |
Informations de référence | MSDN, Fortify |
Étapes | L’absence d’authentification signifie que tout le monde peut accéder à ce service. Un service qui n’authentifie pas ses clients autorise l’accès à tous les utilisateurs. Configurez l’application pour une authentification en fonction des informations d’identification du client. Cela est possible en définissant le clientCredentialType du message sur Windows ou Certificat. |
Exemple
<message clientCredentialType=""Certificate""/>
WCF - Ne pas définir clientCredentialType du transport sur la valeur « aucun »
Intitulé | Détails |
---|---|
Composant | WCF |
Phase SDL | Build |
Technologies applicables | Générique, .NET Framework 3 |
Attributs | Type d’informations d’identification client - Aucun |
Informations de référence | MSDN, Fortify |
Étapes | L’absence d’authentification signifie que tout le monde peut accéder à ce service. Un service qui n’authentifie pas ses clients autorise tous les utilisateurs à accéder à ses fonctionnalités. Configurez l’application pour une authentification en fonction des informations d’identification du client. Cela est possible en définissant le clientCredentialType du transport sur Windows ou Certificat. |
Exemple
<transport clientCredentialType=""Certificate""/>
Garantir que les techniques d’authentification standard sont utilisées pour sécuriser les API Web
Intitulé | Détails |
---|---|
Composant | API Web |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Authentication and Authorization in ASP.NET Web API (Authentification et autorisation dans l’API web ASP.NET), External Authentication Services with ASP.NET Web API (C#) (Services d’authentification externe avec l’API web ASP.NET (C#)) |
Étapes | L’authentification désigne le processus dans lequel une entité prouve son identité, généralement par le biais d’informations d’identification, comme le nom d’utilisateur et le mot de passe. Il existe plusieurs protocoles d’authentification disponibles à prendre en compte. Certains d’entre eux sont répertoriés ci-dessous :
Les liens dans la section Références fournissent des informations de bas niveau sur la façon dont les schémas d’authentification peuvent être implémentés pour sécuriser une API web. |
Utiliser les scénarios d’authentification standard pris en charge Microsoft Entra ID
Titre | Détails |
---|---|
Composant | Microsoft Entra ID |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Scénarios d’authentification pour Microsoft Entra ID, Exemples de code Microsoft Entra, Guide du développeur Microsoft Entra |
Étapes | Microsoft Entra ID simplifie l’authentification des développeurs en fournissant l’identité en tant que service, avec la prise en charge des protocoles standard du secteur, comme OAuth 2.0 et OpenID Connect. Vous trouverez ci-dessous les cinq principaux scénarios d’application pris en charge par Microsoft Entra ID :
Consultez les liens dans la section Références pour en savoir plus sur l’implémentation de bas niveau. |
Remplacement du cache de jetons MSAL par défaut par un cache distribué
Intitulé | Détails |
---|---|
Composant | Microsoft Entra ID |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Sérialisation du cache de jetons dans MSAL.NET |
Étapes | Le cache utilisé par défaut par MSAL (la bibliothèque d’authentification Microsoft) est un cache en mémoire scalable. D’autres options sont toutefois disponibles, notamment un cache de jetons distribué. Ce type de cache comporte des mécanismes L1/L2, où L1 est en mémoire, et L2 représente l’implémentation du cache distribué. Ils peuvent être configurés en conséquence pour limiter la mémoire L1, chiffrer les données ou définir des stratégies d’éviction. Il existe d’autres solutions encore, notamment les caches Redis, SQL Server et Azure Cosmos DB. Vous trouverez une implémentation d’un cache de jetons distribué dans Tutoriel : Prise en main d’ASP.NET Core MVC. |
Prévention de la relecture de jetons d’authentification MSAL à l’aide de TokenReplayCache
Intitulé | Détails |
---|---|
Composant | Microsoft Entra ID |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Authentification moderne avec Microsoft Entra ID pour les applications web |
Étapes | La propriété TokenReplayCache permet aux développeurs de définir un cache de relecture de jetons, un magasin qui peut être utilisé pour enregistrer les jetons afin de vérifier qu’aucun jeton ne peut être utilisé plusieurs fois. Il s’agit d’une mesure contre une attaque courante, l’attaque judicieusement appelée relecture de jetons : un pirate interceptant le jeton envoyé à la connexion peut tenter de l’envoyer à nouveau à l’application (le « relire ») pour établir une nouvelle session. Par exemple, dans le flux d’octroi de code d’OIDC, après une authentification utilisateur réussie, une demande vers le point de terminaison « /signin-oidc » de la partie de confiance est réalisée avec les paramètres « id_token », « code » et « état ». La partie de confiance valide cette demande et établit une nouvelle session. Si un adversaire capture cette demande et la relit, il peut réussir à établir une session et tromper l’utilisateur. La présence de la valeur à usage unique dans OpenID Connect peut limiter mais pas complètement éliminer les circonstances dans lesquelles l’attaque peut être mise en œuvre correctement. Pour protéger leurs applications, les développeurs peuvent fournir une implémentation de ITokenReplayCache et assigner une instance à TokenReplayCache. |
Exemple
// ITokenReplayCache defined in MSAL
public interface ITokenReplayCache
{
bool TryAdd(string securityToken, DateTime expiresOn);
bool TryFind(string securityToken);
}
Exemple
Voici un exemple d’implémentation de l’interface ITokenReplayCache. (Veuillez personnaliser et mettre en œuvre votre infrastructure de mise en cache spécifique au projet)
public class TokenReplayCache : ITokenReplayCache
{
private readonly ICacheProvider cache; // Your project-specific cache provider
public TokenReplayCache(ICacheProvider cache)
{
this.cache = cache;
}
public bool TryAdd(string securityToken, DateTime expiresOn)
{
if (this.cache.Get<string>(securityToken) == null)
{
this.cache.Set(securityToken, securityToken);
return true;
}
return false;
}
public bool TryFind(string securityToken)
{
return this.cache.Get<string>(securityToken) != null;
}
}
Le cache implémenté doit être référencé dans les options OIDC via la propriété « TokenValidationParameters » comme suit.
OpenIdConnectOptions openIdConnectOptions = new OpenIdConnectOptions
{
AutomaticAuthenticate = true,
... // other configuration properties follow..
TokenValidationParameters = new TokenValidationParameters
{
TokenReplayCache = new TokenReplayCache(/*Inject your cache provider*/);
}
}
Notez que pour tester l’efficacité de cette configuration, vous devez vous connecter à votre application locale protégée par OIDC et capturer la demande envoyée au point de terminaison "/signin-oidc"
dans fiddler. Lorsque la protection n’est pas en place, la relecture de cette demande dans fiddler définira un nouveau cookie de session. Lors de la relecture de la demande après avoir ajouté la protection TokenReplayCache, l’application lève une exception comme suit :SecurityTokenReplayDetectedException: IDX10228: The securityToken has previously been validated, securityToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ1......
Utiliser les bibliothèques MSAL pour gérer les demandes de jeton des clients OAuth2 vers Microsoft Entra ID (ou AD local)
Titre | Détails |
---|---|
Composant | Microsoft Entra ID |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | MSAL |
Étapes | La Bibliothèque d’authentification Microsoft (MSAL) permet aux développeurs d’acquérir des jetons de sécurité auprès de la plateforme d’identités Microsoft afin d’authentifier les utilisateurs et d’accéder aux API web sécurisées. Il peut être utilisé pour fournir un accès sécurisé à Microsoft Graph, d’autres API Microsoft, des API web de tiers ou vos propres API web. MSAL prend en charge de nombreuses architectures et plateformes d’application différentes, notamment .NET, JavaScript, Java, Python, Android et iOS. |
MSAL vous permet d’obtenir des jetons différentes manières, avec une API cohérente pour plusieurs plateformes. Il n’est pas nécessaire d’utiliser directement les bibliothèques ni le code OAuth sur le protocole de votre application. Vous pouvez acquérir des jetons pour le compte d’un utilisateur ou d’une application (en fonction de la plateforme).
La bibliothèque MSAL gère également un cache de jetons et actualise automatiquement les jetons quand ils sont sur le point d’expirer. Elle vous aide par ailleurs à spécifier l’audience à laquelle vous souhaitez que votre application se connecte, à configurer votre application à partir de fichiers de configuration et à résoudre les problèmes de votre application.
Authentifier les appareils se connectant à la passerelle de champ
Intitulé | Détails |
---|---|
Composant | Passerelle de champ IoT |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | N/A |
Étapes | Assurez-vous que chaque appareil est authentifié par la passerelle de champ avant d’accepter des données provenant de ceux-ci et de faciliter les communications en amont avec la passerelle de cloud. En outre, assurez-vous que les appareils se connectent avec des informations d’identification par appareil, afin que chaque appareil puisse être identifié de manière unique. |
Garantir que les appareils se connectant à la passerelle de cloud sont authentifiés
Intitulé | Détails |
---|---|
Composant | Passerelle cloud IoT |
Phase SDL | Build |
Technologies applicables | Générique, C#, Node.js, |
Attributs | N/A, choix de passerelle - Azure IoT Hub |
Informations de référence | N/A, Mise en route d’Azure IoT Hub (.NET), Mise en route d’Azure IoT Hub (Node), Contrôler l’accès à IoT Hub, référentiel Git |
Étapes |
|
Exemple
static DeviceClient deviceClient;
static string deviceKey = "{device key}";
static string iotHubUri = "{iot hub hostname}";
var messageString = "{message in string format}";
var message = new Message(Encoding.ASCII.GetBytes(messageString));
deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("myFirstDevice", deviceKey));
await deviceClient.SendEventAsync(message);
Exemple
Node.js : authentification
Clé symétrique
- Créer un hub IoT sur Azure
- Créez une entrée dans le registre des identités de l’appareil.
var device = new iothub.Device(null); device.deviceId = <DeviceId > registry.create(device, function(err, deviceInfo, res) {})
- Créez un appareil simulé.
var clientFromConnectionString = require('azure-iot-device-amqp').clientFromConnectionString; var Message = require('azure-iot-device').Message; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>SharedAccessKey=<SharedAccessKey>'; var client = clientFromConnectionString(connectionString);
Jeton SAP
- Généré en interne lors de l’utilisation de la clé symétrique, mais nous pouvons le générer et l’utiliser explicitement également.
- Définissez un protocole :
var Http = require('azure-iot-device-http').Http;
. - Créez un jeton SAP :
resourceUri = encodeURIComponent(resourceUri.toLowerCase()).toLowerCase(); var deviceName = "<deviceName >"; var expires = (Date.now() / 1000) + expiresInMins * 60; var toSign = resourceUri + '\n' + expires; // using crypto var decodedPassword = new Buffer(signingKey, 'base64').toString('binary'); const hmac = crypto.createHmac('sha256', decodedPassword); hmac.update(toSign); var base64signature = hmac.digest('base64'); var base64UriEncoded = encodeURIComponent(base64signature); // construct authorization string var token = "SharedAccessSignature sr=" + resourceUri + "%2fdevices%2f"+deviceName+"&sig=" + base64UriEncoded + "&se=" + expires; if (policyName) token += "&skn="+policyName; return token;
- Connectez-vous à l’aide du jeton SAP :
Client.fromSharedAccessSignature(sas, Http);
Certificats
- Générez un certificat X509 auto-signé à l’aide d’un outil tel qu’OpenSSL pour créer des fichiers .cert et .key pour stocker respectivement le certificat et la clé.
- Approvisionnez un appareil qui accepte une connexion sécurisée à l’aide de certificats.
var connectionString = '<connectionString>'; var registry = iothub.Registry.fromConnectionString(connectionString); var deviceJSON = {deviceId:"<deviceId>", authentication: { x509Thumbprint: { primaryThumbprint: "<PrimaryThumbprint>", secondaryThumbprint: "<SecondaryThumbprint>" } }} var device = deviceJSON; registry.create(device, function (err) {});
- Connectez un appareil à l’aide d’un certificat.
var Protocol = require('azure-iot-device-http').Http; var Client = require('azure-iot-device').Client; var connectionString = 'HostName=<HostName>DeviceId=<DeviceId>x509=true'; var client = Client.fromConnectionString(connectionString, Protocol); var options = { key: fs.readFileSync('./key.pem', 'utf8'), cert: fs.readFileSync('./server.crt', 'utf8') }; // Calling setOptions with the x509 certificate and key (and optionally, passphrase) will configure the client //transport to use x509 when connecting to IoT Hub client.setOptions(options); //call fn to execute after the connection is set up client.open(fn);
Utiliser les informations d’authentification par appareil
Intitulé | Détails |
---|---|
Composant | Passerelle cloud IoT |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | Choix de passerelle - Azure IoT Hub |
Informations de référence | Contrôler l’accès à IoT Hub |
Étapes | Utilisez des informations d’authentification par appareil à l’aide des jetons SAP en fonction de la clé d’appareil ou du certificat de client plutôt que des stratégies d’accès partagé au niveau d’IoT Hub. Cela empêche la réutilisation des jetons d’authentification d’une passerelle de champ ou d’un appareil par un autre. |
Garantir que seuls les conteneurs et blobs requis disposent d’un accès en lecture anonyme
Intitulé | Détails |
---|---|
Composant | Stockage Azure |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | StorageType - Blob |
Informations de référence | Gestion de l’accès en lecture anonyme aux conteneurs et aux objets blob, Signatures d’accès partagé (SAP), partie 1 : Présentation du modèle SAP |
Étapes | Par défaut, un conteneur et tous les blobs qu’il contient sont accessibles uniquement par le propriétaire du compte de stockage. Pour fournir aux utilisateurs anonymes des autorisations de lecture sur un conteneur et ses blobs, il est possible de configurer les autorisations du conteneur afin d’autoriser l’accès public. Les utilisateurs anonymes peuvent lire les objets blob d’un conteneur accessible publiquement sans avoir à authentifier la demande. Les conteneurs fournissent les options suivantes pour gérer leur accès :
L’accès anonyme est idéal dans les situations où certains blobs doivent toujours être disponibles pour l’accès en lecture anonyme. Pour un contrôle plus fin, il est possible de créer une signature d’accès partagé de manière à déléguer un accès restreint en utilisant des autorisations différentes sur un intervalle de temps spécifié. Vérifiez que les conteneurs et les blobs, qui peuvent éventuellement contenir des données sensibles, ne reçoivent pas accidentellement un accès anonyme |
Accorder un accès limité aux objets dans le stockage Azure à l’aide de SAS ou SAP
Intitulé | Détails |
---|---|
Composant | Stockage Azure |
Phase SDL | Build |
Technologies applicables | Générique |
Attributs | N/A |
Informations de référence | Signatures d’accès partagé, partie 1 : présentation du modèle SAP, Signatures d’accès partagé, partie 2 : Créer et utiliser une signature d’accès partagé avec Stockage Blob, Comment déléguer l’accès aux objets dans votre compte à l’aide de signatures d’accès partagé et stratégies d’accès stockées |
Étapes | Une signature d’accès partagé (SAP) constitue un moyen efficace pour octroyer aux autres clients un accès limité aux blobs dans un compte de stockage, sans exposer de clé d’accès de compte. La signature d'accès partagé est un URI qui englobe dans ses paramètres de requête toutes les informations nécessaires pour un accès authentifié à une ressource de stockage. Pour accéder aux ressources de stockage avec la signature d'accès partagé, il suffit au client de transmettre cette dernière à la méthode ou au constructeur approprié. Vous pouvez utiliser une signature d'accès partagé lorsque vous voulez fournir un accès aux ressources dans votre compte de stockage à un client qui ne peut pas être approuvé avec la clé du compte. Vos clés de compte de stockage incluent une clé primaire et une clé secondaire, qui octroient toutes deux un accès administratif à votre compte et à toutes ses ressources. En exposant l'une ou l'autre des clés de votre compte, vous courez le risque d'une utilisation malveillante ou négligente de ce dernier. Les signatures d'accès partagé offrent une alternative sûre qui permet aux autres clients de lire, d'écrire et de supprimer des données dans votre compte de stockage en fonction des autorisations que vous avez octroyées, sans avoir besoin de la clé du compte. Si vous avez un ensemble logique de paramètres qui sont chaque fois similaires, il est plus judicieux d’utiliser une stratégie d’accès stockée. Comme l’utilisation d’une signature d’accès partagé dérivée d’une stratégie d’accès stockée vous permet de révoquer immédiatement cette signature d’accès partagé, il est recommandé de toujours utiliser des stratégies d’accès stockées quand cela est possible. |