I am creating a signed url using the following:
AWS_ACCESS_KEY_ID = my_access_key AWS_SECRET_ACCESS_KEY = my_secret_access_key KEYPAIR_ID = my_keypair_id KEYPAIR_FILE = path_to_keypair_file CF_DISTRIBUTION_ID = cf_dist_id my_connection = cloudfront.CloudFrontConnection( AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY ) distro_summary = my_connection.get_all_distributions()[0] distro_info = my_connection.get_distribution_info(distro_summary.id) distro = distro_summary.get_distribution() SECS = 8000 signed_url = distro.create_signed_url( "https://%s/%s" % (distro_info.domain_name, 'restaurant_1_banner.png'), KEYPAIR_ID, expire_time=time.time() + SECS, valid_after_time=None, ip_address=None, policy_url=None, private_key_file=KEYPAIR_FILE #private_key_string=KEYPAIR_ID ) return signed_url When I click on this link, I get the message:
<Error> <Code>AccessDenied</Code> <Message>Access denied</Message> </Error> This is my bucket policy for my s3 bucket.
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E3I8A03QRR3ASO" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::menumaster/*" } ] } Please let me know if any additional information is required.