Simple Log Service vous permet d'intégrer des pages de la console, telles que les pages de requête et d'analyse ainsi que les tableaux de bord, dans une application web auto-gérée. Vous pouvez ainsi partager ces pages avec d'autres utilisateurs, qui consulteront vos données de journal sans authentification. Les URL des pages partagées sont appelées URL sans connexion.
Fonctionnement
Pour permettre aux utilisateurs de consulter vos données de journal sans mot de passe, nous vous recommandons d'utiliser la solution basée sur les tickets. Pour plus d'informations, consultez la rubrique Intégration et partage de pages de la console.
Le service Single Sign On (SSO) (signin.alibabacloud.com) fourni par Resource Access Management (RAM) prend en charge l'intégration d'un jeton de connexion dans une URL de connexion. Lorsqu'un utilisateur accède à une URL sans connexion, le service SSO est d'abord appelé. Si le service SSO détecte un jeton de connexion valide, il redirige l'utilisateur vers la page spécifiée. L'utilisateur peut ainsi consulter les données de journal sur cette page sans saisir de mot de passe. Le schéma suivant illustre le processus d'accès.

Un utilisateur accède à votre application web.
Le serveur web appelle Security Token Service (STS) pour obtenir un jeton de sécurité en utilisant la paire de clés AccessKey du rôle RAM requis.
STS renvoie un jeton de sécurité.
Le serveur web appelle le service SSO pour obtenir un jeton de connexion à l'aide du jeton de sécurité.
Le service SSO renvoie un jeton de connexion.
Le serveur web génère une URL sans connexion pour une page de la console Simple Log Service et renvoie cette URL au client. Le client utilise ensuite l'URL sans connexion pour accéder à la page.
Précautions
Avant d'utiliser la fonctionnalité d'intégration des pages de la console, tenez compte des points suivants :
Cette fonctionnalité prend uniquement en charge l'accès basé sur les rôles RAM.
Les jetons générés par STS sont des informations d'identification temporaires. Vous ne pouvez utiliser ces identifiants pour accéder aux URL sans connexion des pages intégrées qu'une seule fois dans votre navigateur. Si vous tentez d'accéder plusieurs fois aux URL avec les mêmes identifiants, une erreur liée à SigninToken se produit.
Une logique de vérification s'applique côté backend. Nous vous recommandons de régénérer les URL sans connexion des pages intégrées 5 minutes avant l'expiration de votre SigninToken. Si vous ne régénérez pas les URL à temps, l'accès aux pages intégrées devient invalide après l'expiration du SigninToken et une erreur liée à SigninToken se produit.
Vous pouvez intégrer uniquement des pages complètes de requête et d'analyse, des pages de requête et des tableaux de bord. L'intégration des pages d'alerte n'est pas prise en charge.
Procédure
Préparer l'URL à partager
-
Récupérez l'URL de la page de requête et d'analyse ou du tableau de bord que vous souhaitez partager.
RemarqueVous pouvez intégrer uniquement des pages complètes de requête et d'analyse, des pages de requête et des tableaux de bord. L'intégration des pages d'alerte n'est pas prise en charge.
-
Page complète de requête et d'analyse :
https://sls.console.alibabacloud.com/lognext/project/<Project name>/logsearch/<Logstore name>?slsRegion=<Region of the project>&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true -
Page de requête :
https://sls.console.alibabacloud.com/lognext/project/<Project name>/logsearch/<Logstore name>?slsRegion=<Region of the project>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=true
-
Tableau de bord :
https://sls.console.alibabacloud.com/lognext/project/<Project name>/dashboard/<Dashboard ID>?slsRegion=<Region of the project>&isShare=true&hideTopbar=true&hideSidebar=true&ignoreTabLocalStorage=trueRemarqueL'élément Dashboard ID mentionné ci-dessus apparaît uniquement dans l'URL d'une page de tableau de bord. Il ne s'agit pas du nom affiché sur le tableau de bord.
-
Page Full-stack Observability
Dans cet exemple, la page d'analyse des traces est utilisée. Pour plus d'informations, consultez la rubrique Intégration de l'observabilité full-stack.
https://sls4service.console.alibabacloud.com/lognext/app/observability/trace/<Project name>/<ID of a Full-stack Observability instance>?resource=/trace/<ID of a Full-stack Observability instance>/explorer&hideTopbar=true&isShare=true
-
-
Remplacez l'adresse hôte dans l'URL par
sls4service.console.alibabacloud.com.Par exemple, vous pouvez partager une page de tableau de bord accessible via l'URL suivante dans la console Simple Log Service :
https://sls.console.alibabacloud.com/lognext/project/project_name/dashboard/dashboard-1651116703628-54041Remplacez l'adresse hôte
sls.console.alibabacloud.comparsls4service.console.alibabacloud.compour générer l'URL à partager suivante :https://sls4service.console.alibabacloud.com/lognext/project/project_name/dashboard/dashboard-1651116703628-54041
Créer un rôle RAM et un utilisateur RAM
Créez un rôle RAM et accordez-lui les autorisations nécessaires pour accéder aux pages que vous souhaitez partager, comme un tableau de bord. Créez ensuite un utilisateur RAM et accordez-lui les autorisations pour assumer ce rôle RAM.
Créer un rôle RAM
Créez un rôle RAM pouvant être assumé par un utilisateur RAM ou un autre rôle RAM au sein du même compte Alibaba Cloud. Pour plus d'informations, consultez la rubrique Utilisation des rôles RAM pour l'accès aux ressources entre comptes.
-
Accordez au rôle RAM les autorisations nécessaires pour accéder à l'URL de la page que vous souhaitez partager. Par exemple, vous pouvez accorder des autorisations en lecture seule sur Simple Log Service.
{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*", "log:Query*" ], "Resource": "*", "Effect": "Allow" } ] } Notez le nom de ressource Alibaba Cloud (ARN) du rôle RAM, qui suit le format
acs:ram::137******44:role/role-name.
Créer un utilisateur RAM
Créez un utilisateur RAM. Pour plus d'informations, consultez la rubrique Création d'un utilisateur RAM et attribution d'autorisations. Lors de la création de l'utilisateur RAM, sélectionnez l'option OpenAPI Access. Une fois l'utilisateur créé, notez sa paire de clés AccessKey.
-
Accordez à l'utilisateur RAM l'autorisation d'assumer un rôle RAM.
RemarquePour le paramètre
Resource, saisissez l'ARN du rôle RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "acs:ram::137******44:role/role-name" } ] }
Générer une URL sans connexion
Générez l'URL sans connexion de la page de la console que vous souhaitez partager afin de permettre un accès sans authentification. Pour obtenir des exemples de code écrits dans des langages tels que Java et Python, consultez la section Exemples de code.
-
Utilisez la clé
AccessKeyde l'utilisateur RAM pour appeler STS et obtenir un jeton de sécurité. Définissez la durée de validité du jeton selon vos besoins métier. Exemple de code :DefaultProfile.addEndpoint("", "", "Sts", stsHost); IClientProfile profile = DefaultProfile.getProfile("", <AccessKeyId>, <AccessKeySecret>); DefaultAcsClient client = new DefaultAcsClient(profile); AssumeRoleRequest assumeRoleReq = new AssumeRoleRequest(); assumeRoleReq.setRoleArn(roleArn); // The ARN of the RAM role. assumeRoleReq.setRoleSessionName(roleSession); assumeRoleReq.setMethod(MethodType.POST); assumeRoleReq.setDurationSeconds(3600L); AssumeRoleResponse assumeRoleRes = client.getAcsResponse(assumeRoleReq); -
Appelez le service SSO pour obtenir un jeton de connexion. L'exemple suivant montre le format de la requête d'accès. Assurez-vous que la valeur de
TicketTypeest définie surmini.http://signin.alibabacloud.com/federation?Action=GetSigninToken &AccessKeyId=<The AccessKey ID of the temporary AccessKey pair that is returned by STS> &AccessKeySecret=<The AccessKey secret of the temporary AccessKey pair that is returned by STS> &SecurityToken=<The token that is returned by STS> &TicketType=miniDonnées renvoyées :
{ "RequestId": "02b47c77c5fd48789d23773af853e9f7_936be_1706585994094_1.229", "SigninToken": "svX6LGcBbWLExKD5hcwdLu6RsLQbv36fWZN36WhxkTXpTcDpmzs2K6X8uFvCqGsBTU4KWJMffYz2rAVbdJXHMECgUfyzS869wh2DBdFEQo3e2fJgZ5YtcMSVnoX7pterS2f7926jFvdBXVFEF54JkUCMrDAutNRv1u7ZReC7v8oQoG5UmjJBbHUyvLTn5UDDvDfNowMVyRskrZRFUKT2qAMZ4Gnc****" } -
Ajoutez le jeton de connexion à l'URL à partager pour générer une URL sans connexion.
http://signin.alibabacloud.com/federation?Action=Login &LoginUrl=<The URL to which you are redirected when your logon fails. We recommend that you specify the URL to which you are redirected when the HTTP status code 302 is returned on your self-managed application. You must use encodeURL to transcode the URL. > &Destination=<The pending-sharing URL of the query and analysis page or dashboard page that you want to share. If parameters are configured, you must use encodeURL to transcode the parameters. > &SigninToken=<The logon token that is obtained. You must use encodeURL to transcode the token. >
Intégrer l'URL sans connexion en tant qu'iFrame
Intégrez l'URL sans connexion dans votre page web sous forme d'iFrame.
La première fois que vous accédez à une URL sans connexion dans votre navigateur, vous pouvez tester l'URL. Une fois le test terminé, le jeton de connexion utilisé devient invalide. Vous devez alors régénérer une URL sans connexion.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Share a console page</title>
</head>
<body>
<iframe width="1280" height="720" src="Logon-free URL"> </iframe>
</body>
</html>
Exemples de code
Pour obtenir des exemples de code écrits en PHP, Python et Go, consultez les liens suivants :
-
L'exemple de code suivant présente les dépendances Maven pour Java :
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-sts</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.5.0</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68.noneautotype</version> </dependency>
FAQ
-
Description du problème
Lorsqu'une URL sans connexion est intégrée dans une page web sous forme d'iFrame, l'erreur suivante peut apparaître :
Refused to frame 'https://signin.alibabacloud.com/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' *.aliyun.com" -
Cause
Pour des raisons de sécurité, les iFrames interdomaines ne sont pas pris en charge.
-
Solutions
Modifiez l'en-tête Content-Security-Policy (CSP).
Vous pouvez spécifier un nom de domaine exact ou un nom de domaine générique dans une directive CSP pour autoriser l'intégration de pages depuis le site web concerné. Par exemple, utilisez la directive CSP suivante pour autoriser l'intégration de pages depuis les sites web
aliyun.comet*.aliyun.com:Content-Security-Policy: frame-ancestors 'self' aliyun.com *.aliyun.com;Vous pouvez également utiliser le caractère générique (*) dans une directive CSP pour autoriser l'intégration de pages depuis tous les sites web. Exemple :
Content-Security-Policy: frame-ancestors *;L'autorisation de l'intégration de pages depuis tous les sites web engendre des risques de sécurité. Nous vous recommandons de ne pas autoriser cette pratique sauf si cela est strictement nécessaire. Pour plus d'informations, consultez la page Référence sur la politique de sécurité du contenu.