from boto.s3.connection import S3Connection
from boto.s3.key import Key
import hmac
import hashlib
import binascii
AWS_ACCESS_KEY = "***"
AWS_SECRET_KEY = "***"
BUCKET_NAME = "mybucket"
S3_FILE_PATH = "encrypted.txt"
result="la bibi da bibi dum"
def sign(key, msg):
return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, regionName, serviceName):
kDate = sign(("AWS4" + key).encode("utf-8"), dateStamp)
kRegion = sign(kDate, regionName)
kService = sign(kRegion, serviceName)
kSigning = sign(kService, "aws4_request")
return kSigning
signature = sign(getSignatureKey('arn:aws:kms:...', "20150126", "us-east-1", "s3"), result)
def uploadToS3(fileName, fileContent):
connection = S3Connection(AWS_ACCESS_KEY, AWS_SECRET_KEY,debug=2)
bucket = connection.get_bucket(BUCKET_NAME)
key = Key(bucket)
key.key = fileName
key.set_contents_from_string(fileContent, headers={'Authorization' : signature,'x-amz-server-side-encryption' : 'aws:kms','x-amz-server-side-encryption-aws-kms-key-id' : 'arn:aws:kms:...'})
uploadToS3(fileName=S3_FILE_PATH, fileContent=result)
<Code>InvalidArgument</Code>
<Message>Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4.</Message>
<ArgumentName>Authorization</ArgumentName>
<ArgumentValue>null</ArgumentValue>
PUT /encrypted.txt HTTP/1.1\r\n
Accept-Encoding: identity\r\n
x-amz-content-sha256: ***\r\n
Content-Length: 20\r\n
Host: testjavaencryption.s3.amazonaws.com\r\n
Content-MD5: ***\r\n
x-amz-server-side-encryption-aws-kms-key-id: arn:aws:kms:us-east-1:***\r\n
Expect: 100-Continue\r\n
X-Amz-Date: 20150128T195418Z\r\n
Authorization: AWS4-HMAC-SHA256 Credential=***/20150128/us-east-1/s3/aws4_request,SignedHeaders=content-length;content-md5;content-type;expect;host;user-agent;x-amz-content-sha256;x-amz-date;x-amz-server-side-encryption;x-amz-server-side-encryption-aws-kms-key-id,Signature=***\r\n
x-amz-server-side-encryption: aws:kms\r\n
Content-Type: application/octet-stream\r\n
User-Agent: Boto/2.34.0 Python/2.7.8 Windows/8\r\n\r\n'