AWS подпись версии 4 в Tcl для вызова CloudFront API - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь использовать API createInvalidtion , который предлагает amazon, и я немного запутался в части аутентификации, я видел эту документацию о подписи AWS , но разве я действительно хочу все это делать ?! Это кажется слишком большим для простого запроса, кроме того, я не уверен, какой должна быть каждая часть, особенно каноническая часть запроса, поскольку API, который я хочу использовать, прост и не требует большого создания.

Я использую язык программирования (TCL) без встроенной библиотеки для cloudFront, поэтому я собираюсь построить все с нуля, благодарю за любую помощь или если кто-то сталкивался с подобной ситуацией.

1 Ответ

1 голос
/ 26 мая 2020

Я видел эту документацию о подписи AWS, но действительно ли я хочу сделать все это?!

Подпись AWS построена с использованием цепочки HMA C вычислений, это не так уж и много. Исходя из документации AWS , это может выглядеть так:

set key "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"
set dateStamp "20120215"
set regionName "us-east-1"
set serviceName "iam"

proc hmac-sha256 {str hexKey} {
    lindex [exec openssl dgst -sha256 -mac hmac -macopt hexkey:$hexKey << [encoding convertto utf-8 $str]] 1
}

proc getSignatureKey {key dateStamp regionName serviceName} {
    binary scan [encoding convertto utf-8 "AWS4$key"] H* hexKey
    set kDate [hmac-sha256 $dateStamp  $hexKey]
    puts "kDate    = $kDate"
    set kRegion [hmac-sha256 $regionName $kDate];
    puts "kRegion  = $kRegion"
    set kService [hmac-sha256 $serviceName $kRegion];
    puts "kService = $kService"
    set kSigning [hmac-sha256 "aws4_request" $kService]
    puts "kSigning = $kSigning"
    return $kSigning
}

getSignatureKey $key $dateStamp $regionName $serviceName

Это выводит на печать:

kDate    = 969fbb94feb542b71ede6f87fe4d5fa29c789342b0f407474670f0c2489e0a0d
kRegion  = 69daa0209cd9c5ff5c8ced464a696fd4252e981430b10e3d3fd8e2f197d7a70c
kService = f72cfd46f26bc4643f06a11eabb6c0ba18780c19a8da0c31ace671265e3c87fa
kSigning = f4780e2d9f65fa895f9c67b32ce1baf0b0d8a43505a000a1a9e090d414db404d

Некоторая предыстория:

  • Вызов исполняемого файла openssl может быть неадекватным в некоторых ситуациях, вам может потребоваться проверить наличие некоторых встроенных модулей Tcl (мне известно только о привязке команды Tcl к OpenSSL / LibreSSL в NaviServer и tcllib's sha2 module )

  • Вышеупомянутая реализация передает шестнадцатеричные дампы двоичных строк (для образовательных целей, отладки), вы можете использовать двоичные строки напрямую.

Что касается REST задачи, он сводится к сборке HTTP-запроса с настраиваемыми параметрами запроса и XML полезной нагрузкой.

...