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

requests-auth-aws-sigv4的Python项目详细描述


请求-auth-aws-sigv4

在python请求模块中使用AWS签名版本4身份验证

这个包提供了一个可以与流行的 requests包以添加 AWS Signature Version 4 验证信息。在

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

该包应支持任何/所有AWS API,包括API网关API(execute API), Elasticsearch群集等。AWS证书可能会从环境中提取 以一种简单而熟悉的方式。 签名将作为标头添加到请求中。在

安装

pip install requests-auth-aws-sigv4

使用

^{pr2}$

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

使用环境变量的示例

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

exportAWS_ACCESS_KEY_ID=MYACCESSKEY
exportAWS_SECRET_ACCESS_KEY=THISISSECRET
exportAWS_SESSION_TOKEN=THISISWHERETHESUPERLONGTOKENGOES
importrequestsfromrequests_auth_aws_sigv4importAWSSigV4aws_auth=AWSSigV4('ec2')# If not provided, check for AWS Credentials from Environment Variablesr=requests.request('GET','https://ec2.us-east-1.amazonaws.com?Version=2016-11-15&Action=DescribeRegions',auth=aws_auth)print(r.text)

使用参数的示例

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

importrequestsfromrequests_auth_aws_sigv4importAWSSigV4aws_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)

fromelasticsearchimportElasticsearch,RequestsHttpConnectionfromrequests_auth_aws_sigv4importAWSSigV4es_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 classes_client=Elasticsearch(host=es_host,port=80,connection_class=RequestsHttpConnection,http_auth=aws_auth)es_client.info()

调试日志

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

importlogginglogging.basicConfig()# Setup basic logging to stdoutlog=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 202018: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的凭据配置为正常。在

使用boto3(或botocore)作为AWS凭证

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaPax考试:从非标准Maven存储库解析Karaf特性存储库(XML文件)   java Spring启动Bean创建异常   java中将ArrayList转换为数组的方法   Android Studio的java Unity插件。   java在CheckStyle中从方法计数中排除getter和setter   HibernateJava。sql。SQLSyntaxErrorException:表/视图“序列”不存在   与命令行程序Java vs C通信   java WebView膨胀异常   java在O(n)java8流中寻找两个列表的交集   java使用Gradle运行单元测试时,最大堆大小在哪里设置?   ssl加载java应用程序(CXF)内的jks文件   CI:Jenkins Git:Simple Java项目:希望在特定时间在脚本上发送消息   java根据位置更改数字   java按数值排序字符串数组   macos java版本“1.6.0_65”是否与java 6模棱两可?   Cassandra中的java时间戳