Partager via


Accéder à Config Server et Service Registry

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.

Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.

Cet article s’applique à : ✅ Essentiel/Standard ❎ Entreprise

Cet article explique comment accéder aux services Spring Cloud Config Server et Spring Cloud Service Registry managés par Azure Spring Apps à l’aide de la fonctionnalité RBAC (contrôle d’accès en fonction du rôle) de Microsoft Entra.

Remarque

Les applications déployées et exécutées dans le service Azure Spring Apps sont automatiquement associées à l’authentification et à l’autorisation basées sur les certificats lors de l’accès au serveur de configuration du Spring Cloud géré et à Config Server. Vous n’avez pas besoin de suivre ces conseils pour ces applications. Les certificats associés sont entièrement gérés par la plateforme Azure Spring Apps et sont automatiquement injectés dans votre application lorsque vous êtes connecté à Config Server et au registre de service.

Attribuer un rôle à l’utilisateur/au groupe Microsoft Entra, à MSI ou au principal du service

Attribuer le rôle à l'utilisateur [user | group | service-principal | managed-identity] à la portée [management-group | subscription | resource-group | resource].

Nom de rôle Description
Lecteur Azure Spring Apps Config Server Autoriser l'accès en lecture à Azure Spring Apps Config Server.
Contributeur Azure Spring Apps Config Server Autoriser l'accès en lecture, écriture et suppression à Azure Spring Apps Config Server.
Lecteur Azure Spring Apps Service Registry Autoriser l'accès en lecture à Azure Spring Apps Service Registry.
Contributeur Azure Spring Apps Service Registry Autoriser l'accès en lecture, écriture et suppression à Azure Spring Apps Service Registry.

Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

Accéder aux points de terminaison de Config Server et Service Registry

Après l'attribution du rôle, le bénéficiaire peut accéder au Spring Cloud Config Server et aux points d'extrémité du Spring Cloud Service Registry à l'aide des procédures suivantes :

  1. Obtenez un jeton d’accès. Une fois qu'un utilisateur de Microsoft Entra s'est vu attribuer le rôle, il peut utiliser les commandes suivantes pour se connecter à Azure CLI avec un utilisateur, un principal de service ou une identité gérée pour obtenir un jeton d'accès. Pour plus d’informations, consultez Authentifier Azure CLI.

    az login
    az account get-access-token
    
  2. Composez le point de terminaison. Nous prenons en charge les points de terminaison par défaut des services Spring Cloud Config Server et Spring Cloud Service Registry managés par Azure Spring Apps.

    • ’https://SERVICE_NAME.svc.azuremicroservices.io/eureka/{path}’
    • 'https://SERVICE_NAME.svc.azuremicroservices.io/config/{path}'

    Remarque

    Si vous utilisez Microsoft Azure opéré par 21Vianet, remplacez *.azuremicroservices.io par *.microservices.azure.cn. Pour plus d’informations, consultez la section Vérifier les points de terminaison dans Azure dans le guide du développeur Microsoft Azure géré par 21Vianet.

  3. Accédez au point de terminaison composé avec le jeton d’accès. Placez le jeton d’accès dans un en-tête pour fournir l’autorisation : --header 'Authorization: Bearer {TOKEN_FROM_PREVIOUS_STEP}'.

    Par exemple :

    a. Accédez à un point de terminaison comme https://SERVICE_NAME.svc.azuremicroservices.io/config/actuator/health pour voir l'état d’intégrité de Config Server.

    b. Accédez à un endpoint comme https://SERVICE_NAME.svc.azuremicroservices.io/eureka/eureka/apps pour voir les applications enregistrées dans le Spring Cloud Service Registry (Eureka ici).

    Si la réponse est 401 Unauthorized, vérifiez si le rôle a bien été attribué. Il faudra plusieurs minutes pour que le rôle prenne effet ou pour vérifier que le jeton d'accès n'a pas expiré.

Pour plus d'informations sur le point de terminaison de l'actionneur, voir Points de terminaison prêts pour la production.

Pour les points de terminaison Eureka, voir Eureka-REST-operations

Pour les points de terminaison du serveur de configuration et les informations détaillées sur le chemin d'accès, voir ResourceController.java et EncryptionController.java .

Enregistrez les applications Spring Boot sur le serveur de configuration Spring Cloud et le registre de services gérés par Azure Spring Apps

Une fois le rôle attribué, vous pouvez enregistrer les applications Spring Boot sur Spring Cloud Config Server et Service Registry gérés par Azure Spring Apps avec l'authentification par jeton Microsoft Entra. Le serveur de configuration et le registre des services prennent en charge le modèle REST personnalisé pour injecter le jeton de porteur pour l'authentification.

Pour plus d'informations, consultez les échantillons Access Azure Spring Apps managed Config Server et Access Azure Spring Apps managed Service Registry. Les sections suivantes expliquent certains détails importants de ces échantillons.

In AccessTokenManager.java:

AccessTokenManager est responsable de l’obtention d’un jeton d’accès à partir de Microsoft Entra ID. Configurez les informations de connexion du principal du service dans le fichier application.properties et initialisez ApplicationTokenCredentialspour obtenir le jeton. Vous trouverez ce fichier dans les deux exemples.

prop.load(in);
tokenClientId = prop.getProperty("access.token.clientId");
String tenantId = prop.getProperty("access.token.tenantId");
String secret = prop.getProperty("access.token.secret");
String clientId = prop.getProperty("access.token.clientId");
credentials = new ApplicationTokenCredentials(
    clientId, tenantId, secret, AzureEnvironment.AZURE);

In CustomConfigServiceBootstrapConfiguration.java:

CustomConfigServiceBootstrapConfiguration implémente le modèle REST personnalisé pour le serveur de configuration et injecte le jeton à partir de Microsoft Entra ID en tant qu'en-têtes Authorization. Vous pouvez trouver ce fichier dans l'exemple de Config Server.

public class RequestResponseHandlerInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        String accessToken = AccessTokenManager.getToken();
        request.getHeaders().remove(AUTHORIZATION);
        request.getHeaders().add(AUTHORIZATION, "Bearer " + accessToken);

        ClientHttpResponse response = execution.execute(request, body);
        return response;
    }

}

In CustomRestTemplateTransportClientFactories.java:

Les deux classes précédentes concernent l’implémentation du modèle de modèle REST personnalisé pour le Registre du service Spring Cloud. Le intercept composant est le même que dans le serveur de configuration ci-dessus. Veillez à ajouter factory.mappingJacksonHttpMessageConverter() aux convertisseurs de messages. Ce fichier se trouve dans l'exemple de Registre Spring Cloud service.

private RestTemplate customRestTemplate() {
    /*
     * Inject your custom rest template
     */
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getInterceptors()
        .add(new RequestResponseHandlerInterceptor());
    RestTemplateTransportClientFactory factory = new RestTemplateTransportClientFactory();

    restTemplate.getMessageConverters().add(0, factory.mappingJacksonHttpMessageConverter());

    return restTemplate;
}

Si vous exécutez des applications sur un cluster Kubernetes, nous vous recommandons d’utiliser une adresse IP pour inscrire le registre Spring Cloud service pour l’accès.

eureka.instance.prefer-ip-address=true

Étapes suivantes