使用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凭证
包boto3和botocore不是使用此模块的要求。
如上所述,如果boto3可用,则将创建一个boto3.Session来尝试获取凭据
并配置默认区域。如果没有将凭据作为参数提供,则会自动发生这种情况。在
- 项目
标签: