- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经编写了以下代码来使用 boto 对 URLS 进行签名,但是,我无法访问已签名的 URLS。任何帮助将不胜感激。
con = cloudfront.CloudFrontConnection(
settings.AWS_USER_DETAILS.access_key_id,
settings.AWS_USER_DETAILS.secret_key_id,
)
identities = con.get_all_origin_access_identity()
if len(identities) < 1:
oai = con.create_origin_access_identity(
'cv-oai',
'OAI signing iOS video requests'
)
else:
oai = con.get_all_origin_access_identity()[0]
distro_summary = con.get_all_distributions()[0]
distro_info = con.get_distribution_info(distro_summary.id)
bucket = boto.connect_s3(
settings.AWS_USER_DETAILS.access_key_id,
settings.AWS_USER_DETAILS.secret_key_id,
host='s3-eu-west-1.amazonaws.com'
).get_bucket(u'cv-video')
key_str = video.video_url.split('/')[-1]
key = bucket.get_key(key_str)
key.add_user_grant("READ", oai.s3_user_id)
distro = distro_summary.get_distribution()
# For local testing
if ip_addr == '127.0.0.1':
ip_addr = None
private_key_string = open(settings.CF_PRIV_KEY_LOC).read()
print private_key_string
signed_url = distro.create_signed_url(
"https://%s/%s" % (distro_info.domain_name, key_str),
'APKAI3I3QZ7I73OIQIXA',
expire_time=int(time.time()) + video.video_length + 5 * 60,
#valid_after_time=None,
#ip_address=ip_addr,
#policy_url=None,
private_key_string=private_key_string
)
错误:
更新:这是访问上述代码生成的 URL 时收到的错误。我无法找到 CloudFront 错误的文档来确定为什么会发生这种情况。
<Error>
<Code>InvalidKey</Code>
<Message>Unknown Key</Message>
</Error>
示例网址:
key 对肯定是活跃的:
只有一个 Origin Access Identity 和一个 distribution:
[<boto.cloudfront.identity.OriginAccessIdentitySummary object at 0x10f356110>]
[<boto.cloudfront.distribution.DistributionSummary object at 0x10f356090>]
最佳答案
我遇到了同样的问题。
我想是不是 couldfront 和 s3 还没有逻辑连接到“源访问身份”。这是 cloudfront 用于从 S3 中提取内容的身份,使用您指定的私钥对验证签名。
果然,这就是问题所在。禁用对底层 S3 存储桶的公共(public)访问,然后告诉 AWS 使用适当的身份,然后再次尝试您的代码。
这是来自网络的方法:
在 CloudFront 仪表板 ( https://console.aws.amazon.com/cloudfront/home ) 中,单击左侧的“分发”以查看您的所有发行版。选择您想要的,单击 [i] 图标了解更多信息。从那里,单击 [Origins] 选项卡并选择存储桶旁边的单选按钮。单击它,将出现一个编辑按钮。单击编辑。在出现的新面板中选择“限制存储桶访问”。该站点将提示您使用哪种访问身份。选择您创建的身份。单击“是,编辑”以保存您的更改。
祝你好运!
关于python - 无法使用 boto 签署云端 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893885/
是否可以进行 Puppet 设置,在其中使用 JClouds 在云上实例化新虚拟机,然后通过 Puppet 定义和实现其配置(软件堆栈)? 或者 Puppet 的本质是否存在某些固有的因素阻碍其在 A
作者:京东零售 郑炳懿 前言: 当今世界,云计算技术在快速发展,不断为我们带来新的应用场景和解决方案。作为一名前端开发者,了解云技术并掌握如何在前端中应用它们是必不可少的。
我在我们的 iOS 通用应用程序中使用核心数据,并希望用户能够将其数据备份到我们的服务器。因此他们可以使用另一台设备登录并将该数据拉取到该设备。有人对此有什么建议吗?我想在服务器上分析数据,以便与我们
我在 Xcode 的验证过程中收到此错误,这让我抓狂。我花了几个小时试图修复它,但找不到解决方案。 我们拥有正确的分发证书、供应配置文件以及我能想到的与此相关的一切。我已经撤销并重建了我所有的项目,但
今天我对一个项目有了一个非常好的想法,不幸的是存在信息/经验障碍。 我基本上想要的是在云中运行游戏并将图像流式传输给用户。 我知道 ec2 可以选择使用 GPU,但它可能有错误的定价模型来满足我的需求
我是 Cloud Firestore 的新手(我们不都是这样吗?)并且我已经使用 Node.js 中的管理 SDK 向我的数据库添加了一些数据。它显示在控制台上,但在文档下显示“此文档不存在,它不会出
我有一个托管在 s3 存储桶上的静态 html 网站。我已经使用 let's encrypt 生成了一个免费的 ssl 证书,并将其导入到 ACM 中。 certbot --manual --serv
我一直在阅读 Cloudfront 文档,我想确保我的计划是合理的。我有一个后端 API,结构为 EC2 HTTP 服务器,内容经常更新(每秒几次更改)。这是我的理解: 我不应该将此 HTTP 服务器
我是一名优秀的程序员,十分优秀!