Activez l'authentification pour les instances Nacos dans Microservices Engine (MSE) afin d'empêcher tout accès non autorisé ou toute modification des données de l'instance. Cette rubrique explique comment activer l'authentification et configurer les identifiants du client.
Prérequis
Méthodes d'accès
L'authentification repose sur la méthode de connexion directe au moteur. Après autorisation, un client Nacos peut accéder à l'instance MSE Nacos avec un utilisateur RAM ou un rôle RAM.
Connexion directe au moteur : accédez directement au moteur Nacos via un SDK ou un client. Cette méthode est destinée à l'accès programmatique.
Connexion au moteur via la console : gérez et surveillez le moteur Nacos depuis la console MSE. Pour plus de détails sur l'octroi de l'accès à la console MSE à un utilisateur RAM, consultez Autorisation du registre et du centre de configuration.
Activer l'authentification
Par défaut, l'authentification est désactivée pour les nouveaux moteurs Nacos, qui répondent alors à toutes les requêtes.
La fonctionnalité de connexion de la console Nacos open source se contente d'enregistrer les informations utilisateur sans authentifier ni intercepter les requêtes. Une fois l'authentification activée pour une instance Nacos, vous ne pouvez plus y accéder via la console Nacos open source et devez utiliser la console MSE.
Pour Nacos 2.x et certaines versions ultérieures où la modification du mot de passe de la console n'est pas prise en charge : après l'activation de l'authentification, vous ne pouvez plus réinitialiser ou modifier le mot de passe Nacos via la console MSE. Vous devez utiliser AccessKey (AK) et SecretKey (SK) pour configurer l'authentification du client. Pour plus d'informations, consultez Méthode 6 : Utiliser une AccessKey dans cette rubrique.
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, cliquez sur parameter settings. Sur la page parameter settings, cliquez sur Edit.
-
Sélectionnez le paramètre ConfigAuthEnabled ou NamingAuthEnabled, cliquez sur Yes dans la colonne Value pour ce paramètre, puis cliquez sur Save and Restart Instance.
ImportantAvant d'activer l'authentification pour le centre de configuration ou le registre, configurez les identifiants d'accès sur le client. Sinon, celui-ci ne pourra pas obtenir les configurations ou les services. Pour plus d'informations, consultez Configurer les identifiants du client.
Ces deux paramètres fonctionnent indépendamment l'un de l'autre et contrôlent chacun leur module respectif.
Paramètre
Description
ConfigAuthEnabled
Active l'authentification pour le centre de configuration. Pris en charge par les instances Basic Edition V1.2.1 et ultérieures, ainsi que par toutes les versions Professional Edition et Developer Edition.
NamingAuthEnabled
Active l'authentification pour le registre. Pris en charge par les instances Professional Edition ou Developer Edition V2.0.4 et ultérieures.
Configurer les identifiants du client
MSE Nacos prend en charge plusieurs méthodes d'initialisation des identifiants. Choisissez celle qui correspond le mieux à votre scénario.
|
Méthode d'initialisation |
Scénario |
Prérequis |
Identifiant sous-jacent |
Validité |
Rotation et actualisation |
|
Applications déployées sur des ressources de calcul Alibaba Cloud, telles que des instances Elastic Compute Service (ECS), des instances Elastic Container Instance (ECI) ou des nœuds worker dans Container Service for Kubernetes (ACK). |
Non |
Jeton STS |
Temporaire |
Actualisation automatique |
|
|
Applications non approuvées déployées sur des nœuds worker dans Container Service for Kubernetes (ACK). |
Non |
Jeton STS |
Temporaire |
Actualisation automatique |
|
|
Applications dans des environnements non approuvés nécessitant un contrôle sur la validité des identifiants et les permissions d'accès. |
Oui |
Jeton STS |
Temporaire |
Actualisation manuelle |
|
|
Applications obtenant leurs identifiants auprès d'un système externe. |
Non |
Jeton STS |
Temporaire |
Actualisation automatique |
|
|
Applications nécessitant un accès délégué aux services cloud, par exemple pour un accès inter-comptes. |
Oui |
Jeton STS |
Temporaire |
Actualisation automatique |
|
|
Applications dans des environnements sécurisés nécessitant un accès à long terme aux services cloud sans rotation fréquente des identifiants. |
Oui |
Access Key (AK) |
Long terme |
Rotation manuelle |
|
|
Applications dans des environnements présentant un risque de compromission de l'Access Key (AK), nécessitant une rotation fréquente des identifiants pour un accès à long terme aux services cloud. |
Non |
Access Key (AK) |
Long terme |
Rotation automatique |
Méthode 1 : S'authentifier avec un rôle RAM
Associez un rôle RAM à une instance ECS ou à un cluster ACK pour accorder à votre application l'accès à MSE. L'application s'authentifie en fournissant le nom du rôle RAM au client Nacos, ce qui élimine le besoin d'identifiants AccessKey statiques. Vous pouvez définir différents rôles et politiques pour un contrôle d'accès granulaire. Pour plus d'informations, consultez Rôles RAM pour les instances ECS, Vue d'ensemble de l'autorisation et Vue d'ensemble des rôles RAM.
Pour utiliser un rôle RAM pour l'authentification, vous devez déployer votre application sur une instance ECS Alibaba Cloud ou un cluster ACK au sein d'un VPC. Pour plus d'informations, consultez Qu'est-ce qu'ECS ?, Qu'est-ce qu'ACK ? et Qu'est-ce qu'un VPC ?.
Étape 1 : Créer un rôle RAM et configurer les politiques
Accorder à une instance ECS l'accès à MSE
(Facultatif) Créez un rôle RAM utilisant un service Alibaba Cloud comme entité de confiance. Pour plus d'informations, consultez Créer un rôle RAM pour un service Alibaba Cloud.
-
Accordez des permissions au rôle RAM en attachant l'une des politiques système suivantes. Ces politiques fournissent un accès en lecture/écriture ou en lecture seule à granularité grossière à toutes les configurations et services des instances Nacos. Pour plus d'informations, consultez Accorder des permissions à un rôle RAM.
Nom de la politique
Description
AliyunMSEFullAccess
Accorde des permissions complètes de gestion MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions opérationnelles qu'un compte Alibaba Cloud.
AliyunMSEReadOnlyAccess
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique peut consulter toutes les ressources MSE sous le compte Alibaba Cloud.
RemarqueVous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder des permissions à granularité fine à une instance, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour les centres de configuration et Exemples de politiques personnalisées courantes pour les registres et les centres de configuration.
Connectez-vous à la console ECS. Dans le volet de navigation de gauche, choisissez Instances & Images > Instance.
-
Dans le coin supérieur gauche de la page, sélectionnez la région cible et le groupe de ressources.
Par exemple, sélectionnez un groupe de ressources dans la liste déroulante All Resources et une région, telle que China (Hangzhou), dans le sélecteur de région.
Recherchez l'instance ECS à gérer, puis choisissez
> Instance Settings > Attach/Detach RAM Role.Dans la boîte de dialogue, sélectionnez le rôle RAM d'instance que vous avez créé, puis cliquez sur OK.
Accorder des permissions à un rôle RAM worker ACK
Lors de la création d'un cluster ACK, un rôle RAM worker est automatiquement créé. Vous pouvez accorder des permissions directement à ce rôle sans en créer un nouveau.
-
Créez une politique personnalisée. Pour plus d'informations, consultez Créer une politique personnalisée.
-
Pour accorder des permissions de gestion complètes pour MSE :
{ "Action": "mse:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } } -
Pour accorder des permissions en lecture seule pour MSE :
{ "Action": [ "mse:Query*", "mse:List*", "mse:Get*" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }
RemarquePour accorder des permissions à granularité fine pour une instance MSE spécifique, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour les centres de configuration et Exemples de politiques personnalisées courantes pour les registres et les centres de configuration.
-
Attachez la politique personnalisée au rôle RAM worker du cluster. Pour plus d'informations, consultez Accorder des permissions au rôle RAM worker du cluster.
Étape 2 : Configurer l'authentification du client
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, configurez le code de votre application comme suit.
Pour utiliser un rôle RAM pour l'authentification, mettez à niveau votre client vers une version prise en charge. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}");
// Registry
NamingService naming = NamingFactory.createNamingService(properties);
// Configuration center
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la configuration suivante au fichier de configuration de votre application.
Mettez à niveau le framework Spring Cloud Alibaba vers la version 2.2.9.RELEASE ou ultérieure.
Mettez à niveau le client Nacos vers la version 2.2.0 ou ultérieure.
## Registry
spring.cloud.nacos.discovery.ramRoleName=${roleName}
## Configuration center
spring.cloud.nacos.config.ramRoleName=${roleName}
Framework Dubbo
Si vous utilisez le framework Dubbo, ajoutez le paramètre suivant à l'URL du registre dans votre fichier de configuration Dubbo.
Mettez à niveau le client Nacos vers la version 2.2.0 ou ultérieure.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?ramRoleName=${roleName}
Go SDK
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
La version 2.3.3 ou ultérieure est recommandée.
// Create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RamRoleName: "${roleName}",
}
// Create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// Create a config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// Create a naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Méthode 2 : Utiliser OIDCRoleARN
Lorsqu'un rôle RAM est configuré pour un nœud worker dans Container Service for Kubernetes (ACK) (comme décrit dans la Méthode 1), les pods sur ce nœud peuvent obtenir un jeton STS du serveur de métadonnées. Cependant, si votre cluster héberge des applications non approuvées, vous pouvez souhaiter empêcher celles-ci d'accéder au serveur de métadonnées et de récupérer le jeton STS du nœud worker.
Pour appliquer des permissions de moindre privilège au niveau du pod, utilisez la fonctionnalité RRSA (RAM Roles for Service Account). Le cluster ACK monte un fichier de jeton OIDC de compte de service pour chaque pod et injecte la configuration dans les variables d'environnement. Le client Nacos lit ces variables et appelle l'opération STS AssumeRoleWithOIDC, échangeant le jeton OIDC contre un jeton STS lié au rôle RAM spécifié. Aucune paire AccessKey ni gestion manuelle de jeton STS n'est requise.
Étape 1 : Activer RRSA pour le cluster ACK
Pour activer la fonctionnalité RRSA pour votre cluster ACK, consultez Utiliser RRSA pour accorder des permissions RAM aux comptes de service pour le contrôle d'accès au niveau du pod.
Étape 2 : Accorder des permissions au rôle RAM
Accordez au rôle RAM de l'étape 1 (par exemple, demo-role-for-rrsa dans Utiliser RRSA pour accorder des permissions RAM aux comptes de service pour le contrôle d'accès au niveau du pod) l'accès à MSE Nacos en attachant l'une des politiques système suivantes. Ces politiques accordent au rôle RAM des permissions en lecture/écriture ou en lecture seule à granularité grossière sur les configurations et services de toutes les instances Nacos. Pour des instructions détaillées, consultez Gérer les permissions d'un rôle RAM.
|
Nom de la politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes de gestion MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions qu'un compte Alibaba Cloud pour effectuer toutes les opérations. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique peut consulter toutes les ressources MSE sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder des permissions d'accès MSE à granularité fine à une instance, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour les centres de configuration et Exemples de politiques personnalisées courantes pour les registres et les centres de configuration.
Étape 3 : Configurer l'authentification du client
Avec cette méthode, il suffit de configurer le RoleSessionName. La fonctionnalité RRSA d'ACK fournit d'autres identifiants temporaires via des variables d'environnement injectées.
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, configurez le code de votre application comme suit.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
## The following parameters are optional.
# This can be replaced by the ALIBABA_CLOUD_POLICY environment variable.
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${policy-with-limited-permissions}");
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la dépendance requise et la configuration suivante au fichier de configuration de votre application.
Mettez à niveau le framework Spring Cloud Alibaba vers la version 2.2.9.RELEASE ou ultérieure.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## registry
spring.cloud.nacos.discovery.server-addr=${nacos-server-address}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## configuration center
spring.cloud.nacos.config.server-addr=${nacos-server-address}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## The following parameters are optional.
# This can be replaced by the ALIBABA_CLOUD_POLICY environment variable.
spring.cloud.nacos.discovery.alibabaCloudPolicy=${policy-with-limited-permissions}
spring.cloud.nacos.config.alibabaCloudPolicy=${policy-with-limited-permissions}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Framework Dubbo
Si vous utilisez le framework Dubbo, ajoutez la dépendance requise et les paramètres suivants à l'URL du registre dans votre fichier de configuration Dubbo.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudRoleSessionName=${custom-role-session-name}
## The following optional parameters are appended to the URL and can be replaced by the ALIBABA_CLOUD_POLICY and ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variables.
&alibabaCloudPolicy=${policy-with-limited-permissions}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Go SDK
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
Utilisez la version 2.3.3 ou ultérieure.
// Create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RoleSessionName: "${custom-role-session-name}",
}
// The following parameters are optional.
ramConfig.Policy = "${policy-with-limited-permissions}"
ramConfig.RoleSessionExpiration = ${session-duration-in-seconds}
// Create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// Create a config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// Create a naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Méthode 3 : Utiliser un jeton STS
Si votre application nécessite un accès temporaire à une instance MSE Nacos, utilisez des identifiants temporaires provenant de Security Token Service (STS). Ces identifiants comprennent une AccessKey ID, une AccessKey Secret et un jeton de sécurité.
Cette méthode exige que vous mainteniez manuellement un jeton STS, ce qui augmente la complexité de maintenance. Si votre application nécessite des accès temporaires répétés, vous devez actualiser manuellement le jeton STS avant son expiration.
Étape 1 (Facultatif) : Créer un utilisateur RAM et un rôle RAM
Si vous devez créer un utilisateur RAM, consultez Créer un utilisateur RAM.
Si vous devez créer un rôle RAM avec un compte Alibaba Cloud comme entité de confiance, consultez Créer un rôle RAM pour un compte Alibaba Cloud.
Étape 2 : Accorder des permissions
Accordez à l'utilisateur RAM de l'étape 1 la permission d'assumer des rôles. Pour plus d'informations, consultez AssumeRole - Obtenir des identifiants d'accès temporaires pour un rôle.
Accordez des permissions au rôle RAM de l'étape 1 en attachant l'une des politiques système suivantes. Ces politiques accordent au rôle RAM un accès en lecture/écriture ou en lecture seule à granularité grossière aux configurations et services de toutes les instances Nacos. Pour plus d'informations, consultez Gérer les permissions d'un rôle RAM.
|
Nom de la politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes pour gérer MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions opérationnelles qu'un compte Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique a un accès en lecture seule à toutes les ressources sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder des permissions à granularité fine à une instance, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour le centre de configuration et Exemples de politiques personnalisées courantes pour les registres et les centres de configuration.
Étape 3 : Obtenir un jeton STS
Obtenez les identifiants d'accès temporaires (jeton STS) pour le rôle RAM de l'étape 1. Pour plus d'informations, consultez AssumeRole - Obtenir des identifiants d'accès temporaires pour un rôle.
Étape 4 : Configurer l'authentification du client
Les identifiants d'accès temporaires comprennent une AccessKey ID, une AccessKey Secret et un jeton de sécurité, qui doivent être utilisés ensemble.
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, ajoutez la dépendance requise et configurez le code de votre application comme suit.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "YOUR_MSE_NACOS_INSTANCE_DOMAIN");
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "YOUR_TEMP_ACCESSKEY_ID");
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "YOUR_TEMP_ACCESSKEY_SECRET");
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
properties.put(ExtensionAuthPropertyKey.SECURITY_TOKEN_KEY.getKey(), "YOUR_TEMP_SECURITY_TOKEN");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la dépendance requise et la configuration suivante au fichier de configuration de votre application.
Le framework Spring Cloud Alibaba doit être en version 2.2.9.RELEASE ou ultérieure.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
## Configuration center
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
spring.cloud.nacos.config.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
Framework Dubbo
Si vous utilisez le framework Dubbo, ajoutez la dépendance requise et les paramètres suivants à l'URL du registre dans votre fichier de configuration Dubbo.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN environment variables instead.
dubbo.registry.address=nacos://YOUR_MSE_NACOS_INSTANCE_DOMAIN:8848?alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID&alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET&alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
Go SDK
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
La version 2.3.3 ou ultérieure est recommandée.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("YOUR_MSE_NACOS_INSTANCE_DOMAIN", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecurityToken: "YOUR_TEMP_SECURITY_TOKEN",
}
//create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithAccessKey("YOUR_TEMP_ACCESSKEY_ID"),
constant.WithSecretKey("YOUR_TEMP_ACCESSKEY_SECRET"),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Méthode 4 : Utiliser une URI d'identifiants
Pour obtenir des identifiants d'un système externe sans gérer directement les clés, utilisez une URI d'identifiants. Le client Nacos récupère un jeton STS à partir de l'URI spécifiée, ce qui élimine le besoin de maintenir manuellement une AccessKey ou un jeton STS.
Le service backend pour l'URI d'identifiants doit actualiser automatiquement le jeton STS afin de garantir que votre application utilise toujours un identifiant valide.
Étape 1 : Vérifier la réponse de l'URI d'identifiants
L'URI d'identifiants doit retourner une réponse au format suivant pour que le client Nacos puisse analyser et utiliser correctement le jeton STS :
Code d'état de la réponse : 200
-
Structure du corps de la réponse :
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
Étape 2 : Accorder des permissions au rôle RAM
Accordez au rôle RAM qui génère les jetons STS l'accès à MSE Nacos en attachant l'une des politiques système suivantes. Ces politiques accordent au rôle RAM un accès en lecture/écriture ou en lecture seule à granularité grossière à toutes les configurations et services des instances Nacos. Pour des instructions détaillées, consultez Gérer les permissions d'un rôle RAM.
|
Politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes de gestion MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions opérationnelles qu'un compte Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique peut consulter toutes les ressources MSE sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder des permissions à granularité fine à une instance, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour le centre de configuration et Exemples d'autorisations personnalisées courantes pour les registres et les centres de configuration.
Étape 3 : Configurer l'authentification du client
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, ajoutez la dépendance requise et configurez votre application comme suit.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification, le chiffrement et le déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
properties.put(ExtensionAuthPropertyKey.CREDENTIALS_URI.getKey(), "${credentials-service-uri}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la dépendance requise et les propriétés suivantes au fichier de configuration de votre application.
Le framework Spring Cloud Alibaba doit être en version 2.2.9.RELEASE ou ultérieure.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification, le chiffrement et le déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
spring.cloud.nacos.discovery.alibabaCloudCredentialsUri=${credentials-service-uri}
## Configuration center
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
spring.cloud.nacos.config.alibabaCloudCredentialsUri=${credentials-service-uri}
Framework Dubbo
Si vous utilisez le framework Dubbo, ajoutez la dépendance requise et le paramètre suivant à l'URL du registre dans votre fichier de configuration Dubbo.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification, le chiffrement et le déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudCredentialsUri=${credentials-service-uri}
Go SDK
Si vous utilisez le client Nacos pour Go, configurez votre application comme suit.
La version 2.3.3 ou ultérieure est recommandée.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
CredentialsURI: "${credentials-service-uri}",
}
//create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Méthode 5 : Utiliser RAMRoleARN
Si votre application nécessite un accès délégué à MSE Nacos, par exemple pour un accès inter-comptes, utilisez un RAMRoleARN. Le client Nacos récupère un jeton STS auprès de STS et l'actualise automatiquement avant expiration. Vous pouvez également utiliser le paramètre policy pour restreindre davantage les permissions du rôle RAM.
Cette méthode nécessite une AccessKey disposant de la permission d'assumer des rôles. Comme bonne pratique, n'accordez à cette AccessKey que la permission AssumeRole et limitez les rôles qu'elle peut assumer. Pour plus d'informations, consultez AssumeRole - Obtenir des identifiants de sécurité temporaires pour un rôle.
Étape 1 (Facultatif) : Créer un utilisateur RAM et un rôle RAM
Si vous n'avez pas d'utilisateur RAM ou si vous devez en créer un, consultez Créer un utilisateur RAM.
Si vous n'avez pas de rôle RAM ou si vous devez en créer un qui fait confiance à un compte Alibaba Cloud, consultez Créer un rôle RAM pour un compte Alibaba Cloud.
Étape 2 : Accorder des permissions RAM
Accordez à l'utilisateur RAM de l'étape 1 la permission d'assumer des rôles. Pour plus d'informations, consultez AssumeRole - Obtenir des identifiants de sécurité temporaires pour un rôle.
Accordez des permissions au rôle RAM de l'étape 1 en attachant l'une des politiques système suivantes. Ces politiques accordent au rôle RAM un accès en lecture/écriture ou en lecture seule à granularité grossière aux configurations et services de toutes les instances Nacos. Pour plus d'informations, consultez Gérer les permissions d'un rôle RAM.
|
Nom de la politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes de gestion MSE, équivalentes aux permissions d'un compte Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour toutes les ressources MSE sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder des permissions à granularité fine à une instance, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour le centre de configuration et Exemples de politiques d'autorisation personnalisées courantes pour les registres et les centres de configuration.
Étape 3 : Configurer l'authentification du client
Pour utiliser cette méthode, configurez le client avec l'AccessKey requise et le RAMRoleARN du rôle cible.
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, ajoutez la dépendance requise et configurez le code de votre application comme suit.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain-name}");
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "${access-key-id-with-assume-role-permission}");
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "${access-key-secret-with-assume-role-permission}");
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_ARN.getKey(), "${role-arn-to-assume}");
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
## The following parameters are optional.
# You can configure the ALIBABA_CLOUD_POLICY environment variable instead.
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${scoped-down-policy}");
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la dépendance requise et les configurations suivantes au fichier de configuration de votre application.
Le framework Spring Cloud Alibaba doit être en version 2.2.9.RELEASE ou ultérieure.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleArn=${role-arn-to-assume}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## Configuration center
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
spring.cloud.nacos.config.alibabaCloudRoleArn=${role-arn-to-assume}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## The following parameters are optional.
# You can configure the ALIBABA_CLOUD_POLICY environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudPolicy=${scoped-down-policy}
spring.cloud.nacos.config.alibabaCloudPolicy=${scoped-down-policy}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Dubbo
Si vous utilisez le framework Dubbo, ajoutez la dépendance requise et les configurations suivantes à l'URL du registre dans votre fichier de configuration Dubbo.
Le client Nacos doit être en version 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement/déchiffrement.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, ALIBABA_CLOUD_ROLE_ARN, and ALIBABA_CLOUD_ROLE_SESSION_NAME environment variables instead.
dubbo.registry.address=nacos://${mse-nacos-instance-domain-name}:8848?alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}&alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}&alibabaCloudRoleArn=${role-arn-to-assume}&alibabaCloudRoleSessionName=${custom-role-session-name}
## The following parameters are optional and are appended to the URL. You can configure the ALIBABA_CLOUD_POLICY and ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variables instead.
&alibabaCloudPolicy=${scoped-down-policy}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Go SDK
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
La version 2.3.3 ou ultérieure est recommandée.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain-name}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RoleArn: "${role-arn-to-assume}",
RoleSessionName: "${custom-role-session-name}",
}
// The following parameters are optional.
ramConfig.Policy = "${scoped-down-policy}"
ramConfig.RoleSessionExpiration = "${session-duration-in-seconds}"
//create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithAccessKey("${access-key-id-with-assume-role-permission}"),
constant.WithSecretKey("${access-key-secret-with-assume-role-permission}"),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Méthode 6 : Utiliser une AccessKey
Étape 1 (Facultatif) : Créer un utilisateur RAM
Si vous devez créer un utilisateur RAM, consultez Créer un utilisateur RAM.
Étape 2 : Accorder des permissions à l'utilisateur RAM
Accordez des permissions à l'utilisateur RAM de l'étape 1 en attachant l'une des politiques système suivantes. Ces politiques accordent à l'utilisateur RAM des permissions en lecture/écriture ou en lecture seule à granularité grossière sur les configurations et services de toutes les instances Nacos. Pour des instructions détaillées, consultez Gérer les permissions des utilisateurs RAM.
|
Politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes pour gérer MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions opérationnelles qu'un compte Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique a un accès en lecture seule à toutes les ressources MSE sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder un accès à granularité fine à une instance MSE, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour le centre de configuration et Exemples de politiques d'autorisation personnalisées courantes pour Microservices Registry et Configuration Center.
Étape 3 : Configurer l'authentification du client
Une paire AccessKey comprend une AccessKey ID et une AccessKey Secret, qui doivent être utilisées ensemble. Après avoir activé l'authentification pour une instance Nacos, vous devez fournir la paire AccessKey de l'utilisateur RAM dans le client Nacos. Sinon, le client ne peut pas accéder à l'instance. Pour obtenir une paire AccessKey, consultez Créer une AccessKey.
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, configurez le code de votre application comme suit.
Pour utiliser une AccessKey pour l'authentification, vous devez mettre à niveau votre client vers une version prise en charge. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement.
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-endpoint}");
properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}");
properties.put(PropertyKeyConst.SECRET_KEY, "${secretKey}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Si vous utilisez le framework Spring Cloud Alibaba, ajoutez la configuration suivante au fichier de configuration de votre application.
Le framework Spring Cloud Alibaba doit être en version 2.2.1.RELEASE ou ultérieure.
## registry
spring.cloud.nacos.discovery.accessKey=${accessKey}
spring.cloud.nacos.discovery.secretKey=${secretKey}
## configuration center
spring.cloud.nacos.config.accessKey=${accessKey}
spring.cloud.nacos.config.secretKey=${secretKey}
Framework Dubbo
Si vous utilisez le framework Dubbo, ajoutez les paramètres suivants à l'URL du registre dans votre fichier de configuration Dubbo.
dubbo.registry.address=nacos://${mse-nacos-endpoint}:8848?accessKey=${accessKey}&secretKey=${secretKey}
Client Nacos pour Go
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
Pour utiliser une AccessKey pour l'authentification, vous devez mettre à niveau votre client vers une version prise en charge. Utilisez la version 2.3.3 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement.
cc := constant.ClientConfig{
AccessKey: "${accessKey}",
SecretKey: "${secretKey}"
}
serverConfigs := []constant.ServerConfig{
{
IpAddr: "${mse-nacos-endpoint}",
Port: 8848
}
}
namingClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
Client Nacos pour Python
Si vous utilisez le client Nacos pour Python, configurez le code de votre application comme suit.
Pour utiliser une AccessKey pour l'authentification, vous devez mettre à niveau votre client vers une version prise en charge. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement.
client = nacos.NacosClient("${mse-nacos-endpoint}", ak=${accessKey}, sk=${secretKey})
Méthode 7 : Utiliser une AccessKey à rotation automatique
Si votre application nécessite un accès à long terme mais que la paire AccessKey risque d'être compromise, utilisez une ClientKey avec Key Management Service (KMS). KMS assure la rotation automatique de la paire AccessKey de l'utilisateur RAM géré à intervalles réguliers, transformant un identifiant statique en identifiant dynamique. KMS prend également en charge la rotation à la demande pour remplacer rapidement une paire AccessKey compromise. Cela élimine la maintenance manuelle, réduisant ainsi les risques de sécurité et la charge opérationnelle. Pour obtenir une ClientKey, consultez Créer un point d'accès d'application.
Étape 1 : Stocker les identifiants RAM dans KMS
Stockez les identifiants d'un utilisateur RAM existant en tant que secret RAM dans une instance KMS. Pour plus d'informations sur l'activation et l'utilisation des secrets RAM dans KMS, consultez Gérer et utiliser les secrets RAM.
Étape 2 : Accorder des permissions à l'utilisateur RAM
Accordez des permissions à l'utilisateur RAM de l'étape 1 en attachant l'une des politiques système suivantes. Ces politiques accordent à l'utilisateur RAM des permissions en lecture/écriture ou en lecture seule à granularité grossière sur les configurations et services de toutes les instances Nacos. Pour des instructions détaillées, consultez Gérer les permissions des utilisateurs RAM.
|
Politique |
Description |
|
AliyunMSEFullAccess |
Accorde des permissions complètes pour gérer MSE. Un utilisateur RAM disposant de cette politique possède les mêmes permissions opérationnelles qu'un compte Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Accorde des permissions en lecture seule pour MSE. Un utilisateur RAM disposant de cette politique a un accès en lecture seule à toutes les ressources MSE sous le compte Alibaba Cloud. |
Vous pouvez attacher jusqu'à cinq politiques à la fois. Pour en attacher davantage, répétez l'opération.
Pour accorder un accès à granularité fine à une instance MSE, créez une politique personnalisée. Pour plus d'informations, consultez Authentification à granularité fine pour les registres, Authentification à granularité fine pour le centre de configuration et Exemples de politiques d'autorisation personnalisées courantes pour Microservices Registry et Configuration Center.
Étape 3 : Créer un fichier de configuration Secrets Manager
Créez un fichier de configuration nommé secretsmanager.properties dans le répertoire racine de votre projet ou dans le classpath. Le fichier doit contenir le contenu suivant :
cache_client_dkms_config_info=[{"regionId":"<your-dkms-region>","endpoint":"<your-dkms-endpoint>","passwordFromFilePath":"<your-password-file-path>","clientKeyFile":"<your-ClientKey-file-path>","ignoreSslCerts":false,"caFilePath":"<your-ca-certificate-file-path>"}]
Pour une description des paramètres du fichier de configuration, consultez Secrets Manager Client.
Étape 4 : Configurer l'authentification du client
Client Nacos pour Java
Si vous utilisez le client Nacos pour Java, ajoutez la dépendance requise et configurez le code de votre application comme suit.
La version du client Nacos doit être 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement des données.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
properties.put(ExtensionAuthPropertyKey.SECRET_NAME.getKey(), "${name-of-the-ram-secret}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba
Si vous utilisez Spring Cloud Alibaba, ajoutez la dépendance requise et la configuration suivante au fichier de configuration de votre application.
La version de Spring Cloud Alibaba doit être 2.2.9.RELEASE ou ultérieure.
La version du client Nacos doit être 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement des données.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
spring.cloud.nacos.discovery.alibabaCloudSecretName=${name-of-the-ram-secret}
## Configuration center
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
spring.cloud.nacos.config.alibabaCloudSecretName=${name-of-the-ram-secret}
Dubbo
Si vous utilisez Dubbo, ajoutez la dépendance requise et le paramètre suivant à l'URL du registre dans votre fichier de configuration Dubbo.
La version du client Nacos doit être 2.1.0 ou ultérieure. Pour plus d'informations, consultez Versions du client Nacos prenant en charge l'authentification et le chiffrement des données.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudSecretName=${name-of-the-ram-secret}
Go SDK
Si vous utilisez le client Nacos pour Go, configurez le code de votre application comme suit.
La version 2.3.3 ou ultérieure est recommandée.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecretName: "${name-of-the-ram-secret}",
}
//create ClientConfig
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Documents connexes
Pour accéder à une instance MSE Nacos via Internet, consultez Configurer une liste d'autorisation.
Pour mettre en place une autorisation à granularité fine, consultez Authentification à granularité fine pour le registre et Authentification à granularité fine pour le centre de configuration.
Pour accorder des permissions pour la console MSE, consultez Autorisation du registre et du centre de configuration.
Pour connaître les limitations du SDK Nacos, consultez Guide des versions du SDK Nacos pour MSE.
Si vous avez des questions sur Nacos, consultez FAQ Nacos.
FAQ
Q : MSE Nacos prend-il en charge l'authentification du client par nom d'utilisateur et mot de passe (par exemple, nacos/nacos) ?
Non. Après avoir activé l'authentification RAM pour MSE Nacos, l'authentification intégrée par nom d'utilisateur/mot de passe n'est plus prise en charge. Les deux mécanismes d'authentification sont mutuellement exclusifs.
Si votre application cliente a configuré spring.cloud.nacos.username et spring.cloud.nacos.password, le serveur Nacos rejette ces requêtes, provoquant des erreurs Read timed out ou des échecs de connexion même lorsque le réseau fonctionne normalement.
Approche correcte : supprimez ou laissez vides les champs nom d'utilisateur et mot de passe dans la configuration de votre client, et adoptez l'une des méthodes d'identifiants RAM prises en charge, telles que AccessKey/SecretKey ou ECS RAM Role. Pour plus d'informations sur la configuration des identifiants, consultez Configurer les identifiants du client.
Termes de recherche associés : définir le mot de passe de connexion de l'application, réinitialiser le mot de passe Nacos à la valeur originale nacos, KMS causant des problèmes de connexion.
Q : Mon client Nacos signale NacosException: Forbidden/no right ou accessKeyId can't be null. Comment résoudre ce problème ?
Résolvez le problème en fonction de l'erreur spécifique :
Scénario 1 : Erreur Forbidden/no right
Cause : la configuration d'authentification du client ne répond pas aux exigences. Cette erreur apparaît si la version du SDK ou les paramètres d'authentification sont incorrects, même lorsque la connexion réseau est normale.
Résolution :
Vérifiez que vous avez mis à niveau le SDK du client Nacos vers une version compatible. Pour la version client requise, consultez les exigences de version dans la méthode de configuration des identifiants correspondante dans cette rubrique.
Confirmez que vous avez correctement configuré tous les paramètres d'authentification requis (par exemple, AccessKey ID, AccessKey secret ou nom de rôle RAM) conformément aux instructions de cette rubrique.
Scénario 2 : Erreur accessKeyId can't be null dans les clusters ACK utilisant ECS RAM Role
Cette erreur indique que les identifiants ECS RAM Role ne peuvent pas être récupérés. Effectuez le dépannage dans l'ordre suivant :
-
Vérifier la connectivité réseau VPC : vérifiez que le Pod peut atteindre l'instance MSE sur le port 8848. Exécutez la commande suivante depuis l'intérieur du Pod :
telnet <MSE Nacos instance domain> 8848 -
Vérifier la liaison du rôle RAM : exécutez la commande suivante à l'intérieur du Pod pour confirmer que le service de métadonnées retourne le nom du rôle (et non une erreur 404) :
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/Si la commande retourne une erreur 404 ou une réponse vide, le rôle RAM n'est pas correctement lié à l'instance ECS ou au nœud worker du cluster ACK.
Vérifier les permissions du rôle RAM : confirmez que le rôle RAM a reçu les permissions d'accès MSE requises, telles que AliyunMSEFullAccess ou AliyunMSEReadOnlyAccess. Pour plus d'informations sur l'octroi de permissions, consultez les étapes d'autorisation dans Méthode 1 : S'authentifier avec un rôle RAM de cette rubrique.
Vérification temporaire : si la méthode ECS RAM Role continue de signaler des erreurs après avoir suivi les étapes ci-dessus, basculez temporairement vers la méthode AccessKey/SecretKey pour vérifier la connexion. Si la méthode AK/SK réussit, le problème est spécifique à la configuration du rôle RAM (par exemple, liaison du rôle ou accessibilité du service de métadonnées).