-
-
Save manelclos/51b2bfbd6195f1052eae to your computer and use it in GitHub Desktop.
Quick, dirty Python script that spits out a signed url for Amazon S3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import optparse | |
import sys | |
import os | |
os.environ['S3_USE_SIGV4'] = 'True' | |
from boto.s3.connection import S3Connection | |
def sign(bucket, path, access_key, secret_key, https, expiry, host=None): | |
c = S3Connection(access_key, secret_key, host=host) | |
return c.generate_url( | |
expires_in=long(expiry), | |
method='GET', | |
bucket=bucket, | |
key=path, | |
query_auth=True, | |
force_http=(not https) | |
) | |
if __name__ == '__main__': | |
parser = optparse.OptionParser() | |
parser.add_option('-b', '--bucket', dest='bucket', help='S3 bucket containing the file') | |
parser.add_option('-p', '--path', dest='path', help='Path to the file (relative to the bucket)') | |
parser.add_option('-a', '--access-key', dest='access_key', help='Your AWS Access Key ID') | |
parser.add_option('-s', '--secret-key', dest='secret_key', help='Your AWS secret key') | |
parser.add_option('--no-https', dest='https', action='store_false', default=True, help='Disable serving over HTTPS') | |
parser.add_option('--expiry', dest='expiry', default='631138519', help='Expiry time, in seconds (defaults to two years)') | |
parser.add_option('--host', dest='host', default=None, help='AWS host') | |
options, args = parser.parse_args() | |
for opt in ('bucket', 'path', 'access_key', 'secret_key'): | |
assert options.__dict__.get(opt), '%s is not optional' % opt | |
print sign( | |
bucket=options.bucket, | |
path=options.path, | |
access_key=options.access_key, | |
secret_key=options.secret_key, | |
https=options.https, | |
expiry=long(options.expiry), | |
host=options.host | |
) | |
sys.exit(0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment