Net::Amazon::SignatureVersion4 - Signs requests using Amazon's Signature Version 4.
version 0.007
use Net::Amazon::SignatureVersion4;
my $sig=Net::Amazon::SignatureVersion4->new();
my $hr=HTTP::Request->new('GET','http://glacier.us-west-2.amazonaws.com/-/vaults', [
'Host', 'glacier.us-west-2.amazonaws.com',
'Date', strftime("%Y%m%dT%H%M%SZ",gmtime(time())) ,
'X-Amz-Date', strftime("%Y%m%dT%H%M%SZ",gmtime(time())) ,
'x-amz-glacier-version', '2012-06-01',
]);
$hr->protocol('HTTP/1.1');
$sig->set_request($request); # $request is HTTP::Request
$sig->set_region('us-west-2');
$sig->set_service('glacier'); # Must be service you are accessing
$sig->set_Access_Key_ID('AKIDEXAMPLE'); # Replace with your ACCESS_KEY_ID
$sig->set_Secret_Access_Key('wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY'); # Replace with your SECRET_KEY
my $authorized_request=$sig->get_authorized_request();
my $agent = LWP::UserAgent->new( agent => 'perl-Net::Amazon::SignatureVersion4-Testing');
my $response = $agent->request($authorized_request);
if ($response->is_success) {
say("List of vaults");
say($response->decoded_content); # or whatever
say("Connected to live server");
}else {
say($response->status_line);
use Data::Dumper;
say("Failed Response");
say(Data::Dumper->Dump([ $response ]));
}
This module implements Amazon's Signature Version 4 as documented at http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html
The tests for this module are taken from the test suite provided by Amazon. This implementation does not yet pass all the tests. The following test is failing:
get-header-value-multiline: Amazon did not supply enough files for this test. The test may be run, but the results can not be validated.
This method does most of the work for the user. After setting the
request, region, service, access key, and secret access key, this
method will return a copy of the request headers with
authorization.
This method gets the authorization line that should be added to
the headers. It is likely never to be used by the end user. It
is here as a convenient test.
This method implements the derived signing key required for
version 4. It is likely never to be used by the end user. It is
here as a convenient test.
This method returns the string to sign. It is likely never to be
used by the end user. It is here as a convenient test.
This method returns the canonical request. It is likely never to
be used by the end user. It is here as a convenient test.
Charles A. Wimmer [email protected]
This software is Copyright (c) 2022 by Charles A. Wimmer.
This is free software, licensed under:
The (three-clause) BSD License