gpt4 book ai didi

amazon-s3 - 如何使用 IAM 角色生成经过身份验证的 S3 URL?

转载 作者:行者123 更新时间:2023-12-02 22:21:17 24 4
gpt4 key购买 nike

当我有硬编码的访问 key 和 secret key 时,我能够生成经过身份验证的 URL,供用户查看 S3 上的私有(private)文件。这是通过以下代码完成的:

import hmac
import sha
import urllib
import time

filename = "".join([s3_url_prefix, filename])
expiry = str(int(time.time()) + 3600)
h = hmac.new(
current_app.config.get("S3_SECRET_KEY", None),
"".join(["GET\n\n\n", expiry, "\n", filename]),
sha
)
signature = urllib.quote_plus(base64.encodestring(h.digest()).strip())
return "".join([
"https://s3.amazonaws.com",
filename,
"?AWSAccessKeyId=",
current_app.config.get("S3_ACCESS_KEY", None),
"&Expires=",
expiry,
"&Signature=",
signature
])

这给了我一些类似 https://s3.amazonaws.com/bucket_name/path_to_file?AWSAccessKeyId=xxxxx&Expires=5555555555&Signature=eBFeN32eBb2MwxKk4nhGR1UPhk%3D 的效果。 。不幸的是,出于安全原因,我无法将 key 存储在配置文件中。因此,我切换到了 IAM 角色。现在,我使用以下方式获取 key :

_iam = boto.connect_iam()

S3_ACCESS_KEY = _iam.access_key
S3_SECRET_KEY = _iam.secret_key

但是,这给我带来了错误“您提供的 AWS 访问 key ID 在我们的记录中不存在。”。根据我的研究,我了解到这是因为我的 IAM key 不是实际 key ,而是与 token 一起使用。因此,我的问题是双重的:

  1. 如何以编程方式获取 token ?似乎没有一个简单的 iam 属性可供我使用。

  2. 如何发送签名中的 token ?我相信我的签名最终应该看起来像 "".join(["GET\n\n\n", expiry, "\n", token, filename]) ,但我不知道要使用什么格式.

任何帮助将不胜感激。

最佳答案

https://github.com/boto/boto/commit/99e14f3df039997f54a5377cb6aecc83f22c2670 中的 generate_url 方法发生了更改(2012 年 6 月)使得使用 session 凭证对 URL 进行签名成为可能。这意味着您需要使用 boto 2.6.0 或更高版本。如果是的话,您应该能够这样做:

import boto
s3 = boto.connect_s3()
url = s3.generate_url(expires_in=3600, method='GET', bucket='<bucket_name>', key='<key_name>')

您使用的是什么版本?

关于amazon-s3 - 如何使用 IAM 角色生成经过身份验证的 S3 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14269246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com