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:

SEE ALSO

AWS::Signature4, Signer::AWSv4, Amazon::S3::Lite