Extension to urllib3 adding support for AWS Signature Version 4
Project description
urllib3 SigV4
Extension to urllib3 adding support for signing the requests with AWS Signature Version 4. It uses the Boto3 library for handling the AWS credentials and the actual signing process.
Installation
To install the package, use either pip:
pip install urllib3_sigv4
or uv:
uv add urllib3_sigv4
Usage
This library provides a drop-in replacement for two main components of urllib3,
the PoolManager
class and the top-level request
method. It adds a new optional parameter which determines if and how the
requests should be signed.
Creating a Signer
First, create an instance of the SigV4RequestSigner class which defines the
parameters for request signing:
from urllib3_sigv4 import SigV4RequestSigner
signer = SigV4RequestSigner(
"lambda",
region="eu-central-1",
access_key="AKIAIOSFODNN7EXAMPLE",
secret_key="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
)
The first parameter is mandatory and identifies the AWS service we want to make
requests to (AWS Lambda in this case). The region, access_key and
secret_key parameters are optional and will be inferred from the environment
if not passed (via the default Boto3 session, see
here
and here
for more details).
Making Requests
To make signed requests to an AWS service, pass the signer instance via the
signer parameter when creating the PoolManager:
from urllib3_sigv4 import PoolManager, SigV4RequestSigner
signer = SigV4RequestSigner("lambda")
http = PoolManager(signer=signer)
response = http.request(
"POST",
"https://my-lambda-url-id.lambda-url.eu-central-1.on.aws",
json={"name": "John Doe", "age": 30}
)
print(response.json())
You can also provide the signer in individual request method calls to
override the default behavior:
from urllib3_sigv4 import PoolManager, SigV4RequestSigner
signer = SigV4RequestSigner("lambda")
http = PoolManager()
# The same as when using urllib3's PoolManager.
response = http.request("GET", "https://httpbin.org/get")
print(response.json())
# This request will be signed.
response = http.request(
"POST",
"https://my-lambda-url-id.lambda-url.eu-central-1.on.aws",
json={"name": "John Doe", "age": 30},
signer=signer
)
print(response.json())
You can also use a convenience top-level request method which uses a
module-global PoolManager instance:
from urllib3_sigv4 import SigV4RequestSigner, request
signer = SigV4RequestSigner("lambda")
response = request(
"POST",
"https://my-lambda-url-id.lambda-url.eu-central-1.on.aws",
json={"name": "John Doe", "age": 30},
signer=signer
)
print(response.json())
Reference
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file urllib3_sigv4-1.1.0.tar.gz.
File metadata
- Download URL: urllib3_sigv4-1.1.0.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2b3fbc9cbf3257004ae3b8396bd88b6cf488c42990ffe71050825af063b6191
|
|
| MD5 |
df1f6a89b42a309a9b8f3cb36b678534
|
|
| BLAKE2b-256 |
04098b17948c7fa8c2ae18ec6fc168c7dced5dc95ebb8ef6af03b301c057a48d
|
Provenance
The following attestation bundles were made for urllib3_sigv4-1.1.0.tar.gz:
Publisher:
ci.yml on tlinhart/urllib3-sigv4
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
urllib3_sigv4-1.1.0.tar.gz -
Subject digest:
f2b3fbc9cbf3257004ae3b8396bd88b6cf488c42990ffe71050825af063b6191 - Sigstore transparency entry: 275343864
- Sigstore integration time:
-
Permalink:
tlinhart/urllib3-sigv4@53a6efa548c8439fe744015c07890a92452dc10c -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/tlinhart
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@53a6efa548c8439fe744015c07890a92452dc10c -
Trigger Event:
push
-
Statement type:
File details
Details for the file urllib3_sigv4-1.1.0-py3-none-any.whl.
File metadata
- Download URL: urllib3_sigv4-1.1.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15fbfe56139281f89e6eee1a2908a67271ce1de5afb7eb26d6ad543c9aaa9029
|
|
| MD5 |
f3f13b0b68aaf7731e97bbc15697a309
|
|
| BLAKE2b-256 |
fa772607259ef85d46a1fdda8cbd6318d7452fe693db2b7999506873ad5d1666
|
Provenance
The following attestation bundles were made for urllib3_sigv4-1.1.0-py3-none-any.whl:
Publisher:
ci.yml on tlinhart/urllib3-sigv4
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
urllib3_sigv4-1.1.0-py3-none-any.whl -
Subject digest:
15fbfe56139281f89e6eee1a2908a67271ce1de5afb7eb26d6ad543c9aaa9029 - Sigstore transparency entry: 275343865
- Sigstore integration time:
-
Permalink:
tlinhart/urllib3-sigv4@53a6efa548c8439fe744015c07890a92452dc10c -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/tlinhart
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@53a6efa548c8439fe744015c07890a92452dc10c -
Trigger Event:
push
-
Statement type: