Assine requisições de origem com HMAC
Sirva um bucket privado compatível com S3 por meio de um connector que assina cada requisição de origem com credenciais HMAC.
Você pode servir os objetos de um bucket privado por meio de um connector que assina cada requisição ao endpoint compatível com S3 do bucket, pelo Azion Console, pela Azion CLI ou pela API. A assinatura é HMAC, uma configuração de Origin Shield em um connector do tipo http. Para aceitar na sua origem apenas os endereços da Azion, consulte Libere os IPs da Azion na sua origem.
Os exemplos usam o endpoint de Azion Object Storage s3.us-east-005.azionstorage.net com a região us-east-005, e um objeto chamado hello.txt na raiz do bucket. Substitua-os pelo endpoint, pela região e por um objeto do seu provedor.
Selecione a interface que você usa. Os pré-requisitos e cada tarefa desta página seguem essa escolha.
Pré-requisitos
- Uma aplicação servida por um workload, e o workload domain ou um domínio seu ao qual o workload responde. Para criá-los, consulte Primeiros passos com Applications.
- Um bucket privado em um endpoint compatível com S3, e uma access key e uma secret key que podem ler o bucket. Para as credenciais de Azion Object Storage, consulte Compatibilidade com S3.
curl, para verificar o resultado.
- Acesso ao Azion Console.
Crie o connector de assinatura
O connector alcança o endpoint por HTTPS e envia o próprio nome do endpoint como header Host. O caminho dele, /<bucket-name>, vai na frente de cada caminho de requisição, então uma requisição para /hello.txt chega ao endpoint como /<bucket-name>/hello.txt. Com Origin Shield ativado, HMAC assina cada uma dessas requisições com as suas credenciais, usando o tipo aws4_hmac_sha256.
A CLI cria um connector a partir de um arquivo JSON. Salve este corpo como connector.json e substitua <bucket-name>, <access-key> e <secret-key> pelos seus valores:
O arquivo contém a sua secret key. Exclua-o depois de criar o connector.
Para criar o connector com a Azion CLI, passe o arquivo e o tipo. O comando exige --type mesmo que o arquivo nomeie o tipo:
A saída traz o ID do novo connector:
Anote o ID: a próxima tarefa o passa como <connector-id>. O connector existe na sua conta e assina cada requisição que envia ao endpoint.
Desativar HMAC depois remove as credenciais armazenadas. Para ativá-lo de novo, informe outra vez a access key e a secret key.
Envie requisições ao connector
Um connector não recebe tráfego até que uma regra na sua aplicação o nomeie. Esta regra corresponde a requisições para /hello.txt na fase de requisição, e o behavior Set Connector dela as envia ao connector de assinatura. Substitua /hello.txt pelo caminho do seu objeto. Se a sua aplicação já tem uma regra que corresponde a todos os caminhos, mantenha esta regra depois dela, para que esta regra decida o connector do objeto. Para mais informações, consulte Set Connector.
Mantenha a regra em um arquivo: em uma linha de comando, o shell expandiria ${uri}. Salve este corpo como rule.json e substitua <connector-id> pelo ID do connector de assinatura:
Para criar a regra com a Azion CLI, execute este comando. Substitua <application-id> pelo ID da sua aplicação:
A saída traz o ID da nova regra:
A regra está ativa na sua aplicação e envia as requisições para /hello.txt ao connector de assinatura.
Verifique a requisição assinada
A verificação é a mesma em qualquer interface que você usou. Um novo connector e uma nova regra levam vários minutos para chegar à infraestrutura distribuída da Azion, e os data centers os aplicam em momentos diferentes. Até lá, uma requisição ainda pode chegar ao connector de outra regra. Repita a requisição até que o endpoint responda. Para mais informações, consulte Propagação.
Solicite o objeto pelo seu workload. Substitua <workload-domain> pelo workload domain ou pelo seu próprio domínio:
O endpoint responde 200 com o conteúdo do objeto. Estes headers identificam o endpoint de storage como a origem da resposta:
Para comparar, solicite o mesmo objeto diretamente ao endpoint, sem assinatura:
O endpoint recusa a requisição sem assinatura com 401, não 403:
O workload retorna o mesmo 401 quando HMAC está desativado no connector. O connector assina cada requisição ao bucket privado, e o seu workload serve o objeto. Para as correções, consulte O endpoint de storage retorna 401 UnauthorizedAccess.