Skip to content

AWS signature version 4 signing process for the python requests module

License

Notifications You must be signed in to change notification settings

akarnani/aws-requests-auth

 
 

Repository files navigation

Build Status

AWS Signature Version 4 Signing Process with python requests

This package allows you to authenticate to AWS with Amazon's signature version 4 signing process with the python requests library.

Developed and tested with python 2.7.10.

Installation

pip install aws-requests-auth

Motivation

This code came about because Amazon's Elasticsearch Service does not currently support VPC. This authentication class allows us to talk to our Elasticsearch cluster via IAM.

Conceivably, the authentication class is flexible enough to be used with any AWS service that supports the signature version 4 signing process. However, I've only tested it with the Elasticsearch service.

Usage

import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth

# let's talk to our AWS Elasticsearch cluster
auth = AWSRequestsAuth(aws_access_key='YOURKEY',
                       aws_secret_access_key='YOURSECRET',
                       aws_host='search-service-foobar.us-east-1.es.amazonaws.com',
                       aws_region='us-east-1',
                       aws_service='es')

response = requests.get('http://search-service-foobar.us-east-1.es.amazonaws.com',
                        auth=auth)
print response.content

{
  "status" : 200,
  "name" : "Stevie Hunter",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.5.2",
    etc....
  },
  "tagline" : "You Know, for Search"
}

elasticsearch-py Client Usage Example

It's possible to inject the AWSRequestsAuth class directly into the elasticsearch-py library so you can talk to your Amazon AWS cluster directly through the elasticsearch-py client.

from aws_requests_auth.aws_auth import AWSRequestsAuth
from elasticsearch import Elasticsearch, RequestsHttpConnection

es_host = 'search-service-foobar.us-east-1.es.amazonaws.com'
auth = AWSRequestsAuth(aws_access_key='YOURKEY',
                       aws_secret_access_key='YOURSECRET',
                       aws_host=es_host,
                       aws_region='us-east-1',
                       aws_service='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=auth)
print es_client.info()

About

AWS signature version 4 signing process for the python requests module

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%