Skip to main content

使用 python 请求模块进行 AWS SigV4 身份验证

项目描述

请求-auth-aws-sigv4

将 AWS 签名版本 4 身份验证与 python 请求模块一起使用

此包提供了一个身份验证类,可与流行的 请求包一起使用,以添加 AWS 签名版本 4 身份验证信息。

签名代码的灵感来自 AWS 提供的 python 示例。

该软件包应支持任何/所有 AWS API,包括 API Gateway API (execute-api)、Elasticsearch 集群等。AWS 凭证可以以一种简单且熟悉的方式从环境中提取。签名作为标头添加到请求中。

安装

pip install requests-auth-aws-sigv4

用法

import requests
from requests_auth_aws_sigv4 import AWSSigV4

r = requests.request('POST', 'https://sts.us-east-1.amazonaws.com', 
    data=dict(Version='2011-06-15', Action='GetCallerIdentity'), 
    auth=AWSSigV4('sts'))
print(r.text)

如果boto3可用,它将尝试使用已为 AWS CLI 或 SDK 配置的凭证,如Boto3 用户指南:凭证中所述。否则,如果boto3不可用,则必须使用环境变量或参数提供凭据。

使用环境变量的示例

环境变量名称与 AWS CLI 和 SDK 的记录相同。

export AWS_ACCESS_KEY_ID=MYACCESSKEY
export AWS_SECRET_ACCESS_KEY=THISISSECRET
export AWS_SESSION_TOKEN=THISISWHERETHESUPERLONGTOKENGOES
import requests
from requests_auth_aws_sigv4 import AWSSigV4

aws_auth = AWSSigV4('ec2') # If not provided, check for AWS Credentials from Environment Variables

r = requests.request('GET', 'https://ec2.us-east-1.amazonaws.com?Version=2016-11-15&Action=DescribeRegions',
    auth=aws_auth)
print(r.text)

使用参数的示例

将凭据作为参数传递会覆盖所有其他可能的来源。

import requests
from requests_auth_aws_sigv4 import AWSSigV4

aws_auth = AWSSigV4('ec2',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)

r = requests.request('GET', 'https://ec2.us-east-1.amazonaws.com?Version=2016-11-15&Action=DescribeRegions',
    auth=aws_auth)
print(r.text)

与 Elasticsearch 客户端一起使用 (elasticsearch-py)

from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_auth_aws_sigv4 import AWSSigV4

es_host = 'search-service-foobar.us-east-1.es.amazonaws.com'
aws_auth = AWSSigV4('es')

# use the requests connection_class and pass in our custom auth class
es_client = Elasticsearch(host=es_host,
                          port=80,
                          connection_class=RequestsHttpConnection,
                          http_auth=aws_auth)
es_client.info()

调试日志

所有日志消息都在模块级别。

import logging
logging.basicConfig() # Setup basic logging to stdout
log = logging.getLogger('requests_auth_aws_sigv4')
log.setLevel(logging.DEBUG)

命令行用法

该模块可以从命令行以类似于 cURL 的工作方式运行。

$ python3 -m requests_auth_aws_sigv4 https://sampleapi.execute-api.us-east-1.amazonaws.com/test/ -v
> GET /test/ HTTP/1.1
> Host: sampleapi.execute-api.us-east-1.amazonaws.com
> User-Agent: python-requests/2.23.0 auth-aws-sigv4/0.2
> Accept-Encoding: gzip, deflate
> Accept: */*
> Connection: keep-alive
> X-AMZ-Date: 20200513T180549Z
> Authorization: AWS4-HMAC-SHA256 Credential=AKIASAMPLEKEYID/20200513/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=EXAMPLESIGNATUREISHERE
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 25
< Content-Type: application/json
< Date: Wed, 13 May 2020 18:05:49 GMT
< Server: Server
< x-amz-apigw-id: MeExampleiMFs99=
< x-amzn-RequestId: 7example-7b7b-4343-9a9a-9bbexampleaf
hello

临时安全凭证

AWS STS颁发的用于授予临时访问权限的凭证 可以正常使用。通过传递aws_session_token参数、设置AWS_SESSION_TOKEN环境变量或正常配置 boto3 的凭据来设置令牌。

对 AWS 凭证使用 boto3(或 botocore)

boto3botocore不是使用此模块的要求。
如上所述,如果boto3可用,将创建一个 boto3.Session 以尝试获取凭据并配置默认区域。如果凭据未作为参数提供,这将自动发生。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

requests-auth-aws-sigv4-0.7.ta​​r.gz (8.1 kB 查看哈希

已上传 source

内置分布

requests_auth_aws_sigv4-0.7-py3-none-any.whl (12.1 kB 查看哈希

已上传 py3