Les données de configuration du registre de microservices de Microservices Engine (MSE) sont stockées en texte clair. MSE s'intègre à Key Management Service (KMS) pour vous permettre de chiffrer et de déchiffrer les données de configuration, telles que les sources de données, les jetons, les noms d'utilisateur et les mots de passe. Cette fonctionnalité permet de réduire le risque de fuite de données sensibles.
Prérequis
Un moteur Nacos utilisant l'édition Developer, Professional ou Serverless a été créé. Pour plus d'informations, consultez la rubrique Créer une instance.
Key Management Service (KMS) est activé.
Une instance KMS a été achetée et activée. La version de l'image de l'instance KMS doit être supérieure à dkms-3.0.0. Pour plus d'informations, consultez les rubriques Acheter et activer une instance KMS et Mettre à niveau la version de l'image d'une instance KMS.
Une clé a été créée. Pour plus d'informations, consultez la rubrique Prise en main de la gestion des clés
Pour garantir la sécurité des données, MSE utilise Alibaba Cloud KMS pour chiffrer et déchiffrer les données. KMS comprend Shared KMS et Dedicated KMS. Shared KMS n'est plus disponible. Pour plus d'informations, consultez la rubrique [[Annonce] Fin de support et fin de vie pour Shared KMS](t2811231.xdita#). Si vous utilisez Shared KMS, nous vous recommandons de migrer vers Dedicated KMS. Si vous activez KMS après le 31 mars 2022, vous devez acheter Dedicated KMS. Pour plus d'informations, consultez la rubrique [[Annonce de mise à niveau] Migration de KMS vers Dedicated KMS](t2165677.xdita#concept-2165677). Pour plus d'informations sur la facturation de KMS, consultez la rubrique Facturation de KMS 1.0.
Cette rubrique utilise des instances Dedicated KMS. Si vous avez activé Shared KMS avant le 31 mars 2022, consultez la section FAQ.
Créer des configurations chiffrées
Pour créer des configurations chiffrées dans la console MSE, procédez comme suit :
Connectez-vous à la console MSE, puis sélectionnez une région dans la barre de navigation supérieure.
Dans le volet de navigation de gauche, choisissez Microservices Registry > Instances.
Sur la page Instances, cliquez sur le nom de l'instance.
Dans le volet de navigation de gauche, choisissez Configuration Management > Configurations.
Dans le coin supérieur gauche de la page Configurations, sélectionnez un namespace dans la liste déroulante Namespace, puis cliquez sur Add Configuration.
-
Dans le panneau Create Configuration, saisissez un Data ID et un Group. Activez ensuite l'option Data Encryption et sélectionnez une KMS Key. Si vous n'avez pas encore créé de KMS Key, cliquez sur Create. Vous pouvez créer une clé dans la console Key Management Service. Après avoir créé la clé, actualisez le panneau Create Configuration pour afficher la nouvelle clé KMS.
ImportantSi vous activez Dedicated KMS après le 31 mars 2022, vous devez sélectionner l'ID d'une clé utilisée pour le chiffrement et associer cette clé à l'instance MSE Nacos. Ainsi, toutes les configurations ultérieures seront chiffrées à l'aide de cette clé.
Si vous avez activé KMS avant le 31 mars 2022, aucune invite ne s'affiche pour lier l'ID de clé de l'instance Dedicated KMS et vous pouvez utiliser Shared KMS. Les méthodes de configuration permettant aux applications d'accéder à Shared KMS diffèrent.
-
Pour les utilisateurs de Dedicated KMS, l'option KMS AES-256 s'affiche. Pour les utilisateurs de Shared KMS, trois méthodes de chiffrement sont affichées afin de garantir la compatibilité des versions. Nous vous déconseillons de sélectionner KMS ou KMS AES-128.
KMS AES-256 : méthode de chiffrement et de déchiffrement par enveloppe de KMS. Cette méthode utilise une clé 256 bits offrant une forte résistance au chiffrement. Le contenu de configuration chiffré ne peut pas dépasser 50 Ko. Les données de configuration en texte clair ne sont pas transmises à KMS. Nous vous recommandons de sélectionner cette option pour une sécurité accrue. Choisissez la méthode de chiffrement adaptée à vos besoins métier.
KMS AES-128 : méthode de chiffrement utilisant une clé 128 bits et offrant une résistance moyenne. Le contenu de configuration chiffré ne peut pas dépasser 50 Ko.
KMS : nous vous déconseillons de sélectionner cette option, car des caractères spéciaux peuvent entraîner des problèmes de compatibilité. Par exemple, une
esperluette (&)est échappée sous la forme\u0026. Le contenu de configuration chiffré ne peut pas dépasser 6 Ko.
Après la liaison, vous ne pouvez pas modifier la clé. Si vous supprimez la clé, vous ne pourrez plus accéder aux configurations chiffrées.
Dans la section Configuration Format, sélectionnez un format de données, saisissez le contenu de la configuration dans l'éditeur Configuration Content à droite, puis cliquez sur Release.
Utiliser une configuration chiffrée dans le SDK Nacos pour Java
-
Ajoutez les dépendances suivantes au fichier pom.xml de votre projet :
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>{nacos-client-version}</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client-mse-extension</artifactId> <version>{nacos-client-mse-extension-version}</version> </dependency>Description des versions
Version majeure du client Nacos
Version du client Nacos
Version recommandée du plug-in
1.x
V1.4.3 ou ultérieure
V1.0.6 ou ultérieure
2.x
V2.1.1 ou ultérieure
V1.0.6 ou ultérieure
ImportantDes problèmes de stabilité peuvent survenir si la version du plug-in de chiffrement et de déchiffrement ne correspond pas à la version du client Nacos. Nous vous recommandons d'utiliser les versions recommandées.
-
Sélectionnez le code valide que vous souhaitez configurer en fonction du type de framework utilisé.
Utiliser le framework client Nacos
Si vous utilisez le framework client Nacos pour obtenir des configurations, vous devez configurer l'exemple de code suivant.
try { Properties properties = new Properties(); // The address of your Nacos server. properties.put("serverAddr", "{serverAddr}"); // Configure the RAM role of the ECS instance as the access credential. properties.put("ramRoleName", "{ramRoleName}"); // The endpoint of the KMS instance. properties.put("kmsEndpoint", "{kmsEndpoint}"); ConfigService configService = NacosFactory.createConfigService(properties); System.out.println("content:::"+configService.getConfig("{dataId}", "{group}", 6000)); } catch (Exception e) { e.printStackTrace(); }kmsEndpoint indique l'endpoint de l'instance KMS. Si l'environnement d'accès et l'instance KMS se trouvent dans le même VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de l'instance. Si vous accédez à l'instance KMS via Internet, la valeur de kmsEndpoint correspond à l'endpoint public ou à l'endpoint VPC de la passerelle publique. Pour savoir comment obtenir l'endpoint, consultez la rubrique Comment obtenir l'endpoint d'une instance KMS ?
Si vous utilisez une paire AccessKey comme identifiant pour accéder à l'instance KMS, remplacez la configuration suivante :
properties.put("ramRoleName", "{ramRoleName}");Utilisez la configuration suivante :
properties.put("accessKey", "{accessKey}"); properties.put("secretKey", "{secretKey}");Le SDK Nacos pour Java peut utiliser des configurations chiffrées avec plusieurs types d'identifiants d'accès, tels que les jetons Security Token Service (STS) et le nom de ressource Alibaba Cloud (ARN) d'un rôle RAM. Pour plus d'informations sur les identifiants d'accès pris en charge et les méthodes de configuration du client, consultez la rubrique Identifiants d'accès pris en charge pour le chiffrement des configurations du SDK Nacos pour Java.
Si votre service KMS a été activé après le 31 mars 2022 et que vous souhaitez publier des configurations chiffrées dans le SDK, ajoutez le code suivant :
properties.put("keyId", "{keyId}");Remplacez les paramètres serverAddr, ramRoleName, accessKey, secretKey, kmsEndpoint, dataId, group et keyId du code par les paramètres réels de votre service.
Utiliser le framework Spring Cloud Nacos Config
RemarqueSi vous utilisez Spring Cloud Alibaba 2022.x ou 2023.x, mettez à niveau la version vers 2023.0.1.2.
Si vous utilisez Spring Cloud Alibaba 2021.x, mettez à niveau la version vers 2021.0.6.1.
Si vous utilisez Spring Cloud Alibaba 2.x, mettez à niveau la version vers 2.2.10.
Assurez-vous que les versions de Spring Cloud Alibaba, Spring Cloud et Spring Boot sont compatibles. Pour plus d'informations sur la compatibilité des versions, consultez les notes de publication sur le site Web officiel de Spring Cloud Alibaba.
Si vous utilisez le framework Spring Cloud Nacos Config pour obtenir des configurations, vous devez ajouter les configurations suivantes :
spring.cloud.nacos.config.server-addr={serverAddr} spring.config.import=nacos:{dataId}?group={group}&refreshEnabled=true # Use the RAM role of an ECS instance as the access credential. spring.cloud.nacos.config.ramRoleName={ramRoleName} spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}kmsEndpoint indique l'endpoint de l'instance KMS. Si l'environnement d'accès et l'instance KMS se trouvent dans le même VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de l'instance. Si vous accédez à l'instance KMS via Internet, la valeur de kmsEndpoint correspond à l'endpoint public ou à l'endpoint VPC de la passerelle publique. Pour savoir comment obtenir l'endpoint, consultez la rubrique Comment obtenir l'endpoint d'une instance KMS ?
Si vous utilisez une paire AccessKey comme identifiant pour accéder à l'instance KMS, remplacez la configuration suivante :
spring.cloud.nacos.config.ramRoleName={ramRoleName}Utilisez les configurations suivantes :
spring.cloud.nacos.config.accesskey={accessKey} spring.cloud.nacos.config.secretkey={secretKey} # If you use an AccessKey pair to access Nacos, we recommend specifying it # by using JVM parameters or environment variables due to its sensitive nature. # JVM parameters -Dspring.cloud.nacos.config.accessKey={accessKey} -Dspring.cloud.nacos.config.secretKey={secretKey} # Environment variables spring_cloud_nacos_config_accessKey={accessKey} spring_cloud_nacos_config_secretKey={secretKey}Le SDK Nacos pour Java peut utiliser des configurations chiffrées avec plusieurs types d'identifiants d'accès, tels que les jetons Security Token Service (STS) et le nom de ressource Alibaba Cloud (ARN) d'un rôle RAM. Pour plus d'informations sur les identifiants d'accès pris en charge et les méthodes de configuration du client, consultez la rubrique Identifiants d'accès pris en charge pour le chiffrement des configurations du SDK Nacos pour Java.
Si votre service KMS a été activé après le 31 mars 2022 et que vous souhaitez publier des configurations chiffrées dans le SDK, ajoutez le code suivant :
spring.cloud.nacos.config.keyId={keyId}Remplacez les paramètres serverAddr, ramRoleName, accessKey, secretKey, kmsEndpoint, dataId, group et keyId du code par les paramètres réels de votre service.
Description
Le tableau suivant décrit les paramètres. Assurez-vous que les valeurs configurées sont valides.
Paramètre
Description
serverAddr
L'adresse IP de votre instance MSE. Exemple :
mse-*****.nacos-ans.mse.aliyuncs.com.ramRoleName
Le rôle RAM attribué à l'instance ECS ou au cluster ACK.
accessKey et secretKey
L'AccessKey ID et l'AccessKey Secret du compte Alibaba Cloud actuel.
Vous devez spécifier les paramètres accessKey et secretKey. Sinon, vous devez spécifier le paramètre ramRoleName.
kmsEndpoint
L'endpoint de l'instance KMS. Si l'environnement d'accès et l'instance KMS se trouvent dans le même VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de l'instance. Si vous accédez à l'instance KMS via Internet, la valeur de kmsEndpoint correspond à l'endpoint public ou à l'endpoint VPC de la passerelle publique. Pour savoir comment obtenir l'endpoint, consultez la rubrique Comment obtenir l'endpoint d'une instance KMS ?
dataId
L'ID de données de la configuration chiffrée. Exemple :
cipher-kms-aes-256-****.properties.group
Le nom du groupe de la configuration chiffrée.
keyId
L'ID de la clé KMS utilisée pour chiffrer les configurations. Vous pouvez créer et utiliser une clé KMS dans la console.
Exemple :
alia/***oukey-***.
Utiliser une configuration chiffrée dans le SDK Nacos pour Go
-
Exécutez la commande
go getpour télécharger les dépendances dans leSDK client Nacos pour Go.go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8 -
Modifiez les configurations initiales du client Nacos.
Dans le SDK Nacos pour Go, seule une paire AccessKey peut être utilisée comme identifiant pour accéder à l'instance KMS. Remplacez les paramètres serverAddr, accessKey, secretKey et kmsEndpoint du code par les paramètres utilisés dans votre activité, et assurez-vous que le paramètre
OpenKMSest défini sur true pour le chiffrement des configurations.sc := []constant.ServerConfig{ { IpAddr: "{serverAddr}", // Replace with the endpoint of your MSE instance. Port: 8848, }, } var accessKey = "{accessKey}" var secretKey = "{secretKey}" cc := constant.ClientConfig{ NamespaceId: "public", // The namespace ID. OpenKMS: true, // Enable KMS for configuration encryption. AccessKey: accessKey, SecretKey: secretKey, KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",}, TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "/tmp/nacos/log", CacheDir: "/tmp/nacos/cache", RotateTime: "1h", MaxAge: 3, }kmsEndpoint indique l'endpoint de l'instance KMS. Si l'environnement d'accès et l'instance KMS se trouvent dans le même VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de l'instance. Si vous accédez à l'instance KMS via Internet, la valeur de kmsEndpoint correspond à l'endpoint public ou à l'endpoint VPC de la passerelle publique. Pour savoir comment obtenir l'endpoint, consultez la rubrique Comment obtenir l'endpoint d'une instance KMS ?
-
Publiez des configurations chiffrées.
keyId: ID de la clé KMS utilisée pour chiffrer les configurations.configParam := vo.ConfigParam{ DataId: "{dataId}", Group: "{group}", Content: "content", KmsKeyId: "{keyId}", // The ID of the KMS key for encryption. You can create and use a key in the KMS console. } published, err := client.PublishConfig(configParam) if published && err == nil { fmt.Printf("successfully publish: group[%s], dataId[%s], data[%s]\n", configParam.Group, configParam.DataId, configParam.Content) } else { fmt.Printf("failed to publish: group[%s], dataId[%s], data[%s]\n with error: %s\n", configParam.Group, configParam.DataId, configParam.Content, err) }
Paramètres
Le tableau suivant décrit les paramètres. Assurez-vous que les valeurs configurées sont valides.
|
Paramètre |
Description |
|
serverAddr |
L'adresse IP de votre instance MSE. Exemple : |
|
accessKey et secretKey |
L'AccessKey ID et l'AccessKey Secret de l'utilisateur RAM. |
|
kmsEndpoint |
L'endpoint de l'instance KMS. Si l'environnement d'accès et l'instance KMS se trouvent dans le même VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de l'instance. Si vous accédez à l'instance KMS via Internet, la valeur de kmsEndpoint correspond à l'endpoint public ou à l'endpoint VPC de la passerelle publique. Pour savoir comment obtenir l'endpoint, consultez la rubrique Comment obtenir l'endpoint d'une instance KMS ? |
|
dataId |
L'ID de données de la configuration chiffrée. Exemple : |
|
group |
Le nom du groupe de la configuration chiffrée. |
|
keyId |
L'ID de la clé KMS utilisée pour chiffrer les configurations. Vous pouvez créer et utiliser une clé KMS dans la console KMS. Exemple : |
Identifiants d'accès pris en charge pour le chiffrement des configurations du SDK Nacos pour Java
Le SDK Nacos pour Java prend en charge plusieurs identifiants d'accès pour chiffrer les configurations. Vous pouvez sélectionner une méthode pour initialiser le fournisseur d'identifiants en fonction des exigences d'authentification et d'autorisation de votre scénario métier.
Identifiants d'accès pris en charge :
-
Remarque
Pour les environnements Serverless App Engine (SAE), nous vous recommandons d'utiliser un jeton STS pour accéder aux configurations chiffrées MSE. Pour plus d'informations, consultez la section « Utiliser un jeton STS » de la rubrique Authentification d'accès par le client Nacos.
-
Utiliser le rôle RAM d'une instance ECS
RemarqueCette méthode (ECSRAMRole) s'applique uniquement aux environnements ECS, Elastic Container Instance (ECI) et ACK. Serverless App Engine (SAE) ne prend pas en charge l'utilisation du rôle RAM d'une instance ECS pour accéder aux configurations chiffrées MSE.
Pour savoir comment configurer les identifiants d'accès sur le client, consultez la section « Configurer les identifiants d'accès sur le client » de la rubrique Authentification d'accès par le client Nacos. Sélectionnez la stratégie système suivante pour accorder l'autorisation associée à l'identifiant d'accès. Cela permet d'effectuer une opération d'autorisation à granularité grossière pour accorder les autorisations de lecture et d'écriture sur toutes les instances KMS.
|
Stratégie |
Remarque |
|
AliyunKMSFullAccess |
L'autorisation requise pour gérer KMS. Vous pouvez utiliser un rôle RAM auquel cette stratégie est attachée pour gérer toutes les fonctionnalités de la même manière qu'un compte Alibaba Cloud gère KMS. |
FAQ
Comment configurer les paramètres si Shared KMS, activé avant le 31 mars 2022, est utilisé ?
Si vous avez activé Shared KMS avant le 31 mars 2022, il vous suffit de remplacer le paramètre kmsEndpoint par kmsRegionId. kmsRegionId indique la région où réside l'instance KMS, par exemple cn-hangzhou. Suivez les étapes ci-dessous pour modifier la configuration du client en fonction du framework utilisé.
Utiliser une configuration chiffrée dans le SDK client Nacos pour Java
Remplacez la configuration suivante dans le code :
properties.put("kmsEndpoint", "{kmsEndpoint}");
Utilisez la configuration suivante :
properties.put("kms_region_id", "{kmsRegionId}");
Utiliser une configuration chiffrée avec le framework Spring Cloud Nacos Config dans le SDK Nacos pour Java
Remplacez la configuration suivante dans le code :
spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}
Utilisez les configurations suivantes :
spring.cloud.nacos.config.kms_region_id={kmsRegionId}
Utiliser une configuration chiffrée dans le SDK Nacos pour Go
Ajoutez le paramètre RegionId dans ClientConfig. Remplacez les configurations suivantes dans le code :
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",},
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
}
Utilisez les configurations suivantes :
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
RegionId: "{kmsRegionId}",
}
Comment obtenir l'endpoint d'une instance KMS ?
Si votre environnement d'accès et l'instance KMS se trouvent dans le même VPC, définissez
kmsEndpointsur l'endpoint VPC de l'instance. Dans la console KMS, accédez à la page Instance Management, cliquez sur l'instance cible pour afficher ses détails, puis récupérez l'endpoint VPC de l'instance dans la section Basic Information.-
Si vous accédez à l'instance KMS via Internet, vous devez activer l'option Internet Access Status sur la page des détails de l'instance KMS.
Une fois l'accès public activé, l'endpoint public de la passerelle publique est
kms.cn-hangzhou.aliyuncs.comet l'endpoint VPC de la passerelle publique estkms-vpc.cn-hangzhou.aliyuncs.com. L'accès public nécessite le SDK KMS et la limite de performance pour le chiffrement et le déchiffrement symétriques est de 750 opérations par seconde. Nous vous recommandons de configurer des politiques de contrôle d'accès à granularité fine pour renforcer la sécurité. Si vous accédez à l'instance KMS via un VPC, la valeur de kmsEndpoint correspond à l'endpoint VPC de la passerelle publique.
FAQ
Dépannage des erreurs courantes
Procédez comme suit :
-
Vérifiez si l'environnement d'exécution de l'application peut se connecter au VPC dans lequel réside l'instance MSE et au VPC dans lequel réside l'instance KMS.
RemarqueIl n'est pas nécessaire de garantir la connectivité entre l'instance MSE et l'instance KMS.
-
Vérifiez si KMS
V1.0ouV3.0est utilisé. Si KMS V1.0 est utilisé, vous devez vous assurer que KMS a été activé avant le 31 mars 2022.RemarqueSi vous activez KMS après le 31 mars 2022, vous devez acheter Dedicated KMS. La fonctionnalité de chiffrement de KMS V1.0 n'est plus disponible pour les nouveaux utilisateurs.
Vérifiez si la version du client Nacos correspond à la version du plug-in de chiffrement et de déchiffrement. Pour plus d'informations, consultez les descriptions de versions dans cette rubrique.
Dépannage des problèmes du SDK Nacos pour Java
Mots-clés des piles d'exceptions dans les journaux Nacos | Causes |
| Le paramètre d'initialisation |
| L'ID de clé spécifié par le paramètre d'initialisation |
| Le paramètre d'initialisation |
| L'endpoint spécifié par le paramètre d'initialisation |
| Le paramètre d'initialisation |
| La valeur du paramètre d'initialisation |
| Le paramètre d'initialisation |
|
|
| Le paramètre d'initialisation |
| Le fichier spécifié par le paramètre d'initialisation |