NAME
Amazon::Signature4::Lite - Lightweight AWS Signature Version 4 signing
SYNOPSIS
use Amazon::Signature4::Lite;
my $signer = Amazon::Signature4::Lite->new(
access_key => $access_key_id,
secret_key => $secret_access_key,
session_token => $session_token, # optional, for STS/IAM roles
region => 'us-east-1',
service => 's3', # default
);
my $signed = $signer->sign(
method => 'PUT',
url => 'https://s3.amazonaws.com/my-bucket/my-key',
headers => { 'Content-Type' => 'application/gzip' },
payload => $content,
);
# $signed is a hashref of headers ready for HTTP::Tiny:
# Authorization, x-amz-date, x-amz-content-sha256,
# x-amz-security-token (if session_token provided), host
DESCRIPTION
A minimal, dependency-free AWS Signature Version 4 implementation for signing S3 and other AWS API requests. Unlike AWS::Signature4, this module does not depend on LWP or HTTP::Request - it works directly with the plain scalars and hashrefs that HTTP::Tiny uses.
METHODS
new(%args)
my $signer = Amazon::Signature4::Lite->new(
access_key => $key,
secret_key => $secret,
region => 'us-east-1',
);
Required: access_key, secret_key, region. Optional: session_token (for temporary credentials), service (defaults to s3).
sign(%args)
my $headers = $signer->sign(
method => 'GET',
url => $url,
headers => \%extra_headers,
payload => $body,
);
Returns a hashref of HTTP headers including Authorization, x-amz-date, x-amz-content-sha256, and host. Merge these into your HTTP::Tiny request headers.
parse_service_url(%args)
my ($host, $service, $region) = Amazon::Signature4::Lite->parse_service_url(
host => 's3.us-east-2.amazonaws.com',
default_region => 'us-east-1',
);
Extracts service name and region from an AWS endpoint URL. Can be called as a class or instance method.
Note: The patterns used for parsing are S3/AWS endpoint focused, not a general URL parser.
DEPENDENCIES
All dependencies are Perl core modules (since 5.10) or already required by distributions in the Amazon::* toolchain:
Digest::SHA (core since 5.10)
MIME::Base64 (core)
POSIX (core)