O plug-in STS do SDK de web tracking para JavaScript utiliza credenciais temporárias do Alibaba Cloud Security Token Service (STS) para enviar logs sem precisar ativar o recurso de web tracking no Logstore, o que ajuda a evitar dados incorretos.
Informações básicas
Sem a autorização temporária do STS, é necessário ativar o recurso de web tracking no Logstore. Isso permite gravações anônimas a partir de navegadores e pode gerar dados incorretos. As etapas a seguir descrevem como o plug-in STS envia logs:
Um navegador solicita uma credencial de identidade temporária (token STS) a um servidor de negócios.
-
O servidor de serviços solicita um token STS ao serviço STS.
Um par de AccessKey do usuário do Resource Access Management (RAM) está configurado no servidor, e o usuário RAM possui a política AliyunSTSAssumeRoleAccess anexada.
O servidor usa o par de AccessKey do usuário RAM para chamar a operação AssumeRole do STS e obter o token STS da função RAM. Utilize o parâmetro
Policydo AssumeRole para restringir as permissões de diferentes tokens STS com base no usuário ou dispositivo.
O STS retorna um token STS ao servidor de negócios.
O servidor de serviços devolve o token STS ao navegador.
O navegador utiliza o token STS obtido para assumir a função RAM e envia os logs coletados para o Logstore.
O Simple Log Service retorna uma resposta ao navegador após o envio do log.
Pré-requisitos
Crie um usuário RAM e anexe a política AliyunSTSAssumeRoleAccess a ele. Para mais informações, consulte Criar um usuário RAM.
Para saber como configurar o par de AccessKey do usuário RAM nas variáveis de ambiente do servidor de negócios, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.
-
Crie uma função RAM para uma conta confiável da Alibaba Cloud e conceda a ela permissão para gravar dados no projeto especificado. Para mais detalhes, veja Criar uma função RAM para uma conta confiável da Alibaba Cloud e Exemplos de políticas personalizadas do RAM.
{ "Version": "1", "Statement": [ { "Action": [ "log:Post*" ], "Resource": "acs:log:*:*:project/<The name of the specified project.>/*", "Effect": "Allow" } ] }
Etapa 1: Instale e configure o SDK
Este tópico utiliza o método npm para instalar o SDK de web tracking para JavaScript e coletar logs de sites. Caso prefira usar o método Alibaba Cloud CDN, consulte WebTracking JavaScript SDK.
Instale o Node.js.
-
Execute o comando abaixo no servidor de negócios para instalar as dependências.
npm install --save @aliyun-sls/web-track-browser npm install --save @aliyun-sls/web-sts-plugin -
Adicione o código a seguir ao seu programa para configurar o SDK.
import SlsTracker from '@aliyun-sls/web-track-browser' import createStsPlugin from '@aliyun-sls/web-sts-plugin' const opts = { host: '${host}', // The Simple Log Service endpoint for the region. Example: cn-hangzhou.log.aliyuncs.com. project: '${project}', // The name of the project. logstore: '${logstore}', // The name of the Logstore. time: 10, // The interval at which logs are sent. Default value: 10. Unit: seconds. count: 10, // The maximum number of logs that can be sent in each request. Default value: 10. topic: 'topic',// The custom topic of logs. source: 'source', tags: { tags: 'tags', }, } const stsOpt = { accessKeyId: '', accessKeySecret: '', securityToken: '', // The following is a simple example of an STS token refresh function. refreshSTSToken: () => new Promise((resolve, reject) => { const xhr = new window.XMLHttpRequest() xhr.open('GET', 'localhost:7000/test/sts', true) xhr.send() xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { let credential = JSON.parse(xhr.response) // The purpose of the function is to configure the temporary key and token of stsOpt. stsOpt.accessKeyId = credential.AccessKeyId stsOpt.accessKeySecret = credential.AccessKeySecret stsOpt.securityToken = credential.SecurityToken resolve() } else { reject('Wrong status code.') } } } }), // refreshSTSTokenInterval: 300000, // stsTokenFreshTime: undefined, } // Create a tracker. const tracker = new SlsTracker(opts) // Create the STS plug-in. const stsPlugin = createStsPlugin(stsOpt) // Use the STS plug-in. tracker.useStsPlugin(stsPlugin) // Assume that you want to upload a single log. tracker.send({ eventType:'view_product', productName: 'Tablet', price: 500 })A tabela a seguir descreve os parâmetros de web tracking.
Parâmetro
Obrigatório
Descrição
host
Sim
Endpoint da região onde o Simple Log Service está localizado. Neste exemplo, utiliza-se o endpoint do Simple Log Service para a região China (Hangzhou). Substitua o valor pelo endpoint real. Para mais informações, consulte Endpoints.
project
Sim
Nome do projeto.
logstore
Sim
Nome do Logstore.
time
Não
Intervalo de envio dos logs. Valor padrão: 10. Unidade: segundos.
count
Não
Quantidade máxima de logs enviados por requisição. Valor padrão: 10.
topic
Não
Tópico dos logs. Defina um valor personalizado para identificá-los.
source
Não
Origem dos logs. Especifique um valor personalizado para identificação.
tags
Não
Tags personalizadas para identificar os logs.
A tabela abaixo detalha os parâmetros do STS.
Parâmetro
Obrigatório
Descrição
-
accessKeyId
-
accessKeySecret
-
securityToken
Sim
-
O servidor de negócios utiliza o par de AccessKey do usuário RAM para invocar a operação AssumeRole. Os parâmetros de resposta incluem
AccessKeySecret,AccessKeyIdeSecurityToken. -
Nos parâmetros de entrada da operação AssumeRole,
DurationSecondsdefine a validade do token, enquantoPolicydetermina o escopo de permissões.
refreshSTSToken
Sim
Função que obtém periodicamente novos tokens STS para atualizar os campos de credencial. Compatível com Promise e funções assíncronas.
refreshSTSTokenInterval
Não
Intervalo de atualização dos tokens, em milissegundos. Valor padrão: 300.000 (5 minutos).
stsTokenFreshTime
Não
Timestamp da aquisição mais recente do token. Não é necessário definir este parâmetro.
-
Referências
Este tópico utiliza o SDK de web tracking para JavaScript na coleta de logs de sites. Para saber como usar esse SDK na coleta de logs de mini programas, consulte WebTracking JavaScript SDK para mini programas.
Perguntas frequentes
O SDK inicia sem erros, mas ao enviar logs, exibe o erro TypeError: Cannot read properties of undefined (reading 'sigBytes'). O que fazer nessa situação?
Causa provável: problema de criptografia do CryptoJS. Como é difícil modificar pacotes de terceiros, recomenda-se usar o web tracking para gravações não autenticadas. Para mais detalhes, consulte Coletar logs do lado do cliente com WebTracking.