Todas as requisições da API do SLS exigem autenticação baseada em assinatura com pares de AccessKey da Alibaba Cloud e assinatura HMAC-SHA1.
Observações de uso
O SDK do SLS gerencia a assinatura automaticamente e oferece suporte a várias linguagens. Sempre que possível, use o SDK em vez de assinar manualmente. Visão geral do SDK do Simple Log Service.
Processo de verificação de segurança:
-
Identificar o solicitante.
O solicitante gera uma assinatura digital com um par de AccessKey. O SLS usa esse par para verificar a identidade e controlar o acesso.
-
Detectar adulteração na requisição.
O SLS recalcula a assinatura no servidor e a compara com a assinatura fornecida pelo cliente. Se houver divergência, isso indica adulteração e a requisição é rejeitada.
A assinatura requer um par de AccessKey. Par de AccessKey. Use um par existente ou crie um novo e certifique-se de que ele esteja ative.
As seções a seguir abordam a estrutura da requisição, o cálculo da assinatura e exemplos de código de assinatura.
Estrutura da requisição
A tabela a seguir lista os campos de cabeçalho HTTP obrigatórios. Os valores diferenciam maiúsculas de minúsculas.
|
Campo |
Descrição |
Exemplo |
|
x-log-signaturemethod |
Método de criptografia. |
hmac-sha1 |
|
x-log-apiversion |
Versão da API. |
0.6.0 |
|
Date |
Carimbo de data/hora HTTP padrão no formato RFC 822/1123 (GMT). Formato: |
Mon, 3 Jan 2010 08:33:47 GMT |
|
Content-MD5 |
Hash MD5 do corpo da requisição como string hexadecimal em maiúsculas. |
72A15D7DE7EE9E7BB86461FFEA9499 |
|
Authorization |
Assinatura da requisição. Formato: |
LOG testAccessKeyId:RLETq4u7sWb3cssZIhsun**** |
|
Content-Type |
Tipo do corpo da requisição HTTP. Omita este campo se a requisição não tiver corpo. |
application/json |
Exemplo de requisição HTTP assinada:
POST /logstores/test-logstore/shards/0?action=split HTTP/1.1
Host: ali-test-project.cn-hangzhou.log.aliyuncs.com
Date: Tue, 23 Aug 2022 12:12:03 GMT
x-log-apiversion: 0.6.0
x-log-signaturemethod: hmac-sha1
Content-Length: 18
Content-Type: application/json
Content-MD5: 49DFDD54B01CBCD2D2AB5E9E5EE6B9B9
Authorization: LOG testAccessKeyId:RLETq4u7sWb3cssZIhsun****
{"hello": "world"}
Processo de cálculo da assinatura
O cabeçalho Authorization usa o formato LOG accessKeyId:Signature, onde AccessKeyId é o seu ID de chave e Signature é a string de assinatura calculada. Esta seção descreve como construir o valor de Signature.
Mensagem de assinatura
Uma string de assinatura é produzida pela criptografia e codificação de uma mensagem de assinatura. A figura a seguir ilustra o processo de construção.
|
Parâmetro |
Descrição |
Exemplo |
|
method |
Método da requisição HTTP em maiúsculas. Valores válidos: GET, POST, PUT e DELETE. |
GET |
|
Content-MD5 |
Hash MD5 do corpo da requisição como string hexadecimal em maiúsculas. String vazia se não houver corpo. |
49DFDD54B01CBCD2D2AB5E9E5EE6B9B9 |
|
Content-Type |
Tipo do corpo da requisição HTTP. String vazia se não houver corpo. |
application/json |
|
Date |
Hora atual no formato RFC 822/1123 (GMT). Formato: |
Mon, 3 Jan 2010 08:33:47 GMT |
|
Header |
Cabeçalhos com prefixo |
|
|
Uri |
Caminho da requisição, excluindo o nome de domínio e os parâmetros de consulta. |
/logstores/test-logstore |
|
Parâmetros relacionados à consulta |
Parâmetros de consulta ordenados por chave em ordem crescente, unidos por |
offset=1&size=10 |
Exemplo de mensagem de assinatura. Cada linha, exceto a última, termina com uma quebra de linha.
POST
1572A15D7DE7EE9E7BB86461FFEA9499
application/json
Tue, 23 Aug 2022 12:12:03 GMT
x-log-apiversion:0.6.0
x-log-bodyrawsize:0
x-log-signaturemethod:hmac-sha1
/logstores?offset=1&size=10
String de assinatura
Para calcular a string de assinatura:
Construa a mensagem de assinatura.
Criptografe a mensagem com HMAC-SHA1 usando seu AccessKey secret.
Codifique o resultado em Base64 para gerar a string de assinatura.
Exemplos
Os exemplos a seguir usam este par de AccessKey:
AccessKeyId = "bq2sjzesjmo86kq****"
AccessKeySecret = "4fdO2fTDDnZPU/L7CHNd****"
-
Exemplo 1
Liste todos os Logstores no ali-test-project usando uma requisição GET. Requisição HTTP a ser assinada:
GET /logstores?logstoreName=&offset=0&size=1000 HTTP/1.1 Date: Mon, 09 Nov 2015 06:11:16 GMT Host: ali-test-project.cn-hangzhou.log.aliyuncs.com x-log-apiversion: 0.6.0 x-log-bodyrawsize:0 x-log-signaturemethod: hmac-sha1Mensagem de assinatura gerada:
GET Mon, 09 Nov 2015 06:11:16 GMT x-log-apiversion:0.6.0 x-log-bodyrawsize:0 x-log-signaturemethod:hmac-sha1 /logstores?logstoreName=&offset=0&size=1000Como requisições GET não possuem corpo, Content-MD5 e Content-Type são strings vazias. Assinatura resultante:
jEYOTCJs2e88o+y5F4/S5I****Requisição HTTP assinada:
GET /logstores?logstoreName=&offset=0&size=1000 HTTP/1.1 Date: Mon, 09 Nov 2015 06:11:16 GMT Host: ali-test-project.cn-hangzhou.log.aliyuncs.com x-log-apiversion: 0.6.0 x-log-bodyrawsize:0 x-log-signaturemethod: hmac-sha1 Authorization: LOG bq2sjzesjmo86kq35behupbq:jEYOTCJs2e88o+y5F4/S5I**** -
Exemplo 2
Grave o seguinte log no test-logstore do ali-test-project:
topic="" time=1447048976 source="10.10.10.1" "TestKey": "TestContent"Requisição HTTP a ser assinada:
POST /logstores/test-logstore HTTP/1.1 Date: Mon, 09 Nov 2015 06:03:03 GMT Host: ali-test-project.cn-hangzhou.log.aliyuncs.com x-log-apiversion:0.6.0 x-log-bodyrawsize:50 x-log-signaturemethod:hmac-sha1 Content-MD5: 1DD45FA4A70A9300CC9FE7305AF2C494 Content-Length: 52 <The log is serialized into byte streams in the Protobuf format.>O log é serializado no formato Protocol Buffer (Protobuf) como corpo da requisição. Para mais informações sobre o formato Protobuf, consulte Codificação de dados. Content-Type é application/x-protobuf e Content-MD5 é o hash MD5 do corpo. Mensagem de assinatura gerada:
POST 1DD45FA4A70A9300CC9FE7305AF2C494 application/x-protobuf Mon, 09 Nov 2015 06:03:03 GMT x-log-apiversion:0.6.0 x-log-bodyrawsize:50 x-log-compresstype:lz4 x-log-signaturemethod:hmac-sha1 /logstores/ali-test-logstoreAssinatura resultante:
XWLGYHGg2F2hcfxWxMLiNk****Requisição HTTP assinada:
POST /logstores/ali-test-logstore HTTP/1.1 Date: Mon, 09 Nov 2015 06:03:03 GMT Host: ali-test-project.cn-hangzhou.log.aliyuncs.com x-log-apiversion:0.6.0 x-log-bodyrawsize:50 x-log-compresstype:lz4 x-log-signaturemethod:hmac-sha1 Content-MD5: 1DD45FA4A70A9300CC9FE7305AF2C494 Content-Length: 52 Authorization: LOG bq2sjzesjmo86kq35behupbq:XWLGYHGg2F2hcfxWxMLiNk**** <The log is serialized into byte streams in the Protobuf format.>