Solicitações de assinatura - Amazon S3 Glacier

Esta página é somente para clientes existentes do serviço S3 Glacier que usam o Vaults e o original de 2012. REST API

Se você estiver procurando por soluções de armazenamento de arquivamento, sugerimos usar as classes de armazenamento S3 Glacier no Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval e S3 Glacier Deep Archive. Para saber mais sobre essas opções de armazenamento, consulte Classes de armazenamento S3 Glacier e Armazenamento de dados de longo prazo usando classes de armazenamento S3 Glacier no Guia do usuário do Amazon S3. Essas classes de armazenamento usam o Amazon S3API, estão disponíveis em todas as regiões e podem ser gerenciadas no console do Amazon S3. Eles oferecem recursos como análise de custos de armazenamento, lente de armazenamento, recursos avançados de criptografia opcional e muito mais.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Solicitações de assinatura

No S3 Glacier toda solicitação enviada é autenticada com uma assinatura. Para assinar uma solicitação, calcule uma assinatura digital usando a função de hash criptográfico. Hash criptográfico é uma função que retorna um valor de hash exclusivo com base na entrada. A entrada da função de hash inclui o texto da solicitação e a chave de acesso secreta. A função de hash retorna um valor de hash que você inclui na solicitação como sua assinatura. A assinatura é parte do cabeçalho Authorization de sua solicitação.

Depois de receber a solicitação, o S3 Glacier recalculará a assinatura usando a mesma função de hash e a entrada que você usou para assinar a solicitação. Quando a assinatura resultante corresponde à assinatura na solicitação, o S3 Glacier processa a solicitação. Do contrário, a solicitação é rejeitada.

O S3 Glacier oferece suporte à autenticação usando o AWS Signature versão 4 da . O processo para calcular uma assinatura pode ser dividido em três tarefas:

  • Tarefa 1: Criar uma solicitação canônica

    Reorganize sua HTTP solicitação em um formato canônico. É necessário usar uma forma canônica, pois o S3 Glacier usa a mesma forma canônica quando recalcula uma assinatura para comparar com a que você enviou.

  • Tarefa 2: Criar uma string para assinar

    Crie uma string que será usada como um dos valores de entrada para sua função hash criptográfica. A string, chamada string-to-sign, é uma concatenação do nome do algoritmo hash, da data da solicitação, de uma string do escopo da credencial e da solicitação canonizada da tarefa anterior. A cadeia de caracteres do escopo da credencial em si é uma concatenação de informações de data, AWS região e serviço.

  • Tarefa 3: Criar uma assinatura

    Crie uma assinatura para sua solicitação usando uma função hash criptográfica que aceita duas strings de entrada: sua string para assinar e uma chave derivada. A chave derivada é calculada começando com sua chave de acesso secreta e usando a string do escopo da credencial para criar uma série de códigos de autenticação de mensagens baseados em hash ()HMACs. Observe que a função hash usada nessa etapa de assinatura não é o algoritmo de hash de árvore usado no S3 Glacier que carrega dados. APIs

Cálculo de assinatura de exemplo

O exemplo a seguir mostra os detalhes da criação de uma assinatura para Create Vault (PUT vault). Esse exemplo pode ser usado como referência para verificar o método de cálculo da assinatura. Para obter mais informações, consulte Assinar AWS API solicitações no Guia IAM do usuário.

O exemplo supõe o seguinte:

  • O timestamp da solicitação é Fri, 25 May 2012 00:24:53 GMT.

  • O endpoint é a região Leste dos EUA (Norte da Virgínia) us-east-1.

A sintaxe geral da solicitação (incluindo o JSON corpo) é:

PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

O formato canônico da solicitação calculada para Tarefa 1: Crie uma solicitação canônica é:

PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

A última linha da solicitação canônica é o hash do corpo da solicitação. Além disso, observe a terceira linha vazia na solicitação canônica. Isso ocorre porque não há parâmetros de consulta para issoAPI.

A string para assinar para a Tarefa 2: Criar uma string para assinar é:

AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743

A primeira linha da string-to-sign é o algoritmo, a segunda linha é a time stamp, a terceira linha é o escopo da credencial e a última linha é o hash da solicitação canônica da Tarefa 1: Crie uma solicitação canônica. O nome do serviço a usar no escopo da credencial é glacier.

Para a Tarefa 3: Criar uma assinatura, a chave derivada pode ser representada como:

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")

Se a chave de acesso secreta, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY, for usada, a assinatura calculada será:

3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

A etapa final é construir o cabeçalho Authorization. Para a chave de acesso de demonstração AKIAIOSFODNN7EXAMPLE, o cabeçalho (com quebras de linha adicionadas por motivo de legibilidade) é:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

Calcular assinaturas para as operações de streaming

Upload Archive (POST archive) e Upload Part (PUT uploadID) são operações de streaming que exigem que você inclua um cabeçalho adicional x-amz-content-sha256 ao assinar e enviar a solicitação. As etapas de assinatura das operações de streaming são exatamente as mesmas de outras operações, com a adição do cabeçalho de streaming.

O cálculo do cabeçalho de streaming x-amz-content-sha256 é baseado no SHA256 hash de todo o conteúdo (carga útil) que deve ser carregado. Observe que esse cálculo é diferente do hash (Computar somas de verificação) da SHA256 árvore. Além dos casos triviais, o valor de SHA 256 hash dos dados da carga útil será diferente do hash da SHA256 árvore dos dados da carga útil.

Se os dados da carga útil forem especificados como uma matriz de bytes, você poderá usar o seguinte trecho de código Java para calcular o hash. SHA256

public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }

Da mesma forma, em C#, você pode calcular o SHA256 hash dos dados da carga, conforme mostrado no trecho de código a seguir.

public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }

Exemplo de cálculo de assinatura para streaming API

O exemplo a seguir mostra os detalhes da criação de uma assinatura para Upload Archive (POST archive) um dos dois streaming APIs no S3 Glacier. O exemplo supõe o seguinte:

  • O timestamp da solicitação é Mon, 07 May 2012 00:00:00 GMT.

  • O endpoint é a região Leste dos EUA (Norte da Virgínia), eu-east-1.

  • O conteúdo da carga útil é uma string "Bem-vindo ao S3 Glacier."

A sintaxe geral da solicitação (incluindo o JSON corpo) é mostrada no exemplo abaixo. O cabeçalho x-amz-content-sha256 está incluído. Neste exemplo simplificado, x-amz-sha256-tree-hash e x-amz-content-sha256 têm o mesmo valor. No entanto, para uploads de arquivos maiores que 1 MB, este não é o caso.

POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

A forma canônica da solicitação calculada para Tarefa 1: Criar uma solicitação canônica é mostrada abaixo. O cabeçalho de streaming x-amz-content-sha256 é incluído com o valor. Isso significa que você deve ler a carga útil e calcular o SHA256 hash primeiro e depois calcular a assinatura.

POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628

O restante do cálculo da assinatura segue as etapas descritas em Cálculo de assinatura de exemplo. O cabeçalho Authorization que usa a chave de acesso secreta wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY e a chave de acesso AKIAIOSFODNN7EXAMPLE é mostrado abaixo (com quebras de linha adicionadas para fins de legibilidade):

Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6