使用 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)
包boto3和botocore不是使用此模块的要求。
如上所述,如果boto3可用,将创建一个 boto3.Session 以尝试获取凭据并配置默认区域。如果凭据未作为参数提供,这将自动发生。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
requests-auth-aws-sigv4-0.7.tar.gz
(8.1 kB
查看哈希)