2012-06-29 25 views
2

我想知道如何为cloudfront创建一个签名的URL。目前的工作解决方案是不安全的,我想切换系统以保护URL。如何使用Python创建签名的云端URL?

我一直在使用的Boto 2.5.2和Django的1.4

是否有关于如何使用boto.cloudfront.distribution.create_signed_url方法的工作示例试过吗?或任何其他解决方案的工作?

我已经使用BOTO 2.5.2 API

def get_signed_url(): 
    import boto, time, pprint 
    from boto import cloudfront 
    from boto.cloudfront import distribution 
    AWS_ACCESS_KEY_ID = 'YOUR_AWS_ACCESS_KEY_ID' 
    AWS_SECRET_ACCESS_KEY = 'YOUR_AWS_SECRET_ACCESS_KEY' 
    KEYPAIR_ID = 'YOUR_KEYPAIR_ID' 
    KEYPAIR_FILE = 'YOUR_FULL_PATH_TO_FILE.pem' 
    CF_DISTRIBUTION_ID = 'E1V7I3IOVHUU02' 
    my_connection = boto.cloudfront.CloudFrontConnection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
    distros = my_connection.get_all_streaming_distributions() 
    oai = my_connection.create_origin_access_identity('my_oai', 'An OAI for testing') 
    distribution_config = my_connection.get_streaming_distribution_config(CF_DISTRIBUTION_ID) 
    distribution_info = my_connection.get_streaming_distribution_info(CF_DISTRIBUTION_ID) 
    my_distro = boto.cloudfront.distribution.Distribution(connection=my_connection, config=distribution_config, domain_name=distribution_info.domain_name, id=CF_DISTRIBUTION_ID, last_modified_time=None, status='Active') 

    s3 = boto.connect_s3() 
    BUCKET_NAME = "YOUR_S3_BUCKET_NAME" 
    bucket = s3.get_bucket(BUCKET_NAME) 
    object_name = "FULL_URL_TO_MP4_ECLUDING_S3_URL_DOMAIN_NAME EG(my/path/video.mp4)" 
    key = bucket.get_key(object_name) 
    key.add_user_grant("READ", oai.s3_user_id) 

    SECS = 8000 
    OBJECT_URL = 'FULL_S3_URL_TO_FILE.mp4' 
    my_signed_url = my_distro.create_signed_url(OBJECT_URL, 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) 

似乎一切都正常,直到方法create_signed_url尝试下面的代码。它返回一个错误。

Exception Value: Only specify the private_key_file or the private_key_string not both 
+0

以供将来参考couldfront西宁URL与python3.4坏了,希望这样可以节省别人一段时间,具体详情这张票https://github.com/boto/boto/issues/2854?_pjax=%23js-repo -pjax容器 – Aameer

回答

3

略去private_key_string

my_signed_url = my_distro.create_signed_url(OBJECT_URL, KEYPAIR_ID, 
     expire_time=time.time() + SECS, private_key_file=KEYPAIR_FILE) 

这个参数用来传递私钥文件的实际内容,作为一个字符串。 the source中的意见解释说只有private_key_fileprivate_key_string中的一个应该通过。

也可以省略所有这些都设置为None的kwargs,因为None是默认的。

+0

嗨克里斯, 谢谢您的建议。我曾尝试这样做,它会返回一个错误: Django的版本:\t 1.4 异常类型:\t RSAError 异常值:\t无从下手线 你知道什么可能导致这个问题?多谢! – ipegasus

+0

没关系。有用。该问题与不正确的云端私人密钥文件有关。我通过亚马逊AWS安全证书页面创建了一个新密钥,它可以工作。感谢您的帮助! – ipegasus

相关问题